支付宝h5支付java对接
支付宝h5支付对接
·
支付宝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("支付完成");
}
更多推荐
所有评论(0)