申请退款
更新时间:2025.03.21应用场景
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。
  | 
状态机
退款状态转变如下:
 
接口地址
接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
是否需要证书
请求需要双向证书。 详见证书使用
请求参数
字段名  | 变量名  | 必填  | 类型  | 示例值  | 描述  | 
|---|---|---|---|---|---|
公众账号ID  | appid  | 是  | String(32)  | wx8888888888888888  | 微信分配的公众账号ID(企业号corpid即为此appid)  | 
商户号  | mch_id  | 是  | String(32)  | 1900000109  | 微信支付分配的商户号  | 
随机字符串  | nonce_str  | 是  | String(32)  | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS  | 随机字符串,不长于32位。推荐随机数生成算法  | 
签名  | sign  | 是  | String(32)  | C380BEC2BFD727A4B6845133519F3AD6  | 签名,详见签名生成算法  | 
签名类型  | sign_type  | 否  | String(32)  | HMAC-SHA256  | 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5  | 
微信支付订单号  | transaction_id  | 二选一  | String(32)  | 1217752501201407033233368018  | 微信生成的订单号,在支付通知中有返回  | 
商户订单号  | out_trade_no  | String(32)  | 1217752501201407033233368018  | 商户系统内部订单号,要求32个字符内(最少6个字符),只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号 transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no  | |
商户退款单号  | out_refund_no  | 是  | String(64)  | 1217752501201407033233368018  | 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。  | 
订单金额  | total_fee  | 是  | int  | 100  | 订单总金额,单位为分,只能为整数,详见支付金额  | 
退款金额  | refund_fee  | 是  | int  | 100  | 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额  | 
退款货币种类  | refund_fee_type  | 否  | String(8)  | CNY  | 退款货币类型,需与支付一致,或者不填。符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型  | 
退款原因  | refund_desc  | 否  | String(80)  | 商品已售完  | 若商户传入,会在下发给用户的退款消息中体现退款原因 注意:若订单退款金额≤1元,且属于部分退款,则不会在退款消息中体现退款原因  | 
退款资金来源  | refund_account  | 否  | String(30)  | REFUND_SOURCE_RECHARGE_FUNDS  | 仅针对老资金流商户使用 REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款) REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款  | 
退款结果通知url  | notify_url  | 否  | String(256)  | https://weixin.qq.com/notify/  | 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数 如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。  | 
举例如下:
返回结果
字段名  | 变量名  | 必填  | 类型  | 示例值  | 描述  | 
|---|---|---|---|---|---|
返回状态码  | return_code  | 是  | String(16)  | SUCCESS  | SUCCESS/FAIL 此字段是通信标识,表示接口层的请求结果,并非退款状态。  | 
返回信息  | return_msg  | 是  | String(128)  | OK  | 当return_code为FAIL时返回信息为错误原因 ,例如 签名失败 参数格式校验错误  | 
以下字段在return_code为SUCCESS的时候有返回
字段名  | 变量名  | 必填  | 类型  | 示例值  | 描述  | 
|---|---|---|---|---|---|
业务结果  | result_code  | 是  | String(16)  | SUCCESS  | SUCCESS/FAIL SUCCESS退款申请接收成功,结果通过退款查询接口查询 FAIL 提交业务失败  | 
错误代码  | err_code  | 否  | String(32)  | SYSTEMERROR  | 列表详见错误码列表  | 
错误代码描述  | err_code_des  | 否  | String(128)  | 系统超时  | 结果信息描述  | 
公众账号ID  | appid  | 是  | String(32)  | wx8888888888888888  | 微信分配的公众账号ID  | 
商户号  | mch_id  | 是  | String(32)  | 1900000109  | 微信支付分配的商户号  | 
随机字符串  | nonce_str  | 是  | String(32)  | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS  | 随机字符串,不长于32位  | 
签名  | sign  | 是  | String(32)  | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS  | 签名,详见签名算法  | 
微信支付订单号  | transaction_id  | 是  | String(32)  | 4007752501201407033233368018  | 微信订单号  | 
商户订单号  | out_trade_no  | 是  | String(32)  | 33368018  | 商户系统内部订单号,要求32个字符内(最少6个字符),只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号  | 
商户退款单号  | out_refund_no  | 是  | String(64)  | 121775250  | 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。  | 
微信退款单号  | refund_id  | 是  | String(32)  | 2007752501201407033233368018  | 微信退款单号  | 
退款金额  | refund_fee  | 是  | int  | 100  | 退款总金额,单位为分,可以做部分退款  | 
应结退款金额  | settlement_refund_fee  | 否  | int  | 100  | 去掉非充值代金券退款金额后的退款金额,退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额  | 
标价金额  | total_fee  | 是  | int  | 100  | 订单总金额,单位为分,只能为整数,详见支付金额  | 
应结订单金额  | settlement_total_fee  | 否  | int  | 100  | 去掉非充值代金券金额后的订单总金额,应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。  | 
标价币种  | fee_type  | 否  | String(8)  | CNY  | 订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型  | 
现金支付金额  | cash_fee  | 是  | int  | 100  | 现金支付金额,单位为分,只能为整数,详见支付金额  | 
现金支付币种  | cash_fee_type  | 否  | String(16)  | CNY  | 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型  | 
现金退款金额  | cash_refund_fee  | 否  | int  | 100  | 现金退款金额,单位为分,只能为整数,详见支付金额  | 
代金券类型  | coupon_type_$n  | 否  | String(8)  | CASH  | CASH--充值代金券 NO_CASH---非充值代金券 订单使用代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_0  | 
代金券退款总金额  | coupon_refund_fee  | 否  | int  | 100  | 代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠  | 
单个代金券退款金额  | coupon_refund_fee_$n  | 否  | int  | 100  | 代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠  | 
退款代金券使用数量  | coupon_refund_count  | 否  | int  | 1  | 退款代金券使用数量  | 
退款代金券ID  | coupon_refund_id_$n  | 否  | String(20)  | 10000  | 退款代金券ID, $n为下标,从0开始编号  | 
举例如下:
错误码
名称  | 描述  | 原因  | 解决方案  | 
|---|---|---|---|
SYSTEMERROR  | 接口返回错误  | 系统超时等  | 请不要更换商户退款单号,请使用相同参数再次调用API。  | 
BIZERR_NEED_RETRY  | 退款业务流程错误,需要商户触发重试来解决  | 并发情况下,业务被拒绝,商户重试即可解决  | 请不要更换商户退款单号,请使用相同参数再次调用API。  | 
TRADE_OVERDUE  | 订单已经超过退款期限  | 订单已经超过可退款的最大期限(支付后一年内可退款)  | 请选择其他方式自行退款  | 
ERROR  | 业务错误  | 申请退款业务发生错误  | 该错误都会返回具体的错误原因,请根据实际返回做相应处理。  | 
USER_ACCOUNT_ABNORMAL  | 退款请求失败  | 用户账号注销  | 此状态代表退款申请失败,商户可自行处理退款。  | 
INVALID_REQ_TOO_MUCH  | 无效请求过多  | 连续错误请求数过多被系统短暂屏蔽  | 请检查业务是否正常,确认业务正常后请在1分钟后再来重试  | 
NOTENOUGH  | 余额不足  | 商户可用退款余额不足  | 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。  | 
INVALID_TRANSACTIONID  | 无效transaction_id  | 请求参数未按指引进行填写  | 请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败  | 
PARAM_ERROR  | 参数错误  | 请求参数未按指引进行填写  | 请求参数错误,请重新检查再调用退款申请  | 
APPID_NOT_EXIST  | APPID不存在  | 参数中缺少APPID  | 请检查APPID是否正确  | 
MCHID_NOT_EXIST  | MCHID不存在  | 参数中缺少MCHID  | 请检查MCHID是否正确  | 
ORDERNOTEXIST  | 订单号不存在  | 缺少有效的订单号  | 请检查你的订单号是否正确且是否已支付,未支付的订单不能发起退款  | 
REQUIRE_POST_METHOD  | 请使用post方法  | 未使用post传递参数  | 请检查请求参数是否通过post方法提交  | 
SIGNERROR  | 签名错误  | 参数签名结果不正确  | 请检查签名参数和方法是否都符合签名算法要求  | 
XML_FORMAT_ERROR  | XML格式错误  | XML格式错误  | 请检查XML参数格式是否正确  | 
FREQUENCY_LIMITED  | 频率限制  | 1个月之前的订单申请退款有频率限制  | 该笔退款为受理中,请调用查单接口确认或降低频率原单重试,重试请勿更换单号  | 
NOAUTH  | 异常IP请求不予受理  | 请求ip异常  | 如果是动态ip,请登录商户平台后台关闭ip安全配置;  | 
CERT_ERROR  | 证书校验错误  | 请检查证书是否正确,证书是否过期或作废。  | 请检查证书是否正确,证书是否过期或作废。  | 
INVALID_REQUEST  | 请求参数符合参数格式,但不符合业务规则  | 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。  | 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。  | 
ORDER_NOT_READY  | 订单处理中,暂时无法退款,请稍后再试  | 订单处理中,暂时无法退款,请稍后再试  | 订单处理中,暂时无法退款,请稍后再试  | 
