收藏
回答

微信支付多种支付方式之间切换,如何进行防重复支付?

不同支付方式(app、native、jsApi、h5)之间切换如何防重?举我这边的例子,我一个业务订单的支付可以在不同客户端进行(小程序和app,是不同的人操作),先通过app支付下了一个单,在微信支付这边生成了一个支付订单,由于其他原因支付操作终止,这时候微信的支付订单还存在。接着另一个用户又在小程序发起支付,就是用jsApi下了一单,最终通过此支付方式支付。我的想法是在切换支付方式时,把之前支付方式的单关了,但是看了文档关单要在生成订单5分钟之后,这时候同一个业务订单不同支付方式的支付订单会同时存在,就可能重复支付。如何避免类似问题?

回答关注问题邀请回答
收藏

3 个回答

  • 㐅卝
    㐅卝
    发表于小程序端
    2023-10-30

    先做临时链接,如果客户换了其他方式,就先进行关单,在重新请求获取支付链接,注意请求时间间隔和关单时间。

    2023-10-30
    有用
    回复
  • 一车面包人
    一车面包人
    2023-10-25

    不能吧, 你能支付成功?

    小程序下单未支付,相同的商户相同的外部订单号, 切换到app或h5都是不支持继续支付。微信直接报订单号重复.

    除非有一种可能,你传递给微信的订单号每次都是不同的

    那我建议你在支付记录表里增加一个id和它关联, 用来验证订单是否已经存在, 前置校验放在自己系统里

    比如用你系统自己的订单号和发送给微信的订单号来关联. 只要支付记录表里存在了, 就不给付款或者做其他业务


    2023-10-25
    有用
    回复 2
    • 大榴莲
      大榴莲
      2023-10-25
      每一种支付方式是不同的商户订单号。
      从我们的业务来讲允许切换支付方式,不能不给付款。
      2023-10-25
      回复
    • 一车面包人
      一车面包人
      2023-10-25回复大榴莲
      我大概知道你们是什么场景了, 这种情况下我能想到的方法是让前端做补偿.
      1.通过获取页面焦点来触发支付结果查询
      2.调用发起支付后前端轮询支付结果接口
      这种不管用哪个方式支付,只要你创建订单的业务流水号还是同一个,获取到支付成功的结果后,前端刷新页面就行
      对了,你们创建订单这一步应该有的吧,如果只有支付流水号,没有业务流水号,那可难办了
      2023-10-25
      回复
  • Memory (私信不回复)
    Memory (私信不回复)
    2023-10-25

    订单单号唯一,每次请求的支付接口时候生成不同单号,自己做多种单号关系映射,每次调起支付都需要做判断的

    2023-10-25
    有用
    回复 8
    • 大榴莲
      大榴莲
      2023-10-25
      有多种单号关系映射。问题是只有最后的单号对我来说是有效的,前面支付方式生成的单号必须失效,才能有效的防止重复支付。
      “每次调起支付的时候做判断”,判断什么呢?
      2023-10-25
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      2023-10-25回复大榴莲
      判断前一个临时单号是否支付啊
      2023-10-25
      回复
    • 大榴莲
      大榴莲
      2023-10-25
      这个当然会判断。如果支付了整个流程结束;如果没支付,我用新的支付方式生成了一个新订单。然后呢?不还是两种支付方式的支付订单同时存在吗?总不能不让用户切换支付方式吧?
      2023-10-25
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      2023-10-25回复大榴莲
      为什么要选择?发起新的请求之前关闭旧的订单就完事了
      2023-10-25
      回复
    • 大榴莲
      大榴莲
      发表于移动端
      2023-10-25回复Memory (私信不回复)
      文档里写的关闭订单至少要5分钟后,我描述里也说明了啊。
      2023-10-25
      回复
    查看更多(3)
登录 后发表内容