最近在公司遇到一个关于支付的场景,跟大家分享一下。
起因
客户在商城下单之后,发现自己订单状态是已取消的状态,这是怎么一回事呢?让我们分析一下。
目前的逻辑
用户订单页会有30分钟超时关闭订单的倒计时操作,用户在30分钟内支付成功,则订单状态修改为已完成,否则30分钟之后订单变成已完成。通常订单超时取消的操作是由MQ延时关闭订单的。
问题
根据上面的情况会在日常使用中出现什么情况呢?大家可以动脑筋思考一下,好了,思考完毕,大家有答案了么,是的,会出现如下一个问题,有一些用户在购买物品时会比较犹豫,经常在最后一秒才进行支付,这时会出现一个问题,犹豫微信支付完成之后通知结果是异步通知的,且如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止。
这是可能由于网络原因或者通知失败,订单在MQ中先到期了,去执行订单取消的操作,且回归库存。然后支付成功之后结果发现订单已取消就不发放权益。客户就会一脸懵逼,我付了钱,怎么订单是关闭的,且购买的权益没生效。
如下图所示:
解决方案
这种情况由于商品的库存已经回滚了,可能被其他用户抢到了,所以应该在支付结果回调的时候,判断订单的状态是已取消的话,则进行自动退款的操作,告知用户订单在支付成功时订单已经取消了,如果库存充足的话,请用户重新下单。这种临界点的操作其实很常见。我们在敲代码的时候也要多注意这种临界点情况的考虑。如果大家有更好的解决方案欢迎大家评论或者私聊博主。
结语
🔥一个人可以掌握知识,但只有与他人交流才能形成智慧。
🔥One person can acquire knowledge, but wisdom is formed only in the exchange with others.
📝 欢迎大家关注博主公众号 Rockey小何同学
🏆 我坚信人与人之间的差距是表面上是财富的差距,本质上是大脑中认知的差距,
我们下期再见。