zoukankan      html  css  js  c++  java
  • 微信 支付宝 同时支付一个订单的解决方案

    举个例子:

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

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

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

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

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

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

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

  • 相关阅读:
    flex学习小结
    Frameset框架
    表格的增删改
    【实践】用 js 封装java shuffle函数(打乱数组下标方法)
    【实践】js封装 jq siblings 方法
    【笔记】js原生方法 在元素外部或内部实现添加元素功能(类似jq 的 insert 和 append)
    【实践】js实现windows系统日历
    【实践】用for-in 循环实现三联联动
    【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解
    【笔记】js Function类型 内部方法callee
  • 原文地址:https://www.cnblogs.com/cxygg/p/10644081.html
Copyright © 2011-2022 走看看