微信支付-同一个订单多次请求(生成二维码)方案
2018-02-23 16:46
387 查看
微信支付API上说明:
测试的时候先用微信支付得到预支付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;
}
[java] view plain copy print?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"));
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
OUT_TRADE_NO_USED | 商户订单号重复 | 同一笔交易不能多次提交 | 请核实商户订单号是否重复提交 |
网上搜了一下,大概共有三种解决办法:
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
相关文章推荐
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
- 使用google.zxing jar包生成微信支付二维码在linux上显示不出来
- 浅谈一下如何生成一个二维码和内嵌头像Logo的二维码
- 一个简单的二维码生成小程序
- 一个免费生成二维码的小工具,纯Jquery前端合成带logo
- node js 调试出现同一个端口启动多次报错处理方案 Error: listen EADDRINUSE
- 一个生成订单流水号的存储过程
- iOS之微信支付(二)——本地生成订单集成详情
- 提供一个动态生成word的方案
- 快速封装一个二维码在线生成接口
- 发起一个微信支付请求接口— wx.chooseWXPay() – 微信JS开发文档
- C#之Winform基础 点击多次button仅生成一个窗体
- QRCode二维码生成方案及其在带LOGO型二维码中的应用
- 微信支付生成二维码方法封装
- [转]主题:介绍一个PDF的生成方案
- 二维码好高大尚,我也想生成一个
- 5、reactor (事件循环)+ thread per request(过渡方案) 每当一个请求过来就创建一个线程出来
- 【iOS】CoreImage原生二维码生成(二)一个方法生成带logo的二维码
- 介绍一个PDF的生成方案
- Android H5微信支付 webview设置referer 请求头无效问题解释和详细处理方案