简介:本文系统梳理支付宝支付接入全流程,涵盖技术选型、API调用、安全合规等核心环节,提供可落地的开发方案与风险防控建议。
开发者需根据业务类型选择适配的支付接口:
alipay.trade.wap.pay接口。alipay.trade.create生成订单,再通过alipay.trade.pay唤起支付宝SDK。my.tradePay接口。alipay.trade.precreate接口。案例:某电商APP接入时,因未区分APP支付与H5支付接口,导致用户支付后订单状态不同步,引发客诉。
支付宝支付依赖RSA2算法进行签名验证,步骤如下:
openssl genrsa -out app_private_key.pem 2048openssl rsa -in app_private_key.pem -pubout -out app_public_key.pem
public String generateSign(Map<String, String> params, String privateKey) {params.remove("sign"); // 排除签名字段String content = AlipaySignature.getSignContent(params);return AlipaySignature.rsaSign(content, privateKey, "UTF-8", "RSA2");}
out_trade_no和trade_no一致性。
boolean verifyResult = AlipaySignature.rsaCheckV1(request.getParameterMap(),alipayPublicKey,"UTF-8","RSA2");
@PostMapping("/notify")public String handleNotify(HttpServletRequest request) {Map<String, String> params = parseNotifyParams(request);if (AlipaySignature.rsaCheckV1(params, alipayPublicKey, "UTF-8", "RSA2")) {String tradeStatus = params.get("trade_status");if ("TRADE_SUCCESS".equals(tradeStatus)) {// 更新订单状态orderService.updateStatus(params.get("out_trade_no"), "PAID");}return "success"; // 必须返回success,否则支付宝会重试}return "failure";}
timestamp和nonce字段,服务端校验唯一性。****。
SELECT a.out_trade_noFROM merchant_orders aLEFT JOIN alipay_transactions b ON a.out_trade_no = b.out_trade_noWHERE a.status = 'PAID' AND b.trade_no IS NULL;
| 问题类型 | 典型场景 | 解决方案 |
|---|---|---|
| 签名失败 | 提示“签名错误” | 检查私钥格式是否为PKCS#8,排除参数中的空值 |
| 订单重复 | 用户连续点击支付按钮 | 前端禁用按钮,后端通过分布式锁控制订单创建 |
| 通知丢失 | 未收到异步通知 | 实现补偿机制,主动查询支付宝订单状态 |
实践建议:接入初期建议使用支付宝沙箱环境进行全流程测试,覆盖正常交易、异常退款、网络超时等场景。正式上线前需完成等保2.0三级认证,确保符合金融级安全标准。