栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

支付宝支付

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

支付宝支付

首先是依赖

com.alipay.sdk
alipay-sdk-java

关于支付宝的配置 也是你在第三方平台需要配置的


package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

@Data
@TableName(“alipay_config”)
public class AlipayConfig implements Serializable {

@TableId

// @Column(name = “id”)
private Long id;

 

// @Column(name = “app_id”)
private String appId;

 

// @Column(name = “charset”)
private String charset;

 

// @Column(name = “format”)
private String format;

 

// @Column(name = “gateway_url”)
private String gatewayUrl;

 

// @Column(name = “notify_url”)
private String notifyUrl;

 

// @Column(name = “private_key”)
private String privateKey;

 

// @Column(name = “public_key”)
private String publicKey;

 

// @Column(name = “return_url”)
private String returnUrl;

 

// @Column(name = “sign_type”)
private String signType;

 

// @Column(name = “sys_service_provider_id”)
private String sysServiceProviderId;
}

其次是我们需要 进行的 前端传过过来的 对象接受
包括价格 商品详细 订单号等等

public ResponseEntity toPayAsPc(@Validated@RequestBody TradeVo trade) throws Exception{
//获取到我们的支付宝配置
AlipayConfig aliPay = alipayService.find();
//这是设置一个唯一的支付编号和订单编号不同
trade.setOutTradeNo(alipayUtils.getOrderCode());
//这里是获得二维码链接 将配置和 订单甩里面去
String payUrl = alipayService.toPayAsPc(aliPay,trade);
return ResponseEntity.ok(payUrl);
}

public String toPayAsPc(AlipayConfig alipay, TradeVo trade) throws Exception {

    if(alipay.getId() == null){
        throw new BadRequestException("请先添加相应配置,再操作");
    }
    AlipayClient alipayClient = new DefaultAlipayClient(alipay.getGatewayUrl(), alipay.getAppId(), alipay.getPrivateKey(), alipay.getFormat(), alipay.getCharset(), alipay.getPublicKey(), alipay.getSignType());

    // 创建API对应的request(电脑网页版)
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

    // 订单完成后返回的页面和异步通知地址
    request.setReturnUrl(alipay.getReturnUrl());
    request.setNotifyUrl(alipay.getNotifyUrl());
    // 填充订单参数
    request.setBizContent("{" +
            "    "out_trade_no":""+trade.getOutTradeNo()+""," +
            "    "product_code":"FAST_INSTANT_TRADE_PAY"," +
            "    "total_amount":"+trade.getTotalAmount()+"," +
            "    "subject":""+trade.getSubject()+""," +
            "    "body":""+trade.getBody()+""," +
            "    "extend_params":{" +
            "    "sys_service_provider_id":""+alipay.getSysServiceProviderId()+""" +
            "    }"+
            "  }");//填充业务参数
    // 调用SDK生成表单, 通过GET方式,口可以获取url
    return alipayClient.pageExecute(request, "GET").getBody();

}

验证签名 看哈有没人恶意修改

public ResponseEntity returnPage(HttpServletRequest request, HttpServletResponse response){
    AlipayConfig alipay = alipayService.find();
    response.setContentType("text/html;charset=" + alipay.getCharset());
    //内容验签,防止黑客篡改参数
    if(alipayUtils.rsaCheck(request,alipay)){
        //商户订单号
        String outTradeNo = new String(request.getParameter("out_trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        //支付宝交易号
        String tradeNo = new String(request.getParameter("trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        System.out.println("商户订单号"+outTradeNo+"  "+"第三方交易号"+tradeNo);

        // 根据业务需要返回数据,这里统一返回OK
        return new ResponseEntity<>("payment successful",HttpStatus.OK);
    }else{
        // 根据业务需要返回数据
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
}

异步回调用 拿到三方平台返回的结果

@RequestMapping(value = "/requestAliPay")
@ResponseBody
public String requestAliPay(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, AlipayApiException, UnknownHostException {
	// 获取支付宝GET过来反馈信息
	System.out.println("支付宝回调");
	Map params = new HashMap();
	Map requestParams = request.getParameterMap();
	for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
		String name = (String) iter.next();
		String[] values = (String[]) requestParams.get(name);
		String valueStr = "";
		for (int i = 0; i < values.length; i++) {
			valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
		}
		// 乱码解决,这段代码在出现乱码时使用
		valueStr = new String(valueStr.getBytes("utf-8"), "utf-8");
		params.put(name, valueStr);
	}
	String ALIPAY_PUBLIC_KEY = Global.getConfig("shop.pay.ALIPAY_PUBLIC_KEY");
	boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2"); // 调用SDK验证签名
	//验证签名通过
	if(signVerified){
		// 商户订单号
		String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

		// 支付宝交易号
		String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");

		// 付款金额
		String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

		System.out.println("商户订单号="+out_trade_no);
		System.out.println("支付宝交易号="+trade_no);
		System.out.println("付款金额="+total_amount);
		//在这里处理自己的业务
		return renderResult(Global.TRUE, "支付成功");
	}else{
		return renderResult(Global.FALSE, "支付失败");
	}
}

最后结束

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号