项目中用到了支付功能,采用的是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. Git下的gitignore规则介绍

    匹配模式前/代表项目根目录 匹配模式最后加/代表是目录 匹配模式前加!代表取反 (忽略文件夹,但不忽略文件夹下的某个文件) *代表任意个字符 ? 匹配任意一个字符 **匹配多级目录 node_modu ...

  2. centos7 rpm安装mysql5.7

    1.去官网下载指定的数据库版本:https://dev.mysql.com/downloads/mysql/ 2.根据所用的操作系统下载指定的rpm包 3.下载及安装 地址链接wget https:/ ...

  3. 私有DockerHub搭建

    docker简介 一个开源的应用容器引擎,可以用来打包程序,可以包入依赖环境,这样只需要提供docker image即可,类似于虚拟机,但是更轻量级. 几个概念: Paas,platform as a ...

  4. python入门:1-99所有数的和的等式

    #!/usr/bin/env python # -*- coding:utf-8 -*- #1-99所有数的和的等式 #start(开始,译音:思达二测)sum(合计,译音:桑木)temp(临时雇员, ...

  5. OpenCV中的绘图函数

    OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...

  6. Python9-进程-day36

    import osfrom multiprocessing import Processimport timedef func(args,args2): print(args,args2) time. ...

  7. 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)

    An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...

  8. jenkins配置邮箱时出错

    jenkins配置邮箱时出错: 这有可能是此博客http://www.cnblogs.com/yajing-zh/p/5109517.html在配置jenkins发送邮件时的第4步和第5步中的邮箱不匹 ...

  9. HDU 1533 二分图最小权匹配 Going Home

    带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. #include <iostream> #include <cst ...

  10. 异常 ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang.test.MyView

    发现自定义view时出现ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang. ...