您的位置:首页 > 移动开发 > 微信开发

微信支付-同一个订单多次请求(生成二维码)方案

2018-02-23 16:46 387 查看
微信支付API上说明:

OUT_TRADE_NO_USED商户订单号重复同一笔交易不能多次提交请核实商户订单号是否重复提交
测试的时候先用微信支付得到预支付id,取消当前支付,再次付款的时候就会提示:“订单号重复”

网上搜了一下,大概共有三种解决办法:

1、既然是订单号重复,那么再次付款的时候重新生成订单号就好了,但是很多时候一旦数据入库了就已经板上钉钉了,那么就有人想到既然不能动订单,那就建立第三表订单号与微信订单号建立绑定,每次传给微信的时候用第三表的id,每次重新生成就不会重复了!
http://www.knowsky.com/613912.html

2、随机数,订单号传给微信的时候带上一个随机数,然后微信回调的时候想还原订单id在修改订单的状态【楼主就是用的这种】

[java] view plain copy print?/** 
     * 产生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;  
    }   
/**
* 产生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;
}

[java] view plain copy print?WxPay.getWxPayUnifiedResult(body, detail, attach, "o" + orderConfirm.getDid()+CommonUtils.getRandByNum(6), total_fee, spbill_create_ip);  
WxPay.getWxPayUnifiedResult(body, detail, attach, "o" + orderConfirm.getDid()+CommonUtils.getRandByNum(6), total_fee, spbill_create_ip);

回调:

[java] view plain copy print?//修改订单的状态  
                            //开始还原原始单号(订单号或者总订单号)  
                            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"));  
//修改订单的状态
//开始还原原始单号(订单号或者总订单号)
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"));


http://www.oschina.net/question/1471623_243071

3、保证商品的描述跟订单号保持一致
http://jingyan.baidu.com/article/f79b7cb360d9379145023e62.html?st=2&os=0&bd_page_type=1&net_type=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: