公司动态
别错过每一笔支付成功通知:Alipay SDK for Java 异步通知接收与验签完整指南
别错过每一笔支付成功通知Alipay SDK for Java 异步通知接收与验签完整指南【免费下载链接】alipay-sdk-java-all支付宝开放平台 Alipay SDK for Java项目地址: https://gitcode.com/gh_mirrors/al/alipay-sdk-java-allAlipay SDK for Java是支付宝开放平台官方的服务端 Java SDK除了帮你完成加签、发起 HTTP 请求它同样能帮你完成支付回调中的异步通知验签。本文将带你走一遍完整流程设置 notify_url、接收异步通知、用 SDK 完成验签并正确应答确保每一笔支付成功通知都不被漏掉。为什么不能只相信「同步返回」很多新手第一反应是用户付款后支付宝不是会把结果同步返回给页面或 App 吗为什么还要监听异步通知原因很简单网络不稳定同步返回依赖用户客户端与支付宝之间的网络一旦中断就收不到结果App 支付等场景根本拿不到同步返回只能靠服务端接收通知以异步通知为准是支付宝官方明确的订单状态判定依据——你的业务代码应当「以异步通知为最终确认」。也就是说同步返回用于改善用户体验异步通知才用于落库改单。这也是「别错过每一笔支付成功通知」的核心含义。 通知地址常量在 SDK 中定义notify_url见v2/src/main/java/com/alipay/api/AlipayConstants.java第 58 行。完整流程一图看懂整个机制可以概括为 4 步下单时在支付请求对象上调用setNotifyUrl(回调地址)告诉支付宝「付完款请 POST 到这个 URL」用户支付成功支付宝服务器向你的回调地址发起 HTTP POST参数中带订单信息 sign签名服务端验签用 Alipay SDK for Java 的验签能力以支付宝公钥或证书模式下的支付宝公钥证书验证签名真伪核对金额并应答验签通过、total_amount与本地订单一致后处理业务并原样返回字符串success否则支付宝会按策略多次重试推送。官方测试用例中就能看到设置回调地址的用法v2/src/test/java/com/alipay/api/SDKExecuteTest.java第 49 行request.setNotifyUrl(http://www.test.notify);对应的请求类如 AlipayTradeAppPayRequest.javasetNotifyUrl方法位于该文件第 45 行——几乎所有支付类 Request 都提供同样的方法。第 1 步在支付请求中设置 notify_url以最常见的 App 支付为例SDK 使用方式始终围绕「3 个主要步骤」创建DefaultAlipayClient→ 构建 Request 并填充 Model → 执行并处理响应。设置回调只需在第二步中多加一行AlipayTradeAppPayRequest request new AlipayTradeAppPayRequest(); request.setBizModel(model); request.setNotifyUrl(https://your-domain.com/alipay/notify); // 异步通知地址设置 notify_url 的 3 个硬性要求要求说明必须是 HTTPS生产环境回调地址要求 https且域名需备案不能带业务参数通知 URL 上不要拼接?a1之类的参数支付宝会原样回传并以此作为签名内容的一部分接口要「快」收到通知后先快速应答success耗时的改单逻辑放到异步线程/MQ 中执行避免超时触发重复推送第 2 步用 Alipay SDK for Java 完成验签收到支付宝 POST 过来的参数后第一件事永远是验签而不是解析业务字段。原理是支付宝把通知参数除sign外按规则拼成签名串再用支付宝私钥做RSA2SHA256withRSA签名你只需要用支付宝公钥做反向验证。SDK 把这套加解密与验签细节全部封装好了验签核心逻辑v2/src/main/java/com/alipay/api/DefaultSignChecker.java第 20 行起为公钥验签、第 30 行起为证书验签加解密接口v2/src/main/java/com/alipay/api/Encryptor.java、v2/src/main/java/com/alipay/api/SignChecker.java客户端统一入口v2/src/main/java/com/alipay/api/AlipayClient.java实际使用时从 Request 对象上取「原始签名串」和「sign 值」交给客户端的验签方法即可完成校验验签用的公钥或证书路径与发起请求时是同一套配置无需额外维护。客户端的创建与参数装配可参考 DefaultAlipayClient.java。⚠️常见误区用「应用公钥」去验支付宝发来的通知——方向反了。验通知/响应签名用支付宝公钥证书模式用支付宝公钥证书验你自己发的请求签名才用应用公钥。第 3 步核对订单信息然后只返回 success验签通过后还必须做业务校验两条是底线total_amount与本地订单金额完全一致注意用字符串/BigDecimal 比较别用浮点out_trade_no能匹配到本地订单且trade_status是预期状态如TRADE_SUCCESS。全部通过后向支付宝输出纯文本success不含 HTML、不含多余空格换行。如果支付宝收到的不是success它会在 24 小时内按「15 分钟、30 分钟、1 小时、6 小时、15 小时」等递增间隔重试推送——所以接口必须做幂等同一笔out_trade_no重复通知只处理一次。新手最容易踩的 4 个坑把 notify_url 指向 localhost支付宝服务器访问不到你本机通知永远收不到。请通过内网穿透/公网域名接收。验签用了错误的公钥再次强调验通知用支付宝公钥。返回体写成了success!或带换行必须精确返回success。接口里同步改单太慢超时未应答会被判定失败并重试导致重复下单风险。先应答、后异步处理。遇到问题去哪里找答案快速排查response.isSuccess()为 false 时日志中的trace_id可直接提供给支付宝技术支持定位问题版本变更v2 版详细变更记录见v2/CHANGELOG依赖引入推荐通过 Maven 引入声明见v2/pom.xml与v2/README.md的「安装依赖」章节接口参数定义v2 协议全部 9000 个 API 的 Request/Response/Model 均位于v2/src/main/java/com/alipay/api/request/与v2/src/main/java/com/alipay/api/response/目录可按 API 名称直接检索v3 协议RESTful JSON 整体加验签接口说明文档集中在v3/docs/目录约 400 篇代码由 OpenAPI 描述文件v3/api/openapi.yaml生成。写在最后异步通知 验签是接入 Alipay SDK for Java 后绕不开的「最后一环」。把notify_url配置好、用 SDK 内置验签能力把关真伪、金额核对后快速应答success——做到这三点你的订单系统就不会再漏掉任何一笔支付成功通知。【免费下载链接】alipay-sdk-java-all支付宝开放平台 Alipay SDK for Java项目地址: https://gitcode.com/gh_mirrors/al/alipay-sdk-java-all创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考