`

同一笔交易不能多次提交

 
阅读更多

测试的时候先用微信支付得到预支付id,取消当前支付,再次付款的时候就会提示:“订单号重复

 

引用:http://blog.csdn.net/xb12369/article/details/50587939

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

 

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

http://www.knowsky.com/613912.html

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

[java] view plain copy
 
print?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * 产生num位的随机数 
  3.      * @return 
  4.      */  
  5.     public static String getRandByNum(int num){  
  6.         String length = "1";  
  7.         for(int i=0;i<num;i++){  
  8.             length += "0";  
  9.         }  
  10.   
  11.         Random rad=new Random();  
  12.   
  13.         String result  = rad.nextInt(Integer.parseInt(length)) +"";  
  14.   
  15.         if(result.length()!=num){  
  16.             return getRandByNum(num);  
  17.         }  
  18.         return result;  
  19.     }   
/**
	 * 产生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?在CODE上查看代码片派生到我的代码片
  1. 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?在CODE上查看代码片派生到我的代码片
  1. //修改订单的状态  
  2.                             //开始还原原始单号(订单号或者总订单号)  
  3.                             String out_trade_no = wxPayResult.getOut_trade_no().substring(0, wxPayResult.getOut_trade_no().length()-6);  
  4.   
  5.                             orderService.alipayNotifyPayment(out_trade_no, wxPayResult.getTransaction_id(),2);  
  6.   
  7.                             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

分享到:
评论

相关推荐

    风险控制——管理规则.docx

    - **同一IP限制**:同一IP地址每日交易次数不得超过5次,且如果一个小时内连续提交5笔未付款订单,则当天无法继续交易。 - **同一邮箱限制**:同一邮箱每日交易次数不得超过5次,同样地,如果一小时内连续提交5笔未...

    金融账务系统架构设计.pptx

    系统需要有机制来检测和阻止同一笔交易的多次处理,通常可以通过设置唯一标识符或利用数据库的事务特性来实现。 6. **交易状态与最终一致性**:虽然事务处理可以确保单个操作的一致性,但在分布式系统中,为了处理...

    通联支付WebAPI (C#源码)

    - **防重放攻击**:防止同一笔交易被多次提交,通常通过记录已处理的订单号来避免。 7. **日志记录**: - **请求和响应记录**:保存每次与通联支付API交互的详细信息,便于排查问题。 - **交易流水记录**:记录...

    ecshop微信支付v3版整理

    例如,设置防重放机制,防止同一笔交易被多次提交;检查签名,防止数据被篡改。 7. **异常处理与日志记录**:在对接微信支付的过程中,可能会遇到网络异常、接口调用失败等问题,需要编写合适的异常处理代码,同时...

    java网上在线支付

    6. **防重复支付**:防止同一笔交易被多次提交,需要设计幂等性操作,确保支付请求无论被处理多少次,结果都是一致的。这通常通过生成唯一的交易ID和检查已处理的交易记录来实现。 7. **异步处理**:支付过程通常...

    系统接口幂等性规范

    - 通常采用“预支付”模式,先生成预支付订单,再进行支付确认,确保同一笔交易只处理一次。 5. **工具支持** - 开发工具如Spring框架提供了对幂等性的支持,可以通过拦截器等方式实现幂等性检查。 - 数据库管理...

    38_分布式系统中接口的幂等性该如何保证?比如不能重复扣款?.zip

    幂等性是指对同一请求的多次执行,其结果始终一致,不会因为重复操作而产生额外的影响。本篇文章将深入探讨如何在分布式系统中实现接口的幂等性,以及解决重复扣款等问题。 首先,理解幂等性的基本原理。在分布式...

    WEB网站系统安全解决方案.docx

    - **交易重复提交控制**:防止用户重复提交同一笔交易,避免造成不必要的损失。 - **异步交易处理**:支持异步交易处理,提高系统的响应速度和用户体验。 - **交易数据不可否认性**:确保交易数据的真实性和有效性,...

    基于SpringBoot开发的支付系统(包括支付宝支付,微信支付,订单系统).zip

    - **防重放攻击**:防止同一笔交易被多次提交,可以通过设置订单有效期或使用唯一订单号来避免。 - **风险控制**:设置阈值,对异常交易进行监控,如短时间内大量交易、异常IP等。 6. **测试与部署** - **单元...

    支付平台系统

    - **防重放攻击**:通过订单唯一标识和时间戳防止同一笔交易被重复提交。 - **风险控制**:设置风控规则,检测异常交易行为,如频繁的小额支付、短时间内大量订单等。 - **敏感信息加密**:用户的银行卡信息等...

    PHP微信小程序支付.微信支付.zip

    同时,需要注意的是,回调通知可能因为网络问题而多次发送,所以处理逻辑需要设计成幂等性,以防止重复处理同一笔交易。 3. **payfee.php**:这个文件可能涉及订单金额计算、订单创建以及调起支付流程的逻辑。在PHP...

    海关重复报关情况说明范文.docx

    某些情况下,由于报关系统的软件设计存在漏洞,也可能导致同一笔交易被多次记录。 ### 三、避免重复报关的技术措施 #### 3.1 完善数据验证机制 通过加强数据校验功能,确保每次报关信息的唯一性和准确性,减少因...

    电商数据分析指标.xlsx

    访客数(UV),访问网站的独立用户数,所选时间段内,同一访客多次访问会进行去重计算。 贡献下游PV,该页面为下游带去的PV数。 回访客占比,回访客占比=回访客数/总访客数,回访客是历史上曾访问过网站的访客,考虑...

    统一柜面培训资料.pdf

    统一柜面系统包含11个核心模块,涵盖了银行业务的各个方面,包括但不限于存款业务、结算业务、中间业务、客户管理、公共管理、总部内部账、信贷业务、卡业务、查询打印业务、电子银行和外汇业务。这些模块的目的是...

    java_ten.rar_java银行

    - 为了保证操作的原子性和一致性,银行线程需要对每笔交易进行同步控制,防止并发操作导致的数据不一致。 4. **Java 随机数生成** - 在模拟十位顾客随机到来的情景中,会用到 `java.util.Random` 类来生成随机数...

    2021-2022年收藏的精品资料企业网上银行初始化设置.doc

    此外,复核员在多级审核中只能对一笔业务审核一次。企业可以针对不同账户设置不同流程,且同一账户可以有多个不同流程金额的设置,但相同流程金额只能设置一个流程。未设置转账流程的账户无法进行网上转账业务。 ...

    递交趸交额外保险费申请(终身寿险(万能型)专用).doc

    3. **年度限额**:在同一保单年度内,投保人缴纳的趸交额外保险费不能超过年度保险费的10倍。这是为了防止过度投资,保持保单的稳定性和风险控制。 4. **核保同意**:如果趸交额外保险费超过50万元,需要经过保险...

    微信小程序demo:微信支付后端demo(java)

    因此,后端需要设计合理的错误处理和重试策略,比如使用幂等性操作,确保同一笔支付请求不会因为重复提交而导致多次扣款。 5. **安全问题**: 为了保证交易安全,开发者需要妥善保管微信支付的商户密钥,避免泄露...

    oracle財務管理系統培訓手冊

    - **登账原则**:确保每一笔交易都被及时准确地记录到相应的账簿中。 #### UNIT6 账户余额查询与维护 - **公司间与悬账账户的处理**: - **公司间交易**:解决跨公司交易中的账务问题,确保账目清晰。 - **悬账...

    面试最让你手足无措的一个问题:你的系统如何支撑高并发?

    - **幂等性**:确保重复请求不会导致副作用,例如支付系统中,同一笔交易多次提交只扣款一次。 - **限流与熔断**:通过限流算法(如漏桶、令牌桶)限制系统接收请求的速度,防止过载;熔断机制则在系统过载时,...

Global site tag (gtag.js) - Google Analytics