1. 程式人生 > >微信支付提示:同一筆交易不能多次提交

微信支付提示:同一筆交易不能多次提交

微信支付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、保證商品的描述跟訂單號保持一致