撤销订单

应用场景

支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。

注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。

调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。

接口链接

https://api.mch.weixin.qq.com/secapi/pay/reverse

是否需要证书

请求需要双向证书。 详见证书使用

请求参数

字段名 变量名 必填 类型 示例值 描述
服务商的APPID appid String(32) wx8888888888888888 服务商商户的APPID
商户号 mch_id String(32) 1900000109 微信支付分配的商户号
子商户公众账号ID sub_appid String(32) wx8888888888888888 微信分配的子商户公众账号ID
子商户号 sub_mch_id String(32) 1900000109 微信支付分配的子商户号
微信订单号 transaction_id String(32) 1217752501201407033233368018 微信的订单号,优先使用
商户订单号 out_trade_no String(32) 1217752501201407033233368018 商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no
随机字符串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。推荐随机数生成算法
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 签名,详见签名生成算法

提交参数举例如下:

<xml>
   <appid>wx2421b1c4370ec43b</appid>
   <mch_id>10000100</mch_id>
<sub_mch_id>1900000109</sub_mch_id>
   <nonce_str>b7ffb16a7150cf08639db472c5f5bdae</nonce_str>
   <out_trade_no>1415717424</out_trade_no>
   <sign>9B2EA16C05A5CEF8E53B14D53932D012</sign>
</xml>

返回结果

字段名 变量名 必填 类型 示例值 描述
返回状态码 return_code String(16) SUCCESS SUCCESS/FAIL,此字段是通信标识,非交易标识
返回信息 return_msg String(128) 签名失败 返回信息,如非空,为错误原因;签名失败;具体某个参数格式校验错误.

当return_code为SUCCESS的时候,还会包括以下字段:

字段名 变量名 必填 类型 示例值 描述
服务商的APPID appid String(32) wx8888888888888888 服务商商户的APPID
商户号 mch_id String(32) 1900000109 返回提交的商户号
子商户公众账号ID sub_appid String(32) wx8888888888888888 微信分配的子商户公众账号ID
子商户号 sub_mch_id String(32) 1900000109 微信支付分配的子商户号
随机字符串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 微信返回的随机字符串
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 返回数据的签名,详见签名算法
业务结果 result_code String(16) SUCCESS SUCCESS/FAIL
错误代码 err_code String(32) SYSTEMERROR 详细参见错误列表
错误描述 err_code_des String(128) 系统错误 结果信息描述
是否重调 recall String(1) Y 是否需要继续调用撤销,Y-需要,N-不需要

返回参数举例如下:

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <sub_mch_id><![CDATA[1900000109]]></sub_mch_id>
   <nonce_str><![CDATA[o5bAKF3o2ypC8hwa]]></nonce_str>
   <sign><![CDATA[6F5080EDDD196FFCDE53F786BBB93899]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <recall><![CDATA[N]]></recall>
</xml>

错误码

名称 描述 原因 解决方案
SYSTEMERROR 接口返回错误 系统超时 请立即调用被扫订单结果查询API,查询当前订单状态,并根据订单的状态决定下一步的操作。
INVALID_TRANSACTIONID 无效transaction_id 请求参数未按指引进行填写 参数错误,请重新检查
PARAM_ERROR 参数错误 请求参数未按指引进行填写 请根据接口返回的详细信息检查您的程序
REQUIRE_POST_METHOD 请使用post方法 未使用post传递参数 请检查请求参数是否通过post方法提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
REVERSE_EXPIRE 订单无法撤销 订单有7天的撤销有效期,过期将不能撤销 请检查需要撤销的订单是否超过可撤销有效期
INVALID_REQUEST 无效请求 商户系统异常导致 请检查商户权限是否异常、重复请求支付、证书错误、频率限制等
TRADE_ERROR 订单错误 业务错误导致交易失败 请检查用户账号是否异常、被风控、是否符合规则限制等
USERPAYING 用户支付中 用户正在支付中的订单不允许撤销 用户正在支付中的订单不允许撤销,请稍后再试