---
url: "https://pay.weixin.qq.com/doc/v3/partner/4012476892.md"
title: "申请退款"
doc_id: 4012476892
---

>更新时间：2024.11.04

当交易发生之后一段时间内，由于买家或者卖家的原因需要退款时，卖家可以通过退款接口将支付款退还给买家，微信支付将在收到退款请求并且验证成功之后，按照退款规则将支付款按原路退到买家账户上。

1. 交易时间超过一年的订单无法提交退款（按支付成功时间+365天计算）。

2. 微信支付退款支持单笔交易分多次退款，多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交，请不要更换退款单号，请使用原商户退款单号。

3. 请求频率限制：150qps，即每秒钟正常的申请退款请求次数不超过150次，单笔订单请求频率限制：1qpm，即单笔订单每分钟申请退款请求次数不超过1次。

4. 每个支付订单的部分退款次数不能超过50次。

5. 申请退款接口的返回仅代表业务的受理情况，具体退款是否成功，需要通过退款查询接口获取结果。

6. 当二级商户退款账户余额不足时，可发起垫付退款，从电商平台指定账户垫付退款资金。当二级商户退款账户余额充足时，可把退款垫付的资金回补到电商平台账户。垫付退款需要向微信支付申请开通权限，开通权限时需要指定一个垫付出款账户。





## 接口说明

支持商户：【平台商户】

请求方式：【POST】 `/v3/ecommerce/refunds/apply`

请求域名：【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点

　　　　　【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点，指引[点击查看](https://pay.weixin.qq.com/doc/v3/partner/4012082567.md)

## 请求参数

### Header 参数
| 参数名 | 类型 | 必填 | 描述 |
| --- |  --- | --- | --- |
| Authorization | string | true | 请参考 [签名认证](https://pay.weixin.qq.com/doc/v3/partner/4012365870.md#%E8%AF%B7%E6%B1%82%E6%8E%A5%E5%8F%A3%E5%90%8E%E7%AB%AF%E7%AD%BE%E5%90%8D) 生成认证信息 |
| Accept | string | true | 请设置为 `application/json` |
| Content-Type | string | true | 请设置为 `application/json` |
### Body 参数
| 参数名 | 类型 | 必填 | 描述 |
| --- |  --- | --- | --- |
| sub_mchid | string(32) | true | **【二级商户号】** 微信支付分配二级商户的商户号 |
| sp_appid | string(32) | true | **【电商平台APPID】** 电商平台在微信公众平台申请服务号对应的APPID，申请商户功能的时候微信支付会配置绑定关系 |
| sub_appid | string(32) | false | **【二级商户APPID】** 二级商户在微信申请公众号成功后分配的帐号ID，需要电商平台侧有配置绑定关系才能传 |
| transaction_id | string(32) | false | **【微信订单号】** 原支付交易对应的微信订单号 |
| out_trade_no | string(32) | false | **【商户订单号】** 原支付交易对应的商户订单号 |
| out_refund_no | string(64) | true | **【商户退款单号】** 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母\_-&#124;\*@ ，同一退款单号多次请求只退一笔。 |
| reason | string(80) | false | **【退款原因】** 若商户传入，会在下发给用户的退款消息中体现退款原因 |
| amount | object | true | **【订单金额】** 订单金额信息 |
| amount.refund | integer | true | **【退款金额】** 退款金额，币种的最小单位，只能为整数，不能超过原订单支付金额。 |
| amount.from | array[object] | false | **【退款出资账户及金额】** 退款需要从指定账户出资时，传递此参数指定出资金额（币种的最小单位，只能为整数）。<br>该功能优先级高于通过资金账户（funds\_account）参数来指定可用余额出资退款功能，且二者不可同时使用。<br>同时指定多个账户出资退款的使用场景需要满足以下条件：1、未开通退款支出分离产品功能；2、非电商平台垫付退款；3、订单属于分账订单，且分账处于待分账或分账中状态。<br>参数传递需要满足条件：1、基本账户可用余额出资金额与基本账户不可用余额出资金额之和等于退款金额；2、账户类型不能重复。<br>上述任一条件不满足将返回错误 |
| amount.from.account | string(32) | true | **【出资账户类型】** 下面枚举值多选一。<br>枚举值：<br>AVAILABLE : 可用余额<br>UNAVAILABLE : 不可用余额 |
| amount.from.amount | integer | true | **【出资金额】** 对应账户出资金额 |
| amount.total | integer | true | **【原订单金额】** 原支付交易的订单总金额，币种的最小单位，只能为整数 |
| amount.currency | string(16) | false | **【退款币种】** 符合ISO 4217标准的三位字母代码，目前只支持人民币：CNY |
| notify_url | string(256) | false | **【退款结果回调url】** 异步接收微信支付退款结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 如果参数中传了notify\_url，则商户平台上配置的回调地址将不会生效，优先回调当前传的这个地址。 |
| refund_account | string(32) | false | **【退款出资商户】** REFUND\_SOURCE\_PARTNER\_ADVANCE : 电商平台垫付，需要向微信支付申请开通<br>REFUND\_SOURCE\_SUB\_MERCHANT : 二级商户，默认值<br>注意：若传入REFUND\_SOURCE\_PARTNER\_ADVANCE，仅代表可以使用垫付退款，实际出款账户需以退款申请受理结果或查单结果为准。 |
| funds_account | string(32) | false | **【资金账户】** 若订单处于待分账状态，可以传入此参数，指定退款资金来源账户。当该字段不存在时，默认使用订单交易资金所在账户出款，即待分账时使用不可用余额的资金进行退款，已分账或无分账时使用可用余额的资金进行退款。<br>AVAILABLE：可用余额 |
## 应答参数

200 OK

| 参数名 | 类型 | 必填 | 描述 |
| --- |  --- | --- | --- |
| refund_id | string(32) | true | **【微信支付退款订单号】** 微信支付退款订单号 |
| out_refund_no | string(64) | true | **【商户退款单号】** 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母\_-&#124;\*@ ，同一退款单号多次请求只退一笔。 |
| create_time | string(64) | true | **【退款创建时间】** 退款受理时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日13点29分35秒。 |
| amount | object | true | **【退款金额】** 订单退款金额信息 |
| amount.refund | integer | true | **【退款金额】** 退款金额，单位为分，只能为整数，不能超 过原订单支付金额 |
| amount.from | array[object] | false | **【退款出资账户及金额】** 退款出资的账户类型及金额信息 |
| amount.from.account | string(32) | true | **【出资账户类型】** 下面枚举值多选一。<br>枚举值：<br>AVAILABLE : 可用余额<br>UNAVAILABLE : 不可用余额 |
| amount.from.amount | integer | true | **【出资金额】** 对应账户出资金额 |
| amount.payer_refund | integer | true | **【用户退款金额】** 退款给用户的金额，不包含所有优惠券金额 |
| amount.discount_refund | integer | false | **【优惠退款金额】** 优惠券的退款金额，原支付单的优惠按比例退款 |
| amount.currency | string(16) | false | **【货币类型】** 符合ISO4217标准的三位字母代码，目前只支持人民币：CNY |
| amount.advance | integer | false | **【垫付金额】** 电商平台垫付的金额 |
| promotion_detail | array[object] | false | **【优惠退款详情】** 优惠退款功能信息 |
| promotion_detail.promotion_id | string(32) | true | **【券ID】** 券或者立减优惠id |
| promotion_detail.scope | string(32) | true | **【优惠范围】** GLOBAL- 全场代金券<br>SINGLE- 单品优惠 |
| promotion_detail.type | string(32) | true | **【优惠类型】** COUPON- 代金券，需要走结算资金的充值型代金券<br>DISCOUNT- 优惠券，不走结算资金的免充值型优惠券 |
| promotion_detail.amount | integer | true | **【优惠券面额】** 用户享受优惠的金额（优惠券面额=微信出资金额+商家出资金额+其他出资方金额 ） |
| promotion_detail.refund_amount | integer | true | **【优惠退款金额】** 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠 |
| refund_account | string(32) | false | **【退款出资商户】** REFUND\_SOURCE\_PARTNER\_ADVANCE : 电商平台垫付<br>REFUND\_SOURCE\_SUB\_MERCHANT : 二级商户，默认值<br>注意：申请退款时可能会出现暂未扣除退款资金的情况，此时不返回本字段，需查单确认。 |
## 错误码

### 公共错误码

| 状态码 | 错误码 | 描述 | 解决方案 |
| --- | --- | --- | --- |
| 400 | PARAM\_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
| 400 | INVALID\_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 [接口规则](https://pay.weixin.qq.com/doc/v3/partner/4012081726.md) |
| 401 | SIGN\_ERROR | 验证不通过 | 请参阅 [签名常见问题](https://pay.weixin.qq.com/doc/v3/partner/4012082324.md) |
| 500 | SYSTEM\_ERROR | 系统异常，请稍后重试 | 请稍后重试 |

### 业务错误码

| 状态码 | 错误码 | 描述 | 解决方案 |
| --- | --- | --- | --- |
| 400 | INVALID\_REQUEST | 请求参数符合参数格式，但不符合业务规则 | 此状态代表本次请求的退款申请失败，请根据具体的错误提示做相应处理 |
| 400 | MCH\_NOT\_EXISTS | 商户号不存在 | 请检查商户号是否正确 |
| 401 | SIGN\_ERROR | 签名错误 | 请检查签名参数和方法是否都符合签名算法要求 |
| 403 | NO\_AUTH | 没有退款权限 | 此状态代表退款申请失败，请检查是否有退这笔订单的权限 |
| 403 | NOT\_ENOUGH | 余额不足 | 根据提示进行充值后重试 |
| 403 | USER\_ACCOUNT\_ABNORMAL | 用户账户异常或已注销，不能原路退回，请使用其他方式进行退款 | 此状态代表退款申请失败，商户可自行处理退款。或前往[服务商](https://pay.weixin.qq.com/partner/public/home)-交易中心，重新发起退款 |
| 404 | RESOURCE\_NOT\_EXISTS | 订单不存在 | 请检查订单号是否正确且是否已支付，未支付的订单不能发起退款 |
| 429 | FREQUENCY\_LIMITED | 频率限制 | 该笔退款为受理中，请调用查单接口确认或降低频率原单重试，重试请勿更换单号 |
| 500 | SYSTEM\_ERROR | 接口返回错误 | 请不要更换商户退款单号，请使用相同参数再次调用API |

请求示例

- [curl 示例](https://pay.weixin.qq.com/doc/v3/partner/4012476892-curl.md)
- [Java 示例](https://pay.weixin.qq.com/doc/v3/partner/4012476892-java.md)
- [Go 示例](https://pay.weixin.qq.com/doc/v3/partner/4012476892-go.md)


应答示例

> 200 OK

```
{
  "refund_id" : "1217752501201407033233368018",
  "out_refund_no" : "1217752501201407033233368018",
  "create_time" : "2018-06-08T10:34:56+08:00",
  "amount" : {
    "refund" : 888,
    "from" : [
      {
        "account" : "AVAILABLE",
        "amount" : 444
      }
    ],
    "payer_refund" : 888,
    "discount_refund" : 888,
    "currency" : "CNY",
    "advance" : 888
  },
  "promotion_detail" : [
    {
      "promotion_id" : "109519",
      "scope" : "SINGLE",
      "type" : "DISCOUNT",
      "amount" : 5,
      "refund_amount" : 100
    }
  ],
  "refund_account" : "REFUND_SOURCE_SUB_MERCHANT"
}
```
