admin管理员组文章数量:1794759
支付宝APP支付 订单已付款成功,请勿重复提交 和 微信H5支付 INVALID
支付宝APP支付 返回请求给前端SDK 提示报错"订单已付款成功,请勿重复提交” 产生原因:存在商家订单号已经支付成功,重复再次请求的情况。 每一笔的支付项目商家订单号是唯一的,如果存在同一支付项目多笔支付的情况,需要在原来的商家订单号尾部通过递增等自增长的方式来处理,避免重复。
代码语言:javascript代码运行次数:0运行复制//扩展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位,如果没有反转,可能会导致每次截图的是一样的商家订单号,导致报错。
代码语言:javascript代码运行次数:0运行复制//截取
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);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-03-22,如有侵权请联系 cloudcommunity@tencent 删除apprequest前端字符串微信本文标签: 支付宝APP支付 订单已付款成功,请勿重复提交 和 微信H5支付 INVALID
版权声明:本文标题:支付宝APP支付 订单已付款成功,请勿重复提交 和 微信H5支付 INVALID 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754988063a1709102.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论