为什么支付成功却没有自动发货?
码支付完成后,支付平台通常会向商户服务器发送异步通知。商户系统只有在验证签名、核对订单并正确返回响应后,才应把订单更新为已支付。用户已经付款但订单状态未变化,常见原因包括回调地址无法访问、签名计算不一致、金额核对失败,或业务处理后没有返回平台要求的成功标识。
一、确认回调请求真正到达服务器
先查看 Web 访问日志和应用日志,确认回调 URL、请求时间、HTTP 状态码和来源请求是否存在。回调地址必须能够从公网访问,并使用有效的 HTTPS 证书。不要把登录验证、验证码或浏览器跳转逻辑放在异步通知接口前面。若使用 CDN 或防火墙,还要检查安全规则是否误拦截 POST 请求。
二、使用原始参数参与验签
验签前应严格按照接口文档筛选参与签名的字段,并排除签名字段本身。参数名称大小写、空值是否参与、排序方式、连接符以及密钥拼接位置必须完全一致。不要先把金额转换成浮点数再参与签名,也不要擅自格式化时间、订单号或中文内容。
三、检查编码和摘要格式
商户端与支付端应使用相同的字符编码。计算签名前需要确认 URL 解码次数,避免同一参数被重复解码。MD5 或其他摘要结果还可能区分大写与小写。有效的排查方式是记录脱敏后的待签名字符串、参数键顺序和本地计算结果,再与接口文档示例逐项比较。日志中禁止记录完整密钥。
四、核对订单,而不是只相信回调
验签通过后,还应核对商户订单号、支付金额、币种、应用标识和订单当前状态。只有全部一致时才能更新订单。对于金额异常、订单不存在或已经关闭的通知,应记录原因并停止发货。高价值订单可以结合主动查询接口进行二次确认。
五、正确处理重复通知
支付平台在未收到成功响应时可能多次发送同一通知,因此回调处理必须具备幂等性。可以对商户订单号或平台流水号建立唯一约束,并在事务中判断订单是否已经处理。重复通知应直接返回成功,不得重复增加余额、发送商品或执行返佣。
建议的排查清单
1. 回调地址能够从公网访问,HTTPS 证书有效;
2. 服务器时间、订单号和金额格式正确;
3. 签名字段、排序和密钥拼接符合接口文档;
4. 日志记录充分,但不泄露密钥和用户信息;
5. 订单更新、业务发货和回调响应具备幂等性;
6. 失败通知能够进入告警或人工复核流程。
调试回调时,不要通过关闭验签来换取“暂时可用”。正确做法是保留原始请求证据,逐项比对签名输入,并使用测试订单验证首次通知、重复通知和异常金额三类场景。





