测试的时候先用微信支付得到预支付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
相关推荐
- **同一IP限制**:同一IP地址每日交易次数不得超过5次,且如果一个小时内连续提交5笔未付款订单,则当天无法继续交易。 - **同一邮箱限制**:同一邮箱每日交易次数不得超过5次,同样地,如果一小时内连续提交5笔未...
系统需要有机制来检测和阻止同一笔交易的多次处理,通常可以通过设置唯一标识符或利用数据库的事务特性来实现。 6. **交易状态与最终一致性**:虽然事务处理可以确保单个操作的一致性,但在分布式系统中,为了处理...
- **防重放攻击**:防止同一笔交易被多次提交,通常通过记录已处理的订单号来避免。 7. **日志记录**: - **请求和响应记录**:保存每次与通联支付API交互的详细信息,便于排查问题。 - **交易流水记录**:记录...
例如,设置防重放机制,防止同一笔交易被多次提交;检查签名,防止数据被篡改。 7. **异常处理与日志记录**:在对接微信支付的过程中,可能会遇到网络异常、接口调用失败等问题,需要编写合适的异常处理代码,同时...
6. **防重复支付**:防止同一笔交易被多次提交,需要设计幂等性操作,确保支付请求无论被处理多少次,结果都是一致的。这通常通过生成唯一的交易ID和检查已处理的交易记录来实现。 7. **异步处理**:支付过程通常...
- 通常采用“预支付”模式,先生成预支付订单,再进行支付确认,确保同一笔交易只处理一次。 5. **工具支持** - 开发工具如Spring框架提供了对幂等性的支持,可以通过拦截器等方式实现幂等性检查。 - 数据库管理...
幂等性是指对同一请求的多次执行,其结果始终一致,不会因为重复操作而产生额外的影响。本篇文章将深入探讨如何在分布式系统中实现接口的幂等性,以及解决重复扣款等问题。 首先,理解幂等性的基本原理。在分布式...
- **交易重复提交控制**:防止用户重复提交同一笔交易,避免造成不必要的损失。 - **异步交易处理**:支持异步交易处理,提高系统的响应速度和用户体验。 - **交易数据不可否认性**:确保交易数据的真实性和有效性,...
- **防重放攻击**:防止同一笔交易被多次提交,可以通过设置订单有效期或使用唯一订单号来避免。 - **风险控制**:设置阈值,对异常交易进行监控,如短时间内大量交易、异常IP等。 6. **测试与部署** - **单元...
- **防重放攻击**:通过订单唯一标识和时间戳防止同一笔交易被重复提交。 - **风险控制**:设置风控规则,检测异常交易行为,如频繁的小额支付、短时间内大量订单等。 - **敏感信息加密**:用户的银行卡信息等...
同时,需要注意的是,回调通知可能因为网络问题而多次发送,所以处理逻辑需要设计成幂等性,以防止重复处理同一笔交易。 3. **payfee.php**:这个文件可能涉及订单金额计算、订单创建以及调起支付流程的逻辑。在PHP...
某些情况下,由于报关系统的软件设计存在漏洞,也可能导致同一笔交易被多次记录。 ### 三、避免重复报关的技术措施 #### 3.1 完善数据验证机制 通过加强数据校验功能,确保每次报关信息的唯一性和准确性,减少因...
访客数(UV),访问网站的独立用户数,所选时间段内,同一访客多次访问会进行去重计算。 贡献下游PV,该页面为下游带去的PV数。 回访客占比,回访客占比=回访客数/总访客数,回访客是历史上曾访问过网站的访客,考虑...
统一柜面系统包含11个核心模块,涵盖了银行业务的各个方面,包括但不限于存款业务、结算业务、中间业务、客户管理、公共管理、总部内部账、信贷业务、卡业务、查询打印业务、电子银行和外汇业务。这些模块的目的是...
- 为了保证操作的原子性和一致性,银行线程需要对每笔交易进行同步控制,防止并发操作导致的数据不一致。 4. **Java 随机数生成** - 在模拟十位顾客随机到来的情景中,会用到 `java.util.Random` 类来生成随机数...
此外,复核员在多级审核中只能对一笔业务审核一次。企业可以针对不同账户设置不同流程,且同一账户可以有多个不同流程金额的设置,但相同流程金额只能设置一个流程。未设置转账流程的账户无法进行网上转账业务。 ...
3. **年度限额**:在同一保单年度内,投保人缴纳的趸交额外保险费不能超过年度保险费的10倍。这是为了防止过度投资,保持保单的稳定性和风险控制。 4. **核保同意**:如果趸交额外保险费超过50万元,需要经过保险...
因此,后端需要设计合理的错误处理和重试策略,比如使用幂等性操作,确保同一笔支付请求不会因为重复提交而导致多次扣款。 5. **安全问题**: 为了保证交易安全,开发者需要妥善保管微信支付的商户密钥,避免泄露...
- **登账原则**:确保每一笔交易都被及时准确地记录到相应的账簿中。 #### UNIT6 账户余额查询与维护 - **公司间与悬账账户的处理**: - **公司间交易**:解决跨公司交易中的账务问题,确保账目清晰。 - **悬账...
- **幂等性**:确保重复请求不会导致副作用,例如支付系统中,同一笔交易多次提交只扣款一次。 - **限流与熔断**:通过限流算法(如漏桶、令牌桶)限制系统接收请求的速度,防止过载;熔断机制则在系统过载时,...