支付宝h5支付java对接
支付配置相关
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";
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";
}
支付代码
@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 {
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("支付完成");
}