校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 产品项目分析 > 功能分析
题目

为了避免出现订单重复支付的现象,产品的支付逻辑该怎么设计?

解答

1.避免重复支付肯定是要先找到源头,重复支付的主要原因是跳转到第三方支付,支付后没有及时收到支付成功的返回参数,订单一直卡在待支付状态。所以应该设置同一个订单,x秒内不能再次发起支付,大部分订单可以在这个x秒内获取到返回的支付参数。一些极个别的情况可能无法完美避免,比如极端情况x秒内还是没有返回参数,进行了二次支付。但是这样大大减少了重复支付的概率,再配和第一个问题所说,进行重复支付退款,就能完美解决题主的问题。

2.重复支付最根本的原因是接口回调结果引起的,先重视这个问题。
另外,避免方案,当用户发起一次支付后,是会返回结果页的,如果没有返回,当发起第二次支付时做出是否已支付的判断或做一个预警机制,多少时间内不允许重复支付。

3.一般重复支付发生在用户支付成功,卡余额已扣除,系统未收到银行通知,用户再次发生支付。
(1)系统未收到银行通知,可以是由于网络问题,或者其他异常调单,一般系统这里会做一个自动补单机制,就是根据订单号到银行查询该订单的状态,考虑到系统性能等情况3-5分钟查询一次就可以,查询半个小时的订单,通过这种机制可以90%的订单状态能够正常
(2)订单未查询回来或者期间用户又发生支付,一般系统设计一笔订单号有一个交易状态,重复支付更新交易状态时可增加判断,如果订单已成功,系统自动发起退款交易即可

4.订单支付这些接口都会做幂等处理,避免重复重复支付。成功调用下单接口后,此时会锁单,包括用户积分,优惠券...这些都会做相应的扣减。成功调用支付接口,订单状态会变成"支付中",后台会等待银行支付结果的回调通知,当然,可能会出现后台或者银行的原因,导致没收到银行回调通知(这种情况比较少发生,银行的回调一般都会回调好几次,直到收到后台确认),所以后台还需要在某个阈值时间后,如果还没收到银行回调通知的话,定时去拉几遍支付结果,然后更新订单状态,再通知其他业务服务。

C 0条回复 评论

帖子还没人回复快来抢沙发