回调日志里 order_no 20261109001 查询返回 null,代码抛出订单不存在的异常,渠道收到 500 后继续重试。下单接口的响应时间那一栏写着 3.2 秒。日志里能对上时间点,这种反而好排。
下单流程把创建订单丢进队列异步执行,支付请求却在下单接口返回前就发出,用户扫码付款快过订单落库。回调按订单号查不到记录,只能报错,重试几次后订单才出现。这一点先确认清楚,后面就不用反复试。
SELECT order_no, status FROM wp_orders WHERE order_no = '20261109001'; -- 返回空不要抛异常,先写回调日志表
围绕「通知先到订单不存在」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。
处理上按这个顺序:回调里查不到订单时不要抛异常,按渠道规则返回处理中,先把报文落盘;落盘后用延迟队列每隔十秒重查一次,最多五次,查到再走后续流程;下单接口改成同步写订单再返回支付参数,队列只做发货之类的后续动作。
结果对不对很好判断,把下单接口人为延迟三秒再付款,回调不再报订单不存在,订单最终状态正确。
