当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。 
注意: 
交易时间超过一年的订单无法提交退款。
微信支付退款支持单笔交易分多次退款(不超50次),多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号。
错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次。
每个支付订单的部分退款次数不能超过50次。
如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败。
申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果。
一个月之前的订单申请退款频率限制为:5000/min。
同一笔订单多次退款的请求需相隔1分钟。
1. 接口说明 请求URL:  https://apihk.mch.weixin.qq.com/v3/global/refunds 
 
2. 请求参数 商户号 
mchid 
string[1,32] 
是 
Body 微信支付分配的商户号 注意:仅适用于 直连模式 示例值:1900000109 
APPID 
appid 
string[1,32] 
是 
Body 商户在微信开放平台申请移动应用对应的APPID 注意:仅适用于 直连模式 示例值:wx8888888888888888 
机构商户号 
sp_mchid 
string[1,32] 
是 
Body  微信支付分配给机构的商户号 注意:仅适用于 机构模式 示例值:1900000100 
子商户号 
sub_mchid 
string[1,32] 
是 
Body 微信支付分配子商户的商户号 注意:仅适用于 机构模式 示例值:1900000109 
机构APPID 
sp_appid 
string[1,32] 
是 
Body  商户在微信公众平台申请服务号对应的APPID 注意:仅适用于 机构模式 示例值:wx8888888888888888 
子商户APPID 
sub_appid 
string[1,32] 
否 
Body 子商户在微信开放平台申请移动应用对应的APPID 付款码支付/扫码支付/公众号支付使用商户公众号appid 小程序支付使用商户小程序appid APP支付使用商户APP应用appid 注意:仅适用于 机构模式 示例值:wx8888888888888888 
微信订单号 
transaction_id 
string[1,32] 
二选一 
Body 原支付交易对应的微信订单号 示例值:1217752501201407033233368018 
商户订单号 
out_trade_no 
string[1,32] 
Body 原支付交易对应的订单号 示例值:1217752501201407033233368018 
商户退款单号 
out_refund_no 
string[1,64] 
是 
Body 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。 示例值:1217752501201407033233368018 
退款原因 
reason 
string[1,80] 
否 
Body 若商户传入,会在下发给用户的退款消息中体现退款原因 注意:若订单退款金额≤1元,且属于部分退款,则不会在退款消息中体现退款原因 示例值:商品已售完 
退款资金来源 
source 
string[1,30] 
否 
Body REFUND_SOURCE_UNSETTLED_FUNDS:未结算资金退款(默认使用未结算资金退款) REFUND_SOURCE_RECHARGE_FUNDS:可用余额退款 示例值:REFUND_SOURCE_UNSETTLED_FUNDS 备注:该字段不适用于分账业务。 
订单金额 
amount 
object 
是 
Body 订单金额信息,详细说明见下文 
订单金额 退款金额 
refund 
int 
是 
退款金额,币种的最小单位,只能为整数,不能超过原订单支付金额,如果有使用券,后台会按比例退。 
示例值:888 
原订单金额 
total 
int 
是 
原支付交易的订单总金额,币种的最小单位,只能为整数,详见 交易金额 示例值:888 
退款币种 
currency 
string[1,16] 
是 
符合ISO 4217标准的三位字母代码,退款币种必须和标价币种一致,币种列表详见币种类型 
示例值:HKD 
退款出资来源及金额 
from 
array 
否 
跨境分账订单传递此参数指定出资来源及金额; 分账订单如果不传此参数,则默认优先从订单未分可退余额出资退款,不足部分由可垫付退款额度补足,具体出资来源及金额需要根据返回参数中 from 字段确认。 此参数使用场景需要满足以下条件: 1、可垫付退款余额出资金额和订单未分可退余额出资金额之和等于退款金额; 2、出资来源不能重复。 上述任一条件不满足将返回错误。 
退款出资来源及金额 出资来源 
fund_source 
string[1,32] 
是 
退款出资来源,下面枚举值多选一。 枚举值: FUNDS_REFUNDABLE_BALANCE : 可垫付退款余额 ORDER_REFUNDABLE_BALANCE : 订单未分可退余额 
示例值:FUNDS_REFUNDABLE_BALANCE 
出资金额 
amount 
int 
是 
对应出资来源金额(币种的最小单位,只能为整数) 
示例值:888 
退款通知地址 
notify_url 
string[1,256] 
否 
Body  异步接收微信退款状态变更的回调地址,通知url必须为外网可访问的url,不能携带参数。请使用https协议链接 示例值:https://www.weixin.qq.com/wxpay/pay.php 
请求示例 场景一: 普通订单退款请求 
1 { 
 2      "sp_appid" :   "wx2421b1c4370ec43b" , 
 3      "sub_appid" :   "1900000109" , 
 4      "sp_mchid" :   "10000100" , 
 5      "sub_mchid" :   "20000100" , 
 6      "transaction_id" :   "1008450740201411110005820873" , 
 7      "out_refund_no" :   "R20150806125346" , 
 8      "amount"   :   { 
 9          "refund" :   50 , 
 10          "total" : 100 , 
 11           "currency" : "HKD" 
 12      } , 
 13      "reason" :   "商品已售完" , 
 14      "source" :   "REFUND_SOURCE_UNSETTLED_FUNDS" 
 15 } 
 16    场景二: 分账订单指定出资来源退款请求 
1 { 
 2 	 "sp_appid" :   "wx7bc98d929da735fe" , 
 3 	 "sp_mchid" :   "999952224" , 
 4 	 "sub_mchid" :   "999968479" , 
 5 	 "out_trade_no" :   "20220724trade004" , 
 6 	 "out_refund_no" :   "20220724trade004refund001" , 
 7 	 "amount" :   { 
 8 		 "currency" :   "CNY" , 
 9 		 "refund" :   500 , 
 10 		 "total" :   1000 , 
 11 		 "from" :   [ { 
 12 				 "fund_source" :   "FUNDS_REFUNDABLE_BALANCE" , 
 13 				 "amount" :   200 
 14 			 } , 
 15 			 { 
 16 				 "fund_source" :   "ORDER_REFUNDABLE_BALANCE" , 
 17 				 "amount" :   300 
 18 			 }    
 19 		 ] 
 20 	 } , 
 21 	 "reason" :   "商品已售完" 
 22 }     
3. 返回参数 
正常返回 微信支付退款订单号 
id 
string[1,32] 
是 
微信支付退款订单号 示例值:1217752501201407033233368018 
商户退款单号 
out_refund_no 
string[1,64] 
是 
返回的退款订单号。 示例值:1217752501201407033233368018 
退款创建时间 
create_time  
string[1,64] 
是 
退款受理时间, 示例值:2018-06-08T10:34:56+08:00 
退款金额 
amount 
object 
是 
退款金额信息,详细说明见下文 
退款金额 退款金额 
refund 
int 
是 
退款金额,币种的最小单位,只能为整数,不能超过原订单支付金额,如果有使用券,后台会按比例退。 示例值:888 
退款币种 
currency 
string[1,16] 
是 
符合ISO 4217标准的三位字母代码 示例值:CNY 
用户退款金额 
payer_refund 
int 
是 
退款给用户的金额,不包含所有优惠券金额 示例值:888 
支付币种 
payer_currency 
string[1,16] 
是 
符合ISO 4217标准的三位字母代码 示例值:CNY 
结算币种退款金额 
settlement_refund 
int 
是 
商户结算币种所对应的退款金额,币种的最小单位,只能为整数 示例值:888 
结算币种 
settlement_currency 
string[1,16] 
是 
结算币种,符合ISO 4217标准的三位字母代码,币种列表详见币种类型 示例值:HKD 
汇率 
exchange_rate 
object  
是 
汇率信息 
汇率 汇率类型 
type 
string[1,16] 
否 
标价币种和结算币种一致时,type="USERPAYMENT_RATE",即标价币种和支付币种的汇率 
标价币种和结算币种不一致,type="SETTLEMENT_RATE",即标价币种和结算币种的汇率; 
示例值:SETTLEMENT_RATE 
汇率值 
rate 
int 
否 
rate值是兑换比例乘以10的8次方, 如果兑换比例是1,则rate=100000000; 如果兑换比例为6.5,则rate=650000000 示例值:8000000 
退款出资来源及金额 
from 
array 
否 
跨境分账订单传递此参数指定出资来源及金额; 分账订单如果不传此参数,则默认优先从订单未分可退余额出资退款,不足部分由可垫付退款额度补足,具体出资来源及金额需要根据返回参数中 from 字段确认。 此参数使用场景需要满足以下条件: 1、订单属于跨境分账订单,非跨境订单请不要传递此参数。 参数传递需要满足条件: 1、可垫付退款余额出资金额和订单未分可退余额出资金额之和等于退款金额; 2、出资来源不能重复。 上述任一条件不满足将返回错误。 
退款出资来源及金额 出资来源 
fund_source 
string[1,32] 
是 
退款出资来源,下面枚举值多选一。 枚举值: FUNDS_REFUNDABLE_BALANCE : 可垫付退款余额 ORDER_REFUNDABLE_BALANCE : 订单未分可退余额 
示例值:FUNDS_REFUNDABLE_BALANCE 
出资金额 
amount 
int 
是 
对应出资来源金额(币种的最小单位,只能为整数) 
示例值:888 
优惠退款详情 
detail 
array 
否 
优惠退款详情信息,详细说明见下文 
优惠退款详情 券ID 
promotion_id 
string[1,32] 
是 
券或者立减优惠id 示例值:109519 
优惠范围 
scope 
string[1,32] 
否 
GLOBAL:全场代金券 SINGLE: 单品优惠 示例值:SINGLE 
优惠类型 
type 
string[1,32] 
否 
COUPON:代金券,需要走结算资金的充值型代金券,(境外商户券币种与支付币种一致) DISCOUNT:优惠券,不走结算资金的免充值型优惠券,(境外商户券币种与标价币种一致 示例值:DISCOUNT 
优惠券面额 
amount 
int 
否 
用户享受优惠的金额(优惠券面额=微信出资金额+商家出资金额+其他出资方金额 ) 示例值:5 
优惠券退款额 
refund_amount 
int 
否 
按比例退款的优惠券金额 示例值:5 
货币类型 
currency 
string[1,16] 
是 
符合ISO 4217标准的三位字母代码 示例值:CNY 
注意: goods_remark为备注字段,按照配置原样返回,goods_tag是订单优惠标记,用于区分订单是否可以享受优惠,两个字段内容都在微信后台配置券时进行设置。 
 
异常返回 返回状态码 
code 
string[1, 32] 
是 
错误码,枚举值见错误码列表 示例值:INVALID_REQUEST 
返回信息 
message 
string[1, 256] 
是 
返回信息,如非空,为错误原因 示例值:参数格式校验错误 
详细的错误描述 
detail 
object 
否 
当code为PARAM_ERROR时返回,详细说明见下 
详细的错误描述 指示错误参数的位置 
field 
string[1, 256] 
是 
当错误参数位于请求body的JSON时,填写指向参数的JSON Pointer 当错误参数位于请求的url或者querystring时,填写参数的变量名 
示例值:#/properties/payer 
错误参数的值 
value 
string[1, 256] 
是 
错误参数的值 
示例值:1346177081915535577 
具体错误原因 
issue 
string[1, 256] 
是 
具体错误原因 
示例值:与ALLOF schema不符 
错误参数的位置 
location 
string[1, 256] 
否 
body:错误参数位于请求body的JSON中 url:错误参数位于请求url中 query:错误参数位于请求的querystring中 
示例值:body 
返回示例 场景一返回示例 
1 { 
 2      "id" :   "50202002642022072801898085012" , 
 3      "out_refund_no" :   "20220724trade003refund001" , 
 4      "create_time" :   "2022-07-28T15:44:07+08:00" , 
 5      "amount" :   { 
 6          "refund" :   500 , 
 7          "currency" :   "CNY" , 
 8          "payer_refund" :   250 , 
 9          "payer_currency" :   "CNY" , 
 10          "settlement_refund" :   578 , 
 11          "settlement_currency" :   "HKD" , 
 12          "exchange_rate" :   { 
 13              "type" :   "SETTLEMENT_RATE" , 
 14              "rate" :   86500000 
 15          } 
 16      } , 
 17      "detail" :   [ 
 18          { 
 19              "promotion_id" :   "11006096615" , 
 20              "scope" :   "GLOBAL" , 
 21              "type" :   "COUPON" , 
 22              "amount" :   500 , 
 23              "refund_amount" :   250 , 
 24              "currency" :   "CNY" 
 25          } 
 26      ] 
 27 } 场景二: 返回示例 
1 { 
 2      "id" :   "50201702652022072801898085013" , 
 3      "out_refund_no" :   "20220724trade004refund001" , 
 4      "create_time" :   "2022-07-28T15:51:57+08:00" , 
 5      "amount" :   { 
 6          "refund" :   500 , 
 7          "currency" :   "CNY" , 
 8          "payer_refund" :   250 , 
 9          "payer_currency" :   "CNY" , 
 10          "settlement_refund" :   578 , 
 11          "settlement_currency" :   "HKD" , 
 12          "exchange_rate" :   { 
 13              "type" :   "SETTLEMENT_RATE" , 
 14              "rate" :   86490000 
 15          } , 
 16          "from" :   [ 
 17              { 
 18                  "fund_source" :   "ORDER_REFUNDABLE_BALANCE" , 
 19                  "amount" :   300 
 20              } , 
 21              { 
 22                  "fund_source" :   "FUNDS_REFUNDABLE_BALANCE" , 
 23                  "amount" :   200 
 24              } 
 25          ] 
 26      } , 
 27      "detail" :   [ 
 28          { 
 29              "promotion_id" :   "11006096908" , 
 30              "scope" :   "GLOBAL" , 
 31              "type" :   "COUPON" , 
 32              "amount" :   500 , 
 33              "refund_amount" :   250 , 
 34              "currency" :   "CNY" 
 35          } 
 36      ] 
 37 } 异常示例 
1 { 
 2 	 "code" :   "INVALID_REQUEST" , 
 3 	 "message" :   "Parameter format verification error" , 
 4 	 "detail" :   { 
 5 		 "field" :   "#/properties/payer" , 
 6 		 "value" :   "1346177081915535577" , 
 7 		 "issue" :   "与ALLOF schema不符" , 
 8 		 "location" :   "body" 
 9 	 } 
 10 }  
4. 错误码 RESOURCE_NOT_EXISTS 
查询的资源不存在 
请检查查询资源的对应id是否填写正确 
SYSTEM_ERROR 
接口返回错误 
请不要更换商户退款单号,请使用相同参数再次调用API。否则可能造成资金损失 
BIZERR_NEED_RETRY 
退款业务流程错误,需要商户触发重试来解决 
请不要更换商户退款单号,请使用相同参数再次调用API。否则可能造成资金损失 
TRADE_OVERDUE 
订单已经超过退款期限 
请选择其他方式自行退款 
ERROR 
业务错误 
该错误都会返回具体的错误原因,请根据实际返回做相应处理。 
USER_ACCOUNT_ABNORMAL 
退款请求失败 
此状态代表退款申请失败,商户可自行处理退款。 
INVALID_REQ_TOO_MUCH 
无效请求过多 
请检查业务是否正常,确认业务正常后请在1分钟后再来重试 
NOT_ENOUGH 
余额不足 
此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。 
INVALID_TRANSACTIONID 
无效transaction_id 
请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败 
PARAM_ERROR 
参数错误 
请求参数错误,请重新检查再调用退款申请 
APPID_NOT_EXIST 
APPID不存在 
请检查APPID是否正确 
MCHID_NOT_EXIST 
MchID不存在 
请检查MchID是否正确 
REQUIRE_POST_METHOD 
请使用post方法 
请检查请求参数是否通过post方法提交 
SIGN_ERROR 
签名错误 
请检查签名参数和方法是否都符合签名算法要求 
FREQUENCY_LIMITED 
频率限制 
触发退款操作频次限制,当前退款请求受理状态不明。 建议先通过查询退款接口确认退款状态,或稍后通过原退款单号重试 
INVALID_REQUEST 
请求参数符合参数格式,但不符合业务规则 
此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。