解决微信支付出现OUT_TRADE_NO_USED:商户订单号重复

在这里和大家说一下微信APP支付时出现的一个问题!

在APP调起支付的时候出现了错误码:OUT_TRADE_NO_USED:商户订单号重复!

  1 xxxxxxx312 xxxxxxx

因为我之前在后台已经将微信APP支付的服务端SDK集成进项目了,然后预支付成功后将签名返回给APP端,他们也调起来了,并成功收到异步回调通知!

但过了几天后就出现这个 "商户订单号重复" 这个问题! 后来经过调试,发现立即支付的单不会有这个问题,只有待付款的订单才会出现这个问题!

待付款的单指的是: 使用微信支付,在微信支付界面,由于余额不足等原因,没有进行支付并关闭了支付页面,此时订单状态为“待付款”

但是又不是全部的待付款订单才会出现这个问题,后来再经过调试才知道,原来是项目里商家可以在后台里直接对待付款订单进行修改价格!所以,基本确定问题了,就是我们在微信的服务器生成预支付后的订单后,微信的服务器是有记录这个预支付单的,单号,单的价格,单的商品描述等信息.... 然后我们去修改这个订单的商品描述或者订单价格后, 然后对待付款订单进行付款而再次调起支付的时候,这时候,待付款的订单号(即商户订单候,号,out_trade_no)再上一次已经在微信服务器生成预支付单了,现在去改变了价格后又再次向微信服务器生成预支付单,这时微信那边是不承认同一个商户订单号不同商品描述或不同订单价格的,所以在返回签名sign后给app端才出现的报错!! 

解决办法

  在服务端支付SDK内封装商户订单号out_trade_no 字段的时候,我们需要对订单号做一下处理,如图:

  

  

  意思就是我们支付首先要生成订单信息的,那订单号还是按照我们之前那规则去生成(一般淘宝订单是随机数字字符串,长度为20,保持唯行),                                                                                                                         然后我们生成订单后要做的就是去将订单信息带入微信APP支付服务端SDK内进行封装,上面图就是在封装商户订单号字段的时候将我们原本订单号后面拼接上 "_随机字符串"                                                                   这样的做法就是我们在微信服务器创建的预支付订单每次都是不一样的!!! 假如现在我去支付订单,我第一次生成预支付单号是 666_1122  然后还是这个单,我再去支付,生成预支付单号是666_1124,                               这样就能避免重复提交相同的订单号了,但是,别认为这样就可以了!  记住,还有个异步通知回调请求, 因为我们在微信服务器生成的预支付单号和我们数据库的单号是不一致的,                                                                所以我们要在回调接口内拿到商户订单号参数进行切割字符串处理,如图:

切割后就能获取我们原本的订单号了,拿到原本订单号才能根据订单号在我们数据库去查对应的订单,然后在做业务处理!!!

  这样基本就成了!  然后我们可以创建一张订单支付记录信息表,在每次回调的时候把未切割的订单号给记录起来,就是微信服务器那边的预支付订单号  "666_1123"                                                                                     这样做是为了以防万一支付出现故障还是某些BUG导致交易损失,出现这类情况,我们就可以拿数据库的订单支付记录信息表的数据拿到支付流水号(预支付订单号)去跟微信后台对账!(这类情况我还没遇过),只是堤防!

  

  OK!那到此结束吧! 如果有什么问题可以在评论处留言,如果我工作忙没时间回复可以加下此QQ群:575501906  进群说找小黑就行了!

原文地址:https://www.cnblogs.com/xiaohei520/p/8724518.html

时间: 2024-08-20 10:56:01

解决微信支付出现OUT_TRADE_NO_USED:商户订单号重复的相关文章

微信支付获取预支付订单id报错

<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wxc9b1eb4c07373feb]]></appid> <mch_id><![CDATA[1263799101]]></mch_id>

第三方支付的商户订单号和支付交易号

第一次开发第三方支付平台时,由于考虑不周,数据表里只保留了商户订单号,后续由商家查询订单就变得极为繁琐. 这里重新了解了两个号的区别: 商户订单号 对用户的用处 用户可以在商家的平台上,通过该订单号查询具体的订单详情(订单包含的都是商家自己的业务),是用户在商户这边进行消费的凭证 对商家的用处 第三方支付平台 执行各种操作(下单.支付.退款等)必需的字段: 方便用户通过商户订单号查询订单(总不能让人家拿着订单ID去查把- -,而且有的订单可能会有前缀标识是什么类型的订单,比如之前开发的奉化文旅云

支付宝商户订单号错误

问题:调用alipy.trade.wap.pay,显示系统繁忙 解决: 订单号错误,包含了空格 out_trade_no是指商户网站唯一订单号,在商户端唯一,每个商户订单号会对应一个支付宝订单号 ,此订单号由珊瑚自己生成,商户订单号要求64个字符以内.可包含字母.数字.下划线:需保证在商户端不重复,建议格式当前时间+自定义数字 原文地址:https://www.cnblogs.com/zzx-blog/p/8944770.html

C# MVC 微信支付教程系列之公众号支付

微信支付教程系列之公众号支付   今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面的菜单链接,进入公众号的商城,然后在里面完成购买和支付功能,我们可以看看官方对这个公众号支付的场景的解释,链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,通过这个官方的解释,那我们大概清楚这个公众号的用途了,下面,我就说

微信支付-小程序H5 公众号 Payment SDK

前言 今天是2020年一天,去年最后一个月开发了订单和支付系统,尤其在支付系统和微信对接的时候遇到了很多坑,这里给大家总结下,以免大家遇到相同的问题还浪费大量时间 微信支付前期准备 微信商户号,需要商户号,密码 ,退款时需要证书,证书默认密码是商户号 微信app(如 微信小程序 或者 微信公众号) 的appid和appsecret 需要在商户中关联微信小程序和微信公众号,然后运营者确认. 至此微信支付前期工作完成 Payment 封装了微信 支付宝 银联等很多支付的SDK git地址 https

微信支付接口开发之---微信支付之JSSDK(公众号支付)步骤

1.准备 1.1.公众号为服务号,开通微信支付功能 1.2.为了方便调试微信后台的回调URL(必须为外网),我用了nat123软件来做一个映射 1.3.官方微信开发的示例WxPayApi(.net版本) 2.业务流程图 3.步骤 3.1.用户访问商户的链接,商户链接地址调用[网页授权获取用户信息]接口获取用户的openid和access_token 参考:网页授权获取用户基本信息 3.1.1.第一步,用户同意授权,获取code,调用接口如下 https://open.weixin.qq.com/

[教程] 微信支付如何设置商户支付密钥(密钥Key)

新版的微信支付改动比较大,新增了一个API密钥,好多用户都不知道是啥,也不知道如何设置,现在我来和大家说一下具体的操作步骤:1.登录微信商户号后,找到账户设置 -> 密码安全 -> API安全 -> API密钥:<IGNORE_JS_OP> 2,设置密钥Key,设置好之后,复制到网站后台即可. 3,进你后台 -> 功能选项 -> 支付参数 -> 设置微信支付 -> 选择新版接口类型      会看到新增一项商户支付密钥(密钥Key/api):复制填写刚

商户如何接入微信支付

1. 商户接入 1.1 申请流程指引 一.申请流程图 二.申请接入步骤详细说明 (一)成为已认证的服务号 1.目前微信支付功能仅开放给已经通过微信认证的服务号(企业.商店商家.非事业单位媒体类服务号),若已经通过微信认证,且是服务号,可直接进入第二步;2.订阅号商户可先升级为服务号,此步骤约1个工作日;3.未经认证的商户可先申请微信认证.注意:请申请认证的商户主体与后续申请微信支付权限的商户主体保持一致. (二)提交申请资料,等待审核 1.登录公众号,进入:服务-服务中心-商户功能; 2.提交商

转-微信支付(公众号支付JSAPI)

原文路径:https://blog.csdn.net/javaYouCome/article/details/79473743 写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程会和"java的重写与重载"一样铺天盖地,可搜出来的结果,要么是PHP的教程(微信支付官网推荐就是PHP),要么星星点点就那么几篇,想对比的看看思路都成问题,官网