<>概述

记得2019
年,微信支付出过一个故障,用户发起支付给了钱后,微信一直不回调,导致使用了微信支付的商家的订单都成了未支付状态了,如果业务系统设计的不好,那瞬间就会有大量的客诉出现。

像下面的对话场景,我相信当时肯定非常的多:

用户:我支付了好几次了,你说你没收到?别开玩笑了。
商家:我这边真的没收钱。然后心想:这家伙不会是想吃霸王餐吧?

虽然像微信和支付宝这样的大牌支付平台,出大故障的几率比较少,但是也不得不防。下面列举几个支付问题以及对应的解决思路。

<>第三方支付平台无法支付

以微信为例子,像2019年微信支付出故障时,美团那边,是在APP
侧,立刻将微信支付置灰了,引导用户使用支付宝支付,将损失和影响降到最低。要做到这点,至少得做到如下两点:

* 监控微信支付的连通性(关键链路,监控得到位);
* 得有屏蔽微信支付的开关,前端可根据这个开关确定是否置灰微信支付按钮。
<>第三方支付平台不回调

这种就属于用户给了钱,而由于没有回调,商家业务系统认为没收到钱,非常容易引起客诉。我们可以使用定时任务,定时查询用户订单是否支付了来应对。

比如说,你到茶饮店买了杯奶茶
,使用微信支付给了钱后,门店打印机打印出小票和杯贴后,门店人员就会开始为你制作茶饮。如果这个时候,微信支付出故障了,一直不回调,那么小票和杯贴打印不出来,门店人员就不会给你制作。如果业务系统有个定时任务,每隔
2分钟,把5分钟前的订单捞出来,调用微信订单是否已支付的接口,如果支付了,则通知打印机打印出小票。

<>第三方支付回调慢了

电商订单里,通常都有一个订单支付有效期,如果在有效期内用户没支付,就会取消订单,但是这个是基于用户没给钱
的前提下,如果支付回调超过支付有效期才回调回来,其实用户是给了钱的了。一般来说,支付回调慢了,有下面三种情况:

* 用户拉起支付窗口了,但是一直不给钱,超过支付有效期后才给钱;
* 第三方支付平台性能有问题,真的支付回调慢了;
* 网络抖动
对于第一种情况,可以利用支付平台的接口,拉起支付时,指定一个有效期,有效期内没给钱的,支付平台会自动提示交易已失效。

支付平台 控制支付有效期的参数
微信 time_expire
支付宝 timeout_express
例如说,调用支付宝的拉起支付接口,设置了五分钟的支付有效期,一旦用户超过有效期才给钱,支付宝会有如下的提示:

对于第二和第三种情况,可以在订单取消的接口中,给用户退款,毕竟用户给了钱的。

技术
©2019-2020 Toolsou All rights reserved,
份额已超宁德时代!LG化学确认将分拆电池业务部门Qt学习7——模态和非模态对话框数字滚动抽奖小程序vue 监听 Treeselect 选择项的改变 dedecms网站被黑 劫持到其他网站如何解决内存溢出和内存泄漏的区别、产生原因以及解决方案SQL Server 数据库词汇表1190 反转每对括号间的子串 leetcode蝗灾虫群上亿只很少发生碰撞 蝗虫要成自动驾驶功臣最优化方法总结:公式解、数值优化、求解思想