系统之间的一致性问题 -- 支付成功显示未支付
系统之间的一致性问题 -- 支付成功显示未支付:
接入第三方系统的支付接口,支付成功后,却显示未支付。
支付成功显示未支付,有些用户会重复支付,有些用户会取消订单,后果非常严重。
问题分析:
先查看第三方系统的支付状态。
如果第三方系统的支付状态也是未支付,那么说明第三方系统的状态有问题。
如果第三方系统的支付状态是支付成功,那么说明系统之间存在不一致性。
这种一般是系统之间的状态不一致导致的。
解决方法:
- 主动查询:
支付后,一般是通过回调来获取支付结果的。如果第三方系统没有回调,那么当前系统可以主动查询第三方系统的支付状态。
- 延时查询/定时查询:
服务端可以重试,做延时查询的。
支付之后,主动查询,如果查询到的支付状态是未支付,那么服务端可以把订单放到延时队列中,1秒后再次查询,如果1秒后还是未支付,再次放入延时队列。根据业务需要,调整后续的时间间隔。
如果系统的数据量不大,也可以直接用定时任务,扫描数据表中未支付的订单,再查询第三方系统。
- 客户端重试:
服务端可以做重试,但是没法在重试后刷新页面,如果是客户端重试,可以让用户尽快看到最新的支付结果。
客户端重试,不需要做太多次,可以每隔一秒查询一次支付结果,如果是未支付就继续查询,最多三次。
一般三秒内如果还是查不到支付成功的结果,那么就没必要在客户端继续重试了。
- 页面展示中间状态:
用户支付之后,如果第三方系统的支付状态还是未支付,当前系统可以展示 为 "支付中" 。
如果付款之后,展示 "未支付", 用户可能会投诉,但是如果 付款之后,展示的是 "支付中", 用户或许会主动刷新页面,等待最新的支付结果。
其他业务的一致性
不止是 支付,其他业务如果存在一致性问题,也可以如上处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-04-28 为什么要用数据库连接池?
2018-04-28 java常用的几种线程池比较
2018-04-28 通过maven自动修改idea的compiler