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