支付宝APP支付 订单已付款成功,请勿重复提交 和 微信H5支付 INVALID_REQUEST 201 商户订单号重复
支付宝APP支付 返回请求给前端SDK 提示报错"订单已付款成功,请勿重复提交” 产生原因:存在商家订单号已经支付成功,重复再次请求的情况。
每一笔的支付项目商家订单号是唯一的,如果存在同一支付项目多笔支付的情况,需要在原来的商家订单号尾部通过递增等自增长的方式来处理,避免重复。
//扩展3位 if(StringUtils.isNotBlank(sid) && sid.length() > 2) { String shortSn = sid.substring(sid.length()-3, sid.length()); //末位 String newToSn = shortSn;//默认截取的最后2位 Integer newSn = Integer.valueOf(shortSn); ++newSn; //递增1 if(newSn < 100) { newToSn = "0"+String.valueOf(newSn); }else { newToSn = String.valueOf(newSn); } //重新构建 transId = transId.substring(0, transId.length()-3) + newToSn; }
微信H5支付 提示报错"INVALID_REQUEST 201 商户订单号重复"
微信支付的商家订单号最大位数是32,支付宝是64位。可以参考微信或支付宝支付接入官方文档。
超出32位的情况,需要将可变的部分截取-反转-在拼接-再截取32位,如果没有反转,可能会导致每次截图的是一样的商家订单号,导致报错。
//截取 logger.info("1.transId长度过长截取32位(微信)transId=[{}]",transId); //transId = transId.substring(0, 32); //以下为修改点: String lastString = transId.substring(24); //24位开始后的字符串 StringBuilder sb = new StringBuilder(lastString); String lastStringHandler = sb.reverse().toString(); //反转字符串 transId = transId.substring(0, 24).concat(lastStringHandler).substring(0,32); logger.info("2.transId长度过长截取32位(微信)transId=[{}]",transId);
分类:
三方工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人