讨论数量:
不防,,做好同一个订单多次付款后,自动对重复的进行退款操作。
我们线上业务遇到,请求了订单支付签名后,几个小时后这个货才***去付款,
严格来说无法预防,即便发起支付前取消其他支付渠道订单也会存在时间差,而且用户体验极差,做好兜底操作就行,在异步通知里面如果订单已支付,而且接收到的交易流水不一样,则认为多渠道支付,做退款处理即可,这种情况几率很小,做限制影响用户体检得不偿失
避免重复支付,挺难的,支付后做检测退款,这个简单点
微信/支付宝/银联支付调起
- 支付成功,队列检查该订单所有支付,如有重复,自动退款
- 支付失败/取消支付,不做处理
不用任何限制,京东就是多次支付,会把第一次支付作为真实支付,剩下的退款。如果要限制也可以,以前看过微信支付里面有取消订单的API,调用其它支付前先取消订单。但是银联里面不知道是否有相关接口,而且以后扩展其它支付方式也不一定有相关接口。所以还是采用不限制的方法最为通用。
从你的需求来看,你的业务要确保幂等性操作,从后端层面来做的话:
- 业务层面:加锁,单体架构,redis和文件锁都可以,节点集群的考虑分布式锁,支付完成后释放锁。
- 数据库层面:订单表支付状态增加中间状态作为过渡,业务判断支付存在中间状态,禁止C端用户支付,缺点是增加了中间状态,业务变得繁琐。
推荐文章: