订单是否会存在超时了,但是支付成功了的情况?
2024-10-27
NEW个对象
存在,需要进行退款处理。
订单状态:未支付、支付成功、已退款、支付关闭,如果订单超时,不可能更新为支付成功,如果订单成功,也不可能更新为超时。
订单状态流转:未支付 -> 支付成功 -> 已退款,或者 未支付 -> 支付关闭。
状态更新
支付成功
只有未支付的订单的才能更新成功。
在执行SQL的时候,判断支付状态是否是未支付,如果是更新,否则更新失败,并抛异常人工处理。
为什么要抛异常,而不是自动退款?
1、这种事情是小概率事件。
2、自动退款很危险,如果出现bug,会有损失。
3、会进入退款流程,人工对帐、钱原路返回。
对帐机制?
1、在订单表里有支付额度、冲退额度
2、如果支付成功,设置支付额度。
3、对帐处理:过期订单的支付额度 = 冲退额度,如果不一致则说明订单异常,进行对帐处理,进行退款操作。
已退款
只有支付成功的订单才能退款成功
在执行SQL的时候,判断支付状态是否是已支付,如果是更新,否则就更新失败。
支付关闭
只有未支付的订单的才能更新成功。
1、检查订单的状态是否是已支付,如果是则不更新。
2、调用第三方接口,查询订单状态,如果是退款,则说明缺少支付成功状态,人工补起,如果是成功,则不更新
3、如果以上都不满足,则可以将订单关闭。
在执行SQL的时候,判断支付状态是否是未支付,如果是更新,否则就更新失败。
建议在操作订单数据订单前加分布式锁,避免出现数据异常,以及很多线上问题。
上一篇:支付中心 - 订单同步
相关文章
-
调用第三方接口会遇到那些问题以及解决方案
调用第三方接口会遇到那些问题以及解决方案? 如果有对接第三方的场景,一般第三方会给你一个文档,文档里包含对接第三方的规则,还有一些接口文档。 根据文档要求进行调用即可,不同的三方接口调用规则可能不一样。
NEW个对象 2024-10-29
-
支付中心:调用第三方支付,第三方已经处理成功,但是调用方显示支付失败,是什么原因造成的?
先说下支付流程: 支付中心调用第三方,第三方将支付结果通过异步的方式返回给支付中心,支付中心做后续的处理。 从流程中来看:
NEW个对象 2024-10-28
-
支付中心:订单自动过期
支付中心模块,在生成订单之后,订单在10分钟会自动过期,这个功能是通过定时任务实现的。
NEW个对象 2024-10-19