1.微信支付的transId发起支付请求,未登录微信,先帐号登陆,否则直接去支付。这样的话,该transId跟该帐号绑定起来了,

如果下一次再重新使用该transId来支付请求,但是想切换其他的微信帐号来支付的话,微信就会提示报错信息。

2.所以解决的方法就是每次发起支付请求的时候,transId都是不同的,暂且定义为transId尾号递增1,所以每次进来都是不同的transId,这样就算切换帐号也不会报错。

3.但是根据2的修改方法,在实际的线上运营中,确实有人出现微信多次重复支付的情况,一笔费用多次出现的情况,这样又回到了问题的本质,还是得固定transId,支付成功的transId,微信是不允许重复支付的。达到目的。 同时把微信不允许重复支付的返回信息在页面上面展示出来,而不是之前统一的返回“微信响应异常”这么笼统。

微信:
<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx32c75ca6fb5637e1]]></appid>
<mch_id><![CDATA[]]></mch_id>
<nonce_str><![CDATA[aZ7zP05PepXUO8Rx]]></nonce_str>
<sign><![CDATA[33A7CCEDD7C1D123D5B7034A32C28F0E]]></sign>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[ORDERPAID]]></err_code>
<err_code_des><![CDATA[该订单已支付]]></err_code_des>
</xml>
银联:
2016-05-23 15:27:40.358 [http-nio-8081-exec-9] INFO com.autoyol.pay.unionpay.PaymentExecuter#submitOrder [line:85] - 提交/推送订单信息返回结果:{charset=UTF-8, signature=8e62e065e9f2204cb8405a938a9ed078, version=1.0.0, transType=02, respMsg=重复支付[], respCode=22, signMethod=MD5}
2016-05-23 15:27:40.358 [http-nio-8081-exec-9] INFO com.autoyol.service.transpay.executer.UpmpPaymentExecuter#submitOrder [line:39] - <<<<<<<received upmpServer submitOrder resultData={charset=UTF-8, signature=8e62e065e9f2204cb8405a938a9ed078, version=1.0.0, transType=02, respMsg=重复支付[], respCode=22, signMethod=MD5}
快钱:
2016-05-23 15:52:07.662 [http-nio-8081-exec-4] INFO com.autoyol.pay.bill99.shortcutPays.send.SendTR1#sendTR1 [line:118] - 开始发送
2016-05-23 15:52:08.752 [http-nio-8081-exec-4] DEBUG com.autoyol.controller.base.BaseController#writeResponse [line:125] - >>>>>>>>Send:{"resCode":"OR","resMsg":"【快钱】外部跟踪编号重复","data":null}

4.出现重复支付的时候,该笔费用的支付状态是“正在支付”,这样在页面的刷新,将支付状态的“正在支付”更改为“支付成功”(pay_flag)

ORDERPAID=【微信】商户订单已支付
OR=【快钱】外部跟踪编号重复
respMsg=【银联】重复支付[2040002], respCode=22

## 锁定支付id测试,已重复支付的问题。 160523 xxx
重复支付的时候,给出报错提示即可。因为pay_flag此时是2(正在支付),退出后会刷新状态。
1.“订单详情(有)/订单列表(无)中的正在支付” 已测试OK~ payStatus RentPay.java DepositPay.java trans与trans_pay中的trans_type同步。
2.进入平台,动态判断payKind,租车押金支付完毕,就会自动进入支付的是违章押金金额。 已测试OK~

5.如果先微信后银联/快钱的交叉支付问题,根本区别在于微信打开是新开一个app页面,银联插件和快钱是嵌入在app内部,这样实际上会更好,问题就是在于一个人先打开了一个微信支付窗口,然后回到app再打开银联或快钱支付,这样理论上也会出现一笔费用多次支付的情况,但是从付款人的角度出发,付钱的事情都是很谨慎的,万一出现情况,就只能线下退款了。

微信支付id出现的重复支付解决方法和app应用中多种支付方式之间的对比的更多相关文章

  1. 微信小程序错误——mpvue小程序:未找到 app.json 中的定义的 pages "pages/XXX/XXX" 对应的 WXML 文件

    背景 在刚开始学习开发小程序时,使用微信开发工具在app.json建立页面,写好配置文件名称后,应该会自动生成页面的4个文件,结果没有生成文件,反而报错:mpvue小程序:未找到 app.json 中 ...

  2. java heap space解决方法和JVM参数设置

    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...

  3. 关于UIButton嵌入到UIView点击无反应问题的解决方法和delegate的简单用法示例(转载)

    做项目封装UIView的时候碰到的问题,没想到有个哥们儿还写成博客,特此收藏! 问题是这样的,几个界面用到同一个自定义返回按钮,于是就想着把这个按钮单独封装起来,添加一个UIView类,在里面自定义U ...

  4. windows 10 python 2.7和python3.6共存解决方法和pip安装

    一.首先去python官网将两个版本下载并安装: 然后进入windows的环境变量,检查下面4个变量: 1.C:\Python272.C:\Python27\Scripts3.D:\software\ ...

  5. Django框架效率问题的解决方法和总…

    由于项目的需要,学习了Django框架,Django框架的MTV很清晰,通过MTV能够很好地了解Django框架的内部机理.但是在使用过程中发现了一个严重的问题,就是当有大量IO(写数据库操作)的时候 ...

  6. nginx调用php-fpm出错解决方法和nginx配置详解

    装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm. 使用下面的命令 复制代码 代码如下: /usr/local/php/sbin/php-fpm 就可以启动了 ...

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

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

  8. app微信支付-java服务端接口 支付-查询-退款

    个人不怎么看得懂微信的文档,看了很多前辈的写法,终于调通了,在这里做一下记录. 首先来定义各种处理类(微信支付不需要特殊jar包,很多处理需要自己封装,当然也可以自己写完打个jar包) 参数要用jdo ...

  9. app使用微信支付成功后,点击返回到该app却跳到另外一个app去了

    刚接手了公司iOS的两个APP, 现在碰到了这样一个问题: 有一台iPhone在一个APP中使用了微信支付,支付成功后,点击返回到该APP,结果却跳到了另外一个APP去了. 这两个APP都是公司开发的 ...

随机推荐

  1. (转载)WPF中的动画——(一)基本概念

    http://www.cnblogs.com/TianFang/p/4050845.html WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计 ...

  2. Web API(七):Basic基础认证

    1.WebApi中为什么需要身份认证 我们在使用WebApi的时候,都是通过URL去获取数据.也就是说,任何人只要知道了URL地址,就能随意的访问后台的服务接口,就可以访问或者修改数据库数据了,这样就 ...

  3. scrapy爬虫出现Forbidden by robots.txt

    scrapy爬虫出现Forbidden by robots.txt

  4. 使用 js替换网页中的关键词为链接

    要求把一段html脚本中的疾病名添加到疾病库的链接,只添加一次,要避开超链接或图片链接. 最初是用的    str.replace('糖尿病', '<a href=...>糖尿病</ ...

  5. SDRAM 学习笔记(一)

    前面几篇博客已经讲到了关于0V7725的相关驱动问题,那么OV7725驱动成功之后,设定OV7725输出RGB565格式,那么对于640x480x16,那么若是选用FIFO,应该设置为位宽16bit, ...

  6. DAO层,Service层,Controller层、View层

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  7. MY_使用selenium自动登录126/163邮箱并发送邮件

    转自:https://www.cnblogs.com/yin-tao/p/7244082.html 我使用的是python2.7.13+selenium ps:几天之前,我曾多次尝试写这段代码,但是在 ...

  8. 无法定位序数 12384 于动态链接库 mfc90.dll

    场景: 运行 vs2008 编译生成的一个 exe 错误: 无法定位序数 12384 于动态链接库 mfc90.dll 原因: 缺少vc++ 2008 运行库. vcredist 全称Microsof ...

  9. Java如何设定二维数组的上限?

    在Java中,如何设定二维数组的上限? 以下示例中,使用arrayname.length来确定二维数组的上限(元素数目). package com.yiibai; public class Dimen ...

  10. e805. 监听JProgressBar的数值变化

    Whenever the value of a progress bar is changed, a change event is fired. In fact, the event is also ...