订单是否会存在超时了,但是支付成功了的情况?
2024-10-27
NEW个对象
存在,需要进行退款处理。
订单状态:未支付、支付成功、已退款、支付关闭,如果订单超时,不可能更新为支付成功,如果订单成功,也不可能更新为超时。
订单状态流转:未支付 -> 支付成功 -> 已退款,或者 未支付 -> 支付关闭。
状态更新
支付成功
只有未支付的订单的才能更新成功。
在执行SQL的时候,判断支付状态是否是未支付,如果是更新,否则更新失败,并抛异常人工处理。
为什么要抛异常,而不是自动退款?
1、这种事情是小概率事件。
2、自动退款很危险,如果出现bug,会有损失。
3、会进入退款流程,人工对帐、钱原路返回。
对帐机制?
1、在订单表里有支付额度、冲退额度
2、如果支付成功,设置支付额度。
3、对帐处理:过期订单的支付额度 = 冲退额度,如果不一致则说明订单异常,进行对帐处理,进行退款操作。
已退款
只有支付成功的订单才能退款成功
在执行SQL的时候,判断支付状态是否是已支付,如果是更新,否则就更新失败。
支付关闭
只有未支付的订单的才能更新成功。
1、检查订单的状态是否是已支付,如果是则不更新。
2、调用第三方接口,查询订单状态,如果是退款,则说明缺少支付成功状态,人工补起,如果是成功,则不更新
3、如果以上都不满足,则可以将订单关闭。
在执行SQL的时候,判断支付状态是否是未支付,如果是更新,否则就更新失败。
建议在操作订单数据订单前加分布式锁,避免出现数据异常,以及很多线上问题。
上一篇:支付中心 - 订单同步
相关文章
-
ThreadLocal 的 key 为什么是弱引用,value 是强引用?
ThreadLocal 的 key 为什么是弱引用,value 是强引用?
NEW个对象 2026-06-13
-
数据库出现死锁的案例
报告生成案例: 报告编辑的时候:更新模板内容,更新报告引用的id。 报告生成的时候:更新报告引用的id,再更新模板内容。
NEW个对象 2025-08-01
-
博客项目简介
博客主要是为了分享一些个人的生活经验,网上创业,人生感悟,解决生活中遇到的小问题。主要包括:博客管理、自媒体、技术专区等。(博客业务架构图)
NEW个对象 2024-10-06
NEW个对象
JAVA是世界上最好的语言