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[1294052801]]></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=重复支付[2040002], 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=重复支付[2040002], 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再打开银联或快钱支付,这样理论上也会出现一笔费用多次支付的情况,但是从付款人的角度出发,付钱的事情都是很谨慎的,万一出现情况,就只能线下退款了。