• 微信 支付宝 同时支付一个订单的解决方案


    举个例子:

      我们的应用同时的接入了支付宝和微信。有 2 种 或者更多的三方支付方式。这时候有一个很明显的问题, 一个订单 如果同时 使用微信支付 和 支付宝支付 就会支付两次( 同时的 意思是指,支付宝支付以后,在异步通知没有回来的时候 ,客户端有使用微信支付了一次 )。

    这种情况我们能怎么办呢? 

      1 正常支付毁掉会在几秒内回来,所以 如果在一个订单 有使用支付宝支付欲望的时候( 获取签名的时候 ),锁定订单 10 秒钟,然这个10 秒钟内不能使用别的凡是支付。

        缺点: 用户在企图换另一种支付方式的时候回等待10秒。 

      2 我们想,我们的用户都是正常人,正常情况不会 在支付宝 通知没有回来的情况下,在使用微信支付一次。但是我们不能避免用户这么做,我们可以吧这个种极端的情况记录清楚,然后给用户退款。

        实现:如果我们支付通知回来以后,直接去更新订单状态,那么 支付宝的通知来了以后吧订单改成 支付完成。这时候 微信的 通知来了。我们检查订单状态是完成,正常我们会直接返回完成,不做任何处理(  因为只支付一次,通知也可能来多次 ,比如以前的 同步通知和异步通知 )

        这时候应该怎么办呢? 我们应该 在订单之外再记录 一个 支付记录。 上面的 只会回来以后 我们应该写一条支付成功的支付记录。 并且记做业务处理状态是未完成,然后去处理 订单状态,处理以后吧支付记录改成成功,当微信的通知来的时候,我们在写一条支付记录,这条记录是未完成,然后去处理订单,发现订单已经支付完成,那么这个 条支付记录就保留未完成的状态,并且这种记录应该 给用户 原路退回。

  • 相关阅读:
    JavaScript实现常用的排序算法
    jQuery学习之路(8)- 表单验证插件-Validation
    jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能
    jQuery学习之路(6)- 简单的表格应用
    jQuery学习之路(5)- 简单的表单应用
    jQuery学习之路(4)- 动画
    JavaScript常见的五种数组去重的方式
    jQuery学习之路(3)- 事件
    jQuery学习之路(2)-DOM操作
    Docker使用非root用户
  • 原文地址:https://www.cnblogs.com/cxygg/p/10644081.html
Copyright © 2020-2023  润新知