项目中用到了支付功能,采用的是ping++实现的,上线运行一年多都很正常,但是最近突然出现有买家反映说不能进行支付的情况
通过了解和沟通之后发现发现是重复拉起失败,然后我们对问题进行了排查。
测试过程中我们的测试机重复拉起不管是支付宝还是微信都很正常,发生了很奇怪的问题。
 
于是对ping++的通过各种渠道对ping++订单号的规则做了详细的了解,总结结果如下:
 
一、非微信类渠道:
①、首次请求 Ping++ 返回的 Charge 对象,在接下来的 1 分钟内如果请求上来还是相同的订单信息( 6 要素不要变更,order_no、channel、amount、subject、body、appid) 那么 Ping++ 还是返回首次请求的 Charge ;
注:如果在 1 分钟之内,使用支付宝渠道花呗分期时,更换了 extra 的 hb_fq_num 参数和 hb_fq_seller_percent 参数或者其中之一,则会返回全新的 Charge 。
②、如果超过 1 分钟,再次请求 Ping++ 则返回全新的 Charge 。
③、线下扫码通道:isv_qr / isv_scan 渠道,超过 1 分钟后,不可用相同的订单信息发起创建请求;isv_wap 渠道在打开链接后,再超过 1 分钟后,不可用相同的订单信息发起创建请求,若未打开链接,则参考 ①、② 步骤说明。
 
二、微信类渠道:
对于微信相同的订单号请求,Ping++ 这里是做了2个小时的缓存处理,也就是说在2个小时内,只要是相同信息的订单请求,Ping++ 返回给您的是我们缓存你第一次请求拿到的 Charge 的信息(注意2小时内是要相同的订单信息, 6 要素不要变更,order_no、channel、amount、subject、body、appid);
超过2小时的话,即使用相同的订单信息,订单号相同,我们也都是直接去请求微信的,那么微信这里就会报错,因为微信不允许相同订单号的请求。
注:order_no 在微信同一个商户号下必须唯一;如:微信公众号和微信公众号扫码渠道是属于同一个商户号下的,则不可使用相同的 order_no 创建支付请求。
 
了解之后发现,买家的订单其实是被卖家修改过价格的,所谓订单信息不同,所以请求微信,导致拉起失败不能进行付款
知道原因之后我们就可以进行修改了,原则上只要订单号不同就可以了,有如下方案:
1.卖家修改价格的时候重新生成订单号,对之前的订单进行修改
2.每次发起支付的时候重新生成订单,对之前订单进行修改
3.每次发起支付的时候通过一定规则增加随机后缀或前缀保证订单的唯一性,在回调中进行相应的处理进行订单号还原
 
通过思考发现,1和2方案的操作成本较高,而且可能会对之前的代码造成影响,于是了我们采用3方案进行解决
 
作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次

ping++微信渠道,第二次拉起不能进行支付返回订单号重复问题的更多相关文章

  1. 微信的NATIVE支付提示201商户订单号重复的解决方案

    无论采取模式一还是模式二,进行预支付ID获取的时候应当确保订单号的唯一性,否则就会造成第二次扫码后的重复提醒. 解决方案: 以预支付ID处理为例: 商城: 1.创建log_id数据表如:out_tra ...

  2. 微信小程序之下拉加载和上拉刷新

    微信小程序下拉加载和上拉刷新两种实现方法 方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里设置window属性       ...

  3. (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航

    (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航 首页支持微信登陆,只有第8套模板支持(endv模板),后 ...

  4. 微信小程序之下拉刷新,上拉更多列表实现

    代码地址如下:http://www.demodashi.com/demo/11110.html 一.准备工作 首先需要下载小程序开发工具 官方下载地址: https://mp.weixin.qq.co ...

  5. 微信小程序下拉加载下一页

    小程序做得多了,有些常用功能就有必要记录一下 请看详解: 微信小程序之下拉触底时加载下一页 wxml参考: <scroll-view class='dataContainer' scroll-y ...

  6. 微信小程序下拉加载和上拉刷新两种实现方法

    方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里设置window属性 设置js里onPullDownRefresh和onR ...

  7. 微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)

    业务需求: 业务需求是给订单列表添加分页功能,也就是上拉加载这种每次只请求加载固定数量的数据. 需求分析: 对业务来说就是简单的分页上拉加载,但是对于技术实现来说,除了要处理分页数据的累加加载,还要处 ...

  8. 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

  9. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

随机推荐

  1. C语言中sizeof的用法

    今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在 ...

  2. redis集群监控之Redis-monitor部

    为了对以后有可能面临的redis集群监控做准备,这两天在准备这方面的事情,现在将其中的过程记录一下. 首先是“Ronney-Hua”的这篇文章对三中开源监控软件做了对比 文章地址:https://bl ...

  3. Applied Nonparametric Statistics-lec10

    Ref:https://onlinecourses.science.psu.edu/stat464/print/book/export/html/14 估计CDF The Empirical CDF ...

  4. LeetCode(151) Reverse Words in a String

    题目 Given an input string, reverse the string word by word. For example, Given s = "the sky is b ...

  5. nslookup、dig命令Linux安装包

    linux下提供nslookup,dig命令的软件就是 bind-utils yum install bind-utils -y

  6. 并查集:POJ1182-食物链(并查集比较高端的应用)

    食物链 Time Limit: 1000MS Memory Limit: 10000K Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C ...

  7. debian右键添加在终端中打开

    sudo apt-get install nautilus-open-terminal -y 注销,重启

  8. C++智能指针实现

    #include <iostream> #include <string> #define unsigned int size_t using namespace std; / ...

  9. Tomcat自动发布war包

    有两种方法: 1.将项目打成war包,复制到${tomcat.home}\webapps目录下.当tomcat启动时会自动将其解包. 有人说,不能直接将war文件夹直接复制到${tomcat.home ...

  10. iOS学习笔记02-UIScrollView

    父类UIView方法 // autoresizingMask - 现在基本弃用,改用autoLayout typedef NS_OPTIONS(NSUInteger, UIViewAutoresizi ...