测试的时候先用微信支付得到预支付id,取消当前支付,再次付款的时候就会提示:“订单号重复”
引用:http://blog.csdn.net/xb12369/article/details/50587939
网上搜了一下,大概共有三种解决办法:
1、既然是订单号重复,那么再次付款的时候重新生成订单号就好了,但是很多时候一旦数据入库了就已经板上钉钉了,那么就有人想到既然不能动订单,那就建立第三表订单号与微信订单号建立绑定,每次传给微信的时候用第三表的id,每次重新生成就不会重复了!
http://www.knowsky.com/613912.html
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;
- }
/** * 产生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);
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"));
//修改订单的状态 //开始还原原始单号(订单号或者总订单号) 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
相关推荐
C#,中防止点击同一按钮,多次弹出多个同一窗体,办法 C#,中防止点击同一按钮,多次弹出多个同一窗体,办法 C#,中防止点击同一按钮,多次弹出多个同一窗体,办法 C#,中防止点击同一按钮,多次弹出多个同一窗体,...
同一账号不能两次登陆实现示例
Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中; 登录后的用户名放到Session中; 登录后的用户名放到Application...
Web项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多. 本文介绍的方法是采用类似于MSN登陆的方法,第二次登陆时会把第一次的登陆注销掉,第一次登陆将会类似于MSN弹出:您的帐号已在别处被...
Asp.net防止页面被多次提交
金蝶运行终端服务时,客户端和中间层组件不能在同一台计算机上解决办法.doc
一个JavaWeb小例子,实现一账号同一时间只能登录一次。附完整代码和数据库。
Asp.net中实现同一用户名不能同时登陆(单点登陆)Asp.net中实现同一用户名不能同时登陆(单点登陆)Asp.net中实现同一用户名不能同时登陆(单点登陆)
同一账号禁止多人同时登陆
js 特效 html 特效 同一页面的多个提交信息 js 特效 html 特效 同一页面的多个提交信息
易语言任意多按钮执行同一个子程序源码,任意多按钮执行同一个子程序
Q:今天写公共组件的时候碰到一个奇葩的情况,slot内部需要再次调用slot,这...以上这篇解决vue同一slot在组件中渲染多次的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
同一文件夹下的多个excel文件的同一位置的批量修改工具 vbs語言 Option Explicit Dim bk, ex, f, gf, sh, so, sheet Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") Set ex = ...
同一页面的多个提交信息.rar
防止同一用户同时登陆 防止同一用户同时登陆
同一应用同一进程内部Service使用, service 同一进程内部 同一application内部
有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人... 其实实现起来不是很麻烦,在这里给出我自己的做法,如果有更好地方法可以在这里跟大家分享一下。
解决同一个账号不能同时登陆的问题, 方法一:session, 方法二:数据库里设一字段
利用App.PrevInstance防止同一程序执行多次
winform 多次申明同一特性源码! 很值得下载看看!资源免费,大家分享!!