系统之间的一致性问题 -- 支付成功显示未支付:
接入第三方系统的支付接口,支付成功后,却显示未支付。
这种一般是系统之间的状态不一致导致的。
问题分析:
先查看第三方系统的支付状态。
如果第三方系统的支付状态也是未支付,那么说明第三方系统的状态有问题。
如果第三方系统的支付状态是支付成功,那么说明系统之间存在不一致性。
解决方法:
- 主动查询:
支付后,一般是通过回调来获取支付结果的。如果第三方系统没有回调,那么当前系统可以主动查询第三方系统的支付状态。
- 延时查询/定时查询:
服务端可以重试,做延时查询的。
支付之后,主动查询,如果查询到的支付状态是未支付,那么服务端可以把订单放到延时队列中,1秒后再次查询,如果1秒后还是未支付,再次放入延时队列。根据业务需要,调整后续的时间间隔。
如果系统的数据量不大,也可以直接用定时任务,扫描数据表中未支付的订单,再查询第三方系统。
- 客户端重试:
服务端可以做重试,但是没法在重试后刷新页面,如果是客户端重试,可以让用户尽快看到最新的支付结果。
客户端重试,不需要做太多次,可以每隔一秒查询一次支付结果,如果是未支付就继续查询,最多三次。
一般三秒内如果还是查不到支付成功的结果,那么就没必要在客户端继续重试了。
- 页面展示中间状态:
用户支付之后,如果第三方系统的支付状态还是未支付,当前系统可以展示 为 "支付中" 。
如果付款之后,展示 "未支付", 用户可能会投诉,但是如果 付款之后,展示的是 "支付中", 用户或许会主动刷新页面,等待最新的支付结果。
其他业务的一致性
不止是 支付,其他业务如果存在一致性问题,也可以如上处理。
标签:--,系统,查询,重试,如果,支付,一致性,第三方 From: https://www.cnblogs.com/expiator/p/18163521