场景:
????????一般我们下的一些订单,比如电商平台、外卖平台的都是有超时时间的,默认一般15或者30分钟,那么超时未支付订单会被自动取消,那么如果刚好有人在关闭订单的时候去支付成功了,或者说支付平台延迟了一下,你取消了订单,这时候支付成功的回调通知过来了,那怎么办呢?
????????这个场景会有,很极端的场景,按照统计大概是万分之一到10万分之一的概率,之前我们每天都会有一些。
这是一个业务上的问题,首先要业务确定这个场景下我们必须以自身系统状态为准
方案一:
????????在支付回调的逻辑中判断一下订单状态,如果当前订单已经被自身业务系统的延时任务给处理成 支付超时,则触发自动退款。若正好卡时当前订单还未被延时任务给处理,则认为当前订单尚在允许时间内,则走正常支付成功发货流程
方案二:
? ? ? ? 这个方案取决于渠道的不同,例如支付宝有的接口是有绝对超时时间[例如手机网站支付],过了这个时间用户无法付款,对于我业务端则安心关闭超时订单
????????但是也有的三方支付的快捷支付,不支持绝对超时时间,以具体银行超时时间为准,不予配置,这个场景在关闭业务系统超时订单时,可以手动调用一次关单接口,根据关单结果再去决定是否关闭业务系统的订单
疑问:
????????为什么要退款,把订单从取消改回来不就好了吗?
emm....
????????订单是有终态的,不是说想改什么状态就改什么状态,一个订单创建包含很多东西,比如库存、优惠券、积分等,整个流程东西非常多也很复杂,取消订单已经返还了库存和这些东西,如果直接改状态是不现实也不可能的。
????????取消了都能去支付成功再把订单状态翻转回来的话,那就太恐怖了
????????订单一定是有个终态的,也会存在确实去把终态订单改状态的情况,这种一般叫做『修数』,就是总会有些意外的情况导致需要修正一些数据的,这是没办法的,但是这不是正常流程