支付订单状态一般情况下分为三大类,待支付,处理中,最终状态(成功或失败)。
- 待支付:支付订单初始化创建
- 处理中:已经组装好支付数据或已经发送至支付机构,还未返回结果
- 最终状态:最终状态就是支付订单的最后状态,是不允许在修改了的。
我们是直连的工行,出现了这样一个现象,一个支付订单,回调了两次,第一次是失败提示说用户的账户余额不足,过了有9分钟,第二次通知说支付成功了。
场景分析:用户第一次支付,发现钱不够,页面没有关,换了一张卡,或者转了足够的钱,继续支付
当第一次通知时,支付状态就已经被设置为支付失败了,第二次通知时,发现已经是最终状态就不在处理了。结果就是客户前被扣了,订单也没有成功。
我提出解决方案,是把他的失败,映射成处理中,只有得到明确的结果说成功了,才修改成成功,这样就不会影响到对账等后续操作,因为对账只对成功的。