项目中用到了支付功能,采用的是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. 如何下载并安装 robomongo 到Ubuntu 系统

    官网下载软件,https://robomongo.org/download wget https://download.robomongo.org/1.2.1/linux/robo3t-1.2.1-l ...

  2. destoon添加修改会员信息时,信息丢失

    最近做一destoon项目,因注册字段太多,分了几个步骤.分几个页面来修改公司信息.发现有时候修改时以前保存的字段莫名丢失.. 经查是 因为member.class.php  add 和 edit时, ...

  3. paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之fsm summary

    主要是1.不要用1段式写FSM 2.不要用状态编码写one-hot FSM ,要用索引编码写one-hot FSM.

  4. COMP9021--6.6

    1. 在print结尾处添加end='' print默认在字符串结尾处添加换行符,添加end=''后表示这个语句并没有结束,结尾不换行 2. 为了减少重复代码以及便于修改,我们可以编写函数 1) 函数 ...

  5. STM32——PWM基本知识及配置过程

    将通用定时器分为四个部分: 1,选择时钟 2,时基电路 3,输入捕获 4,输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有 ...

  6. selenium2自动处理验证码

    最近在研究web自动化,登录时发现要输入验证码,之前在做手机app自动化时,就被验证码block了.这次做web时又遇到了,探索之后,发现有如下几个解决办法: 1.联系开发人员,让其帮忙在测试环境中注 ...

  7. bash脚本编写基础

    bash脚本编程     命令的堆砌     脚本程序:解释器解析执行     shell:交互式接口,编程环境         shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...

  8. java web开发基础实例(javabean+jsp+servlet+jdbc)

    JavaBean:用于传递数据,拥有与数据相关的逻辑处理 JSP:从Model接收数据并生成HTML Servlet:接收HTTP请求并控制Model和View jdbc:用于配置环境 一.[建立数据 ...

  9. No identifier specified for entity: XXXX 错误

    在运行项目的时候报了下面的错误: by: org.hibernate.AnnotationException: No identifier specified for entity: com.exam ...

  10. Leetcode1--->数组中两数之和等于给定数

    题目: 给定一个数组nums,目标数target.在数组中找到两数之和为target的数,返回两数的下标举例: Given nums = [2, 7, 11, 15], target = 9, Bec ...