关于支付回调未判断成功状态的惨案
原创2024/12/31大约 2 分钟
关于支付回调未判断成功状态的惨案
1、业务背景
现有某电商平台,商品下单支付的常规交易场景,对接的支付平台为易宝支付。
2、问题现象
前端同学在联调测试的过程中,疯狂的发起支付但不支付,如此重复,突然发现再进行此操作,订单即使没有支付,也变为了成功的状态,而且正式环境的情况也一样,问题非常严重。
3、排查过程
收到反馈后,下意识已经想到了之前留下的一个 FIXME(支付回调处理时未判断是成功还是失败的状态),当时意识到了这个风险,但迫于没有时间处理,因此搁置了。
首先查看了一下支付平台的回调日志,果然,回调的结果是 FAIL。

4、定位原因
疯狂的发起支付但不支付操作,猜测应该是触发了支付平台的风控,然后对平台的支付商户号进行了封禁控制(实际上并不是因为不支付,而是商户号出现了配置问题,具体什么原因忘了),导致发起支付后支付失败,并得到了支付失败的回调。
在代码中未判断支付回调的成功状态,最终导致了支付失败但将订单错误的处理为成功的大 bug。
5、解决方案
当时发现问题后,为防止问题影响扩大,遂紧急对小程序进行了下架处理。另一边,紧急从线上分支拉了一个 fix 分支,进行 bug 修复后,重新部署了后端服务。
6、总结经验
勿以善小而不为!

