同一笔订单的发货记录出现两条,支付平台显示只回调了一次成功。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

if (order.status !== 'PAID') {
  order.status = 'PAID';
  await order.save();
}
return 'success';

平台在未收到成功响应时会重发通知,处理逻辑没有做幂等判断。这一点先确认清楚,后面就不用反复试。

「支付回调重复」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,以订单号加状态做唯一约束;处理前先查询当前状态;成功后立即返回确认响应。

改完照着核一遍,重复通知不再产生重复业务,订单状态一致。

作者 9823189