微信支付提示:同一筆交易不能多次提交
阿新 • • 發佈:2019-01-30
微信支付API上說明:
OUT_TRADE_NO_USED | 商戶訂單號重複 | 同一筆交易不能多次提交 | 請核實商戶訂單號是否重複提交 |
測試的時候先用微信支付得到預支付id,取消當前支付,再次付款的時候就會提示:“訂單號重複”
網上搜了一下,大概共有三種解決辦法:
1、既然是訂單號重複,那麼再次付款的時候重新生成訂單號就好了,但是很多時候一旦資料入庫了就已經板上釘釘了,那麼就有人想到既然不能動訂單,那就建立第三表訂單號與微信訂單號建立繫結,每次傳給微信的時候用第三表的id,每次重新生成就不會重複了!
2、隨機數,訂單號傳給微信的時候帶上一個隨機數,然後微信回撥的時候想還原訂單id在修改訂單的狀態【樓主就是用的這種】
/** * 產生num位的隨機數 * @return */ public static String getRandByNum(int num){ String length = "1"; for(int i=0;i<num;i++){ length += "0"; } Random rad=new Random(); String result = rad.nextInt(Integer.parseInt(length)) +""; if(result.length()!=num){ return getRandByNum(num); } return result; }
WxPay.getWxPayUnifiedResult(body, detail, attach, "o" + orderConfirm.getDid()+CommonUtils.getRandByNum(6), total_fee, spbill_create_ip);
回撥:
//修改訂單的狀態 //開始還原原始單號(訂單號或者總訂單號) String out_trade_no = wxPayResult.getOut_trade_no().substring(0, wxPayResult.getOut_trade_no().length()-6); orderService.alipayNotifyPayment(out_trade_no, wxPayResult.getTransaction_id(),2); writer.write(HttpXmlUtils.backWeixin("SUCCESS","OK"));
3、保證商品的描述跟訂單號保持一致