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再打開銀聯或快錢支付,這樣理論上也會出現一筆費用多次支付的情況,但是從付款人的角度出發,付錢的事情都是很謹慎的,萬一出現情況,就只能線下退款了。