1
linauror 2021-03-03 13:45:10 +08:00
你的想法没错,就是通过关单的方式
|
2
puzzle9 2021-03-03 13:57:11 +08:00
楼上说的不错 关单方便
还有一种 退款 |
3
kop1989 2021-03-03 14:00:09 +08:00
我个人更推荐#2 的方式,既点击支付的时候同时开单支付宝、微信,并返回二维码。
这样的优势是切换时没有延时,且 0 服务器端压力。 然后每天走账的时候提示操作员进行手工确认退款操作。 |
4
Dylaan OP |
5
FantaMole 2021-03-03 16:13:51 +08:00
我记得以前遇到这种问题的时候,还拿美团外卖试验过,下一单然后两台手机同时支付。美团的做法的是,两边都可以成功支付,支付后给其中一方退款。设计一下这个支付后的检测重复支付退款逻辑就好了
|
6
linauror 2021-03-03 16:25:10 +08:00 1
@Dylaan 每次点击支付都是新下一个支付订单,关闭旧支付单(如果同一种支付方式则继续使用),这种需要区分下系统订单和支付订单,做关联
|
7
gam2046 2021-03-03 16:39:41 +08:00 1
如果实时性比较高,支付时是比较难避免重复付款,因此需要设计对账、对冲。
即假设本地业务系统的支付流水在数据库中分别保存与不同支付渠道的支付流水号对应关系,在业务低谷期(如次日凌晨),检索当日所有所有支付流水对应的第三方支付流水,是否存在多笔支付成功的第三方对应一笔流水号,如果存在将时间靠后的做自动退款。如果真的毫秒级都时间相同就按自定义顺序退款(如先尝试退微信,后退支付宝)。 这是每日的对冲,每笔第三方支付成功回调时,也可以即刻检查本地的业务流水号是否已经被其他支付渠道标记支付成功,如果有就直接退款,当然这种方法对自身业务系统的并发设计能力较高,而第一种就简单一些,无脑收钱,次日对账,多了再退。 |
8
dqzcwxb 2021-03-03 16:48:25 +08:00
退款更优
|
9
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 |
10
killergun 2021-03-03 18:26:50 +08:00
多次支付成功 ,把多支付的退款就行了。
|
11
mxT52CRuqR6o5 2021-03-03 18:42:09 +08:00
支付回调检查订单支付状态,已支付就退款
没法绝对避免的 |
12
MeteorCat 2021-03-03 18:42:26 +08:00 via Android
关单没错的
|
13
wangxiaoaer 2021-03-03 18:56:56 +08:00
前端不管,后端支付的时候判断下是否是重复支付不就可以了?
|
14
fucUup 2021-03-03 19:24:58 +08:00
切换支付方式关单, 解决不了用户有多部手机, 别想了, 不对的
|
15
m2276699 2021-03-03 19:39:36 +08:00
按支付类型生成支付行,每个订单可能存在多个支付行。
在支付回调完成订单时,关闭其他支付行。 |
16
star1 2021-03-03 21:19:25 +08:00
订单和支付单,要分开。如果同时发起支付宝和微信回调。那么如果订单标记完成,支付链完整,可以退款另一个支付单。
|