支付宝h5支付java对接

支付配置相关

SDK

<!-- 阿里支付 SDK -->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.39.113.ALL</version>
</dependency>

配置

public class AliPayConstant {
    //支付宝支付网关
    public static final String ALIPAY_URL = "https://openapi.alipay.com/gateway.do";
	//支付完成回调接口给后端回调处理订单用
    public static final String ALIPAY_NOTIFY_URL = "XXXXXXXX";
	//前端支付完成跳转地址
    public static final String ALIPAY_RETURN_URL = "https:XXXXX";
	//前端支付中途退出专向地址
    public static final String ALIPAY_QUIT_URL = "https:XXXXX";

	//支付宝应用appid	
    public static final String ALIPAY_APP_ID = "123412331";
    //支付宝应用私钥
    public static final String ALIPAY_APP_PRIVATE_KEY = "ADSADSADSAD";
    //支付宝公钥 注意是支付宝公钥 不是应用公钥
    public static final String ALIPAY_APP_PUBLIC_KEY = "aSAsaDADSADSADS";
    //编码
    public static final String CHARSET = "UTF-8";
    //加密方式
    public static final String SIGN_TYPE = "RSA2";
    //数据类型
    public static final String FORMAT = "json";


}

支付代码

//ParkingBill是我的订单信息
//接口
@Operation(summary = "账单支付")
@PostMapping("/payBill")
public Result<String> payBill(@RequestBody ParkingBill parkingBill) throws AlipayApiException {
    return parkingBillService.aliPay(parkingBill);
}


//实现
    public Result<String> aliPay(ParkingBill parkingBill) throws AlipayApiException {
        // 初始化SDK
        AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
        // 构造请求参数以调用接口
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        //回调到后端地址
        request.setNotifyUrl(AliPayConstant.ALIPAY_NOTIFY_URL);
        //重定向地址
        request.setReturnUrl(AliPayConstant.ALIPAY_RETURN_URL);
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        // 设置商户订单号
        model.setOutTradeNo(parkingBill.getBillSysCode());
        // 设置订单总金额
        model.setTotalAmount(parkingBill.getTotalCost().toString());
        // 设置订单标题
        model.setSubject("xxxxxxx");
        // 设置产品码
        model.setProductCode("QUICK_WAP_WAY");
        // 设置用户付款中途退出返回商户网站的地址
        model.setQuitUrl(AliPayConstant.ALIPAY_QUIT_URL);
        request.setBizModel(model);
        log.info("支付参数:{}", JSONObject.toJSONString(request));
        AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
        String pageRedirectionData = response.getBody();
        System.out.println(pageRedirectionData);
        if (response.isSuccess()) {
            return Result.success(pageRedirectionData);
        }
       throw new RuntimeException("调用失败");
    }


//初始化支付配置类
   private  static AlipayConfig getAlipayConfig() {
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setAppId(AliPayConstant.ALIPAY_APP_ID);
        alipayConfig.setPrivateKey(AliPayConstant.ALIPAY_APP_PRIVATE_KEY);
        alipayConfig.setAlipayPublicKey(AliPayConstant.ALIPAY_APP_PUBLIC_KEY);
        alipayConfig.setFormat("json");
        alipayConfig.setCharset(AliPayConstant.CHARSET);
        alipayConfig.setSignType(AliPayConstant.SIGN_TYPE);
        alipayConfig.setServerUrl(AliPayConstant.ALIPAY_URL);
        return alipayConfig;
    }

回调相关

/**
 * 支付宝回调接口
 */
@Operation(summary = "支付宝回调接口")
@PostMapping("/aliNotify")
public Result aliPayNotify(HttpServletRequest request) throws Exception{
    return parkingBillService.aliPayNotify(request);
}
public Result aliPayNotify(HttpServletRequest request) throws AlipayApiException {
    if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
        log.info("=========支付宝异步回调========");

        Map<String, String> params = new HashMap<>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (String name : requestParams.keySet()) {
            params.put(name, request.getParameter(name));
        }
        String outTradeNo = params.get("out_trade_no");
        //根据订单号查询账单信息 自己业务自己处理
        //
        //
        //
        //
        String sign = params.get("sign");
        log.info("sign: ===》{}", sign);
        String content = AlipaySignature.getSignCheckContentV1(params);
        log.info("content: ===》{}", content);
        boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, AliPayConstant.ALIPAY_APP_PUBLIC_KEY, AliPayConstant.CHARSET); // 验证签名
        log.info("签名验证结果: ===》{}", checkSignature);
        if (checkSignature) {
            log.info("交易名称: ===》{}", params.get("subject"));
            log.info("交易状态: ===》{}", params.get("trade_status"));
            log.info("支付宝交易凭证号: ===》{}", params.get("trade_no"));
            log.info("商户订单号: ===》{}", params.get("out_trade_no"));
            log.info("交易金额: ===》{}", params.get("total_amount"));
            log.info("买家在支付宝唯一id: ===》{}", params.get("buyer_id"));
            log.info("买家付款时间: ===》{}", params.get("gmt_payment"));
            log.info("买家付款金额: ===》{}", params.get("buyer_pay_amount"));
            
            //更新账单状态
            //自己业务处理
            //
            //
            return Result.success("支付完成");
        }
        //验签失败自己业务处理
        //
        //
    }
    //支付失败自己业务处理
    //
    //
    return Result.success("支付完成");
}
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐