如何避免同一笔订单被不同支付平台支付

2021-03-03 13:27:24 +08:00
 Dylaan
问题:根据用户选择的支付方式生成二维码,如果用户在支付过程中更改支付方式,如何避免同一笔订单被不同支付平台重复支付?
思考:目前的想法是切换支付方式的同时,关闭上一次的支付订单。
支付平台:微信、支付宝;支付方式:扫码支付( scan );支付结果:支付平台回调。
4367 次点击
所在节点    程序员
16 条回复
linauror
2021-03-03 13:45:10 +08:00
你的想法没错,就是通过关单的方式
puzzle9
2021-03-03 13:57:11 +08:00
楼上说的不错 关单方便
还有一种 退款
kop1989
2021-03-03 14:00:09 +08:00
我个人更推荐#2 的方式,既点击支付的时候同时开单支付宝、微信,并返回二维码。
这样的优势是切换时没有延时,且 0 服务器端压力。

然后每天走账的时候提示操作员进行手工确认退款操作。
Dylaan
2021-03-03 14:16:50 +08:00
@linauror 如果关闭支付订单,用户选择 微信->支付宝->微信,第二次选择微信支付时将不能创建二维码,提示订单已关闭。

@puzzle9 退款也是一种四路,但可能权限不允许。
FantaMole
2021-03-03 16:13:51 +08:00
我记得以前遇到这种问题的时候,还拿美团外卖试验过,下一单然后两台手机同时支付。美团的做法的是,两边都可以成功支付,支付后给其中一方退款。设计一下这个支付后的检测重复支付退款逻辑就好了
linauror
2021-03-03 16:25:10 +08:00
@Dylaan 每次点击支付都是新下一个支付订单,关闭旧支付单(如果同一种支付方式则继续使用),这种需要区分下系统订单和支付订单,做关联
gam2046
2021-03-03 16:39:41 +08:00
如果实时性比较高,支付时是比较难避免重复付款,因此需要设计对账、对冲。

即假设本地业务系统的支付流水在数据库中分别保存与不同支付渠道的支付流水号对应关系,在业务低谷期(如次日凌晨),检索当日所有所有支付流水对应的第三方支付流水,是否存在多笔支付成功的第三方对应一笔流水号,如果存在将时间靠后的做自动退款。如果真的毫秒级都时间相同就按自定义顺序退款(如先尝试退微信,后退支付宝)。

这是每日的对冲,每笔第三方支付成功回调时,也可以即刻检查本地的业务流水号是否已经被其他支付渠道标记支付成功,如果有就直接退款,当然这种方法对自身业务系统的并发设计能力较高,而第一种就简单一些,无脑收钱,次日对账,多了再退。
dqzcwxb
2021-03-03 16:48:25 +08:00
退款更优
fucUup
2021-03-03 18:19:27 +08:00
@Dylaan 你是知乎挖坑的吗

pay.weixin.qq.com/wiki/doc/api/img/chapter8_3_1.png

微信异步回调你, 你发现订单被 zfb 占坑了, 就微信退款 api
以及在返回 App 后你去查单, 发现微信支付成功但 zfb 占坑了, 就微信退款 api
killergun
2021-03-03 18:26:50 +08:00
多次支付成功 ,把多支付的退款就行了。
mxT52CRuqR6o5
2021-03-03 18:42:09 +08:00
支付回调检查订单支付状态,已支付就退款
没法绝对避免的
MeteorCat
2021-03-03 18:42:26 +08:00
关单没错的
wangxiaoaer
2021-03-03 18:56:56 +08:00
前端不管,后端支付的时候判断下是否是重复支付不就可以了?
fucUup
2021-03-03 19:24:58 +08:00
切换支付方式关单, 解决不了用户有多部手机, 别想了, 不对的
m2276699
2021-03-03 19:39:36 +08:00
按支付类型生成支付行,每个订单可能存在多个支付行。
在支付回调完成订单时,关闭其他支付行。
star1
2021-03-03 21:19:25 +08:00
订单和支付单,要分开。如果同时发起支付宝和微信回调。那么如果订单标记完成,支付链完整,可以退款另一个支付单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/757984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX