用户在收银台看到「支付成功」,返回商户页订单仍是「待付款」,半小时后订单被自动关闭。渠道后台那笔交易状态是 SUCCESS,金额 299.00。乍看像缓存或者权限的锅,追下去往往不是。

SELECT id, order_no, status FROM wp_orders
WHERE status = 'pending'
  AND created_at < NOW() - INTERVAL 2 MINUTE;

追下去是这么回事:支付回调和前端回跳是两条独立链路,回跳页只负责跳转没改状态,回调地址又在防火墙白名单外没进来。订单状态只能靠回调驱动,回调没到就永远停在初始值。

「支付成功状态未更新」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。

具体做法是,先把回调域名加进白名单并确认能从公网访问,用渠道的联调工具发一条真实通知;回跳页只做展示,另给一个刷新支付结果的按钮,主动向渠道查单再改状态;加一个每分钟跑的补单任务,把待付款超过两分钟而渠道已成功的订单拉回来更新。

验收就看一点,支付完成后不点返回,等一分钟刷新后台,订单状态变成已付款,关闭任务不再动它。

作者 9823189