项目中用到了支付功能,采用的是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. 搜索引擎elasticsearch常用指令演示

    目录 交互方式 常用操作示例 添加文档 删除文档 修改文档 查询 简单查询 高级多条件查询 交互方式 操作ES有3种方式: kibana控制台(Dev Tools) Http + json api接口 ...

  2. 最长回文子串——manacher

    最长回文子串--Manacher 算法 (原版的博主的代码都是用py写的,这里改成c++) c++ 算法 字符串处理 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一 ...

  3. hdu 6354

    Problem Description Edward is a worker for Aluminum Cyclic Machinery. His work is operating mechanic ...

  4. 安装lwqq

    $ git clone https://github.com/xiehuc/pidgin-lwqq.git $ cd pidgin-lwqq/ $ sudo apt-get install cmake ...

  5. servlet 作用

    什么是Servlet Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类. 在BS架构中,早期的Web ...

  6. MySQL 的MAC终端一些指令总结

    开启MySQL服务 sudo /usr/local/mysql/support-files/mysql.server start 关闭MySQL服务 udo /usr/local/mysql/supp ...

  7. 新线程 handler

    class CalculateThread extends Thread { private Handler handler; @Override public void run() { super. ...

  8. loj2028 「SHOI2016」随机序列

    定义区间是内部只含有乘号的区间. 对于区间左端点是 \(l \geq 2\) 的情况,左端点前头是加号的情况和前头是减号的情况的个数是相同的.因此这些区间不对答案产生贡献. 所以区间左端点必定是 \( ...

  9. TPS限流

    限流是高可用服务需要具备的能力之一 ,粗暴简单的就像我们之前做的并发数控制.好一点的有tps限流,可用令牌桶等算法实现.<亿级流量网站架构核心技术>一书P67限流详解也有讲.dubbo提供 ...

  10. 如何用字体在网页中画icon

    一.用css雪碧图 1.简介 CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许将一个页面涉及到的所有零星图片都包含到一张大图中, 利用CSS的“background- ...