系统之间的一致性问题 -- 支付成功显示未支付

系统之间的一致性问题 -- 支付成功显示未支付:

接入第三方系统的支付接口,支付成功后,却显示未支付。

这种一般是系统之间的状态不一致导致的。

问题分析:

先查看第三方系统的支付状态。

如果第三方系统的支付状态也是未支付,那么说明第三方系统的状态有问题。

如果第三方系统的支付状态是支付成功,那么说明系统之间存在不一致性。

解决方法:

  • 主动查询:

支付后,一般是通过回调来获取支付结果的。如果第三方系统没有回调,那么当前系统可以主动查询第三方系统的支付状态。

  • 延时查询/定时查询:

服务端可以重试,做延时查询的。

支付之后,主动查询,如果查询到的支付状态是未支付,那么服务端可以把订单放到延时队列中,1秒后再次查询,如果1秒后还是未支付,再次放入延时队列。根据业务需要,调整后续的时间间隔。

如果系统的数据量不大,也可以直接用定时任务,扫描数据表中未支付的订单,再查询第三方系统。

  • 客户端重试:

服务端可以做重试,但是没法在重试后刷新页面,如果是客户端重试,可以让用户尽快看到最新的支付结果。

客户端重试,不需要做太多次,可以每隔一秒查询一次支付结果,如果是未支付就继续查询,最多三次。

一般三秒内如果还是查不到支付成功的结果,那么就没必要在客户端继续重试了。

  • 页面展示中间状态:

用户支付之后,如果第三方系统的支付状态还是未支付,当前系统可以展示 为 "支付中" 。

如果付款之后,展示 "未支付", 用户可能会投诉,但是如果 付款之后,展示的是 "支付中", 用户或许会主动刷新页面,等待最新的支付结果。

其他业务的一致性

不止是 支付,其他业务如果存在一致性问题,也可以如上处理。

posted on 2024-04-28 12:41  乐之者v  阅读(18)  评论(0编辑  收藏  举报

导航