如何避免同一笔订单被不同支付平台支付 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
Dylaan

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

  •  
  •   Dylaan Mar 3, 2021 5215 views
    This topic created in 1905 days ago, the information mentioned may be changed or developed.
    问题:根据用户选择的支付方式生成二维码,如果用户在支付过程中更改支付方式,如何避免同一笔订单被不同支付平台重复支付?
    思考:目前的想法是切换支付方式的同时,关闭上一次的支付订单。
    支付平台:微信、支付宝;支付方式:扫码支付( scan );支付结果:支付平台回调。
    16 replies    2021-03-03 21:19:25 +08:00
    linauror
        1
    linauror  
       Mar 3, 2021
    你的想法没错,就是通过关单的方式
    puzzle9
        2
    puzzle9  
       Mar 3, 2021
    楼上说的不错 关单方便
    还有一种 退款
    kop1989
        3
    kop1989  
       Mar 3, 2021
    我个人更推荐#2 的方式,既点击支付的时候同时开单支付宝、微信,并返回二维码。
    这样的优势是切换时没有延时,且 0 服务器端压力。

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

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

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

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

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

    微信异步回调你, 你发现订单被 zfb 占坑了, 就微信退款 api
    以及在返回 App 后你去查单, 发现微信支付成功但 zfb 占坑了, 就微信退款 api
    killergun
        10
    killergun  
       Mar 3, 2021
    多次支付成功 ,把多支付的退款就行了。
    mxT52CRuqR6o5
        11
    mxT52CRuqR6o5  
       Mar 3, 2021
    支付回调检查订单支付状态,已支付就退款
    没法绝对避免的
    MeteorCat
        12
    MeteorCat  
       Mar 3, 2021 via Android
    关单没错的
    wangxiaoaer
        13
    wangxiaoaer  
       Mar 3, 2021
    前端不管,后端支付的时候判断下是否是重复支付不就可以了?
    fucUup
        14
    fucUup  
       Mar 3, 2021
    切换支付方式关单, 解决不了用户有多部手机, 别想了, 不对的
    m2276699
        15
    m2276699  
       Mar 3, 2021
    按支付类型生成支付行,每个订单可能存在多个支付行。
    在支付回调完成订单时,关闭其他支付行。
    star1
        16
    star1  
       Mar 3, 2021
    订单和支付单,要分开。如果同时发起支付宝和微信回调。那么如果订单标记完成,支付链完整,可以退款另一个支付单。
    About     Help     Advertise     Blog     API     FAQ     Solana     5179 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 76ms UTC 08:26 PVG 16:26 LAX 01:26 JFK 04:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86