起因
有同学反馈"付完钱过了好久订单还是待支付"。排查后发现两个彼此无关但方向一致的问题:
- 部分带 query string 的微信支付 GET 接口,签名过程没包含 query string,导致接口返回签名错误
- 少数场景下支付回调处理异常时,订单没有被及时改为已支付
做了什么
1. 签名问题修复
按照微信支付 V3 规范,补齐签名过程对 query string 的处理,确保所有 GET 接口的签名都能通过。
2. 订单兜底补偿
新增订单兜底补偿机制:定期检查长时间停留在 pending 的订单,通过微信官方的查询接口反向核对真实支付状态,发现已支付的订单自动回写为已支付并触发开通流程。
3. 回调链路统一
把支付回调的处理路径统一,减少多个入口写出多套处理逻辑导致的不一致。
用户会感受到的变化
- 最直观:付款完成后,订单状态切换更及时,几秒内就会变成已支付
- 即使偶发异常:哪怕某一次回调出了问题,也有兜底机制会在很短时间内把订单恢复
- 不再需要人工介入:以前出现卡单只能联系客服手工处理,现在基本不会走到这一步
相关范围
- 小程序与官网的所有微信支付场景:购买课程、购买批改额度、购买综合学情报告等
这条记录的发布时间
以最后一次相关 git 提交的时间为准:2026-04-20 19:55:15。