# 查询退款

> 使用本接口需要开启[开放接口服务](/minigame/dev/wxcloudrun/src/guide/weixin/open)

提交退款申请后，通过调用该接口查询退款状态。退款有一定延时，用零钱支付的退款 20 分钟内到账，银行卡支付的退款 3 个工作日后重新查询退款状态。

**注意：如果单个支付订单部分退款次数超过 20 次请使用退款单号查询**

## 接口地址

``` bash
http://api.weixin.qq.com/_/pay/queryrefund
```

## 分页查询

当一个订单部分退款超过 10 笔后，商户用微信订单号或商户订单号调退款查询 API 查询退款时，默认返回前 10 笔和 total_refund_count（退款单总笔数）。商户需要查询同一订单下超过 10 笔的退款单时，可传入订单号及 offset 来查询，微信支付会返回 offset 及后面的 10 笔，以此类推。当商户传入的 offset 超过 total_refund_count，则系统会返回报错 PARAM_ERROR。

举例：

一笔订单下的退款单有 36 笔，当商户想查询第25笔时，可传入订单号及 offset=24，微信支付平台会返回第25笔到第35笔的退款单信息，或商户可直接传入退款单号查询退款

## 入参数据

``` json
{
  "out_trade_no":"2021WERUN1647840687637",
  "sub_mch_id":"1712734762"
}
```

## 出参数据

``` json
{
  "errcode":0,
  "errmsg":"ok",
  "respdata":{
    "return_code":"SUCCESS",
    "return_msg":"OK",
    "result_code":"SUCCESS",
    "appid":"wxd2565e6a04246fd1",
    "mch_id":"1800780001",
    "sub_mch_id":"1712734762",
    "nonce_str":"O3Ko2eAjgqFLuvXL",
    "sign":"278E0B62A3FF3218265A11C0C7DD5641",
    "transaction_id":"4200136120742200032130860688",
    "out_trade_no":"2021WERUN1647840687637",
    "total_fee":1,
    "cash_fee":1,
    "refund_count":1,
    "out_refund_no_list":[],
    "refund_id_list":[],
    "refund_channel":[],
    "refund_fee_list":[],
    "settlement_refund_fee_list":[],
    "coupon_type_array":[],
    "coupon_refund_fee_list":[],
    "coupon_refund_count_list":[],
    "coupon_refund_id_array":[],
    "coupon_refund_fee_array":[],
    "refund_status_list":[],
    "refund_account_list":[],
    "refund_recv_accout_list":[],
    "refund_success_time_list":[]
  }
}
```

## 参数说明

| 字段名| 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|----|--------|---|----------|--------|
| 子商户号| sub_mch_id | 是 | String(32) | 1900000109 | 微信支付分配的子商户号 |
| 随机字符串| nonce_str| 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串，不长于 32 位。推荐随机数生成算法 |
| 微信订单号| transaction_id | 四选一 | String(28) | 1217752501201407033233368018 | 微信订单号查询的优先级是： refund_id > out_refund_no > transaction_id > out_trade_no |
| 商户订单号| out_trade_no | 四选一 | String(32) | 1217752501201407033233368018 | 商户系统内部订单号，要求 32 个字符内，只能是数字、大小写字母_-\|*@ ，且在同一个商户号下唯一。 |
| 商户退款单号| out_refund_no| 四选一 | String(64) | 1217752501201407033233368018 | 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-\|*@ ，同一退款单号多次请求只退一笔。 |
| 微信退款单号| refund_id| 四选一 | String(32) | 1217752501201407033233368018 | 微信退款单号 |
| 偏移量| offset | 否 | Int| 15 | 偏移量，当部分退款次数超过 10 次时可使用，表示返回的查询结果从这个偏移量开始取记录 |

`refund_id`、`out_refund_no`、`out_trade_no`、`transaction_id`四个参数必填一个，如果同时存在优先级为：
`refund_id` > `out_refund_no` > `transaction_id` > `out_trade_no`

## 返回值说明

| 字段名 | 变量名| 必填 | 类型| 示例值 | 描述 |
|---|---|------|---|----------|----------|
| 返回状态码 | return_code | 是 | String(16)| SUCCESS| SUCCESS/FAIL|
| 返回信息 | return_msg| 否 | String(128) | 签名失败 | 返回信息，如非空，为错误原因。如 签名失败、参数格式校验错误|

以下字段在 return_code 为 SUCCESS 的时候有返回

| 字段名 | 变量名 | 必填 | 类型| 示例值 | 描述|
|--------|--|------|-|----------|---------|
| 业务结果 | result_code| 是 | String(16)| SUCCESS| SUCCESS/FAIL 
SUCCESS 退款申请接收成功，结果通过退款查询接口查询|
| 错误码 | err_code | 是 | String(32)| SYSTEMERROR| 错误码详见第6节 |
| 错误描述 | err_code_des | 是 | String(128) | 系统错误 | 结果信息描述|
| 服务商的 APPID| AppID| 是 | String(32)| wxd678efh567hg6787 | 服务商商户的 APPID |
| 商户号 | mch_id | 是 | String(32)| 1230000109 | 微信支付分配的商户号|
| 小程序的 APPID| sub_appid| 是 | String(32)| wx8888888888888888 | 微信分配的小程序 ID|
| 子商户号 | sub_mch_id | 是 | String(32)| 1900000109 | 微信支付分配的子商户号|
| 随机字符串 | nonce_str| 是 | String(32)| 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串，不长于 32 位|
| 签名 | sign | 是 | String(32)| C380BEC2BFD727A4B6845133519F3AD6 | 签名，详见[签名算法](https://pay.weixin.qq.com/doc/v2/partner/4011985884)|
| 微信订单号 | transaction_id | 是 | String(32)| 1217752501201407033233368018 | 微信订单号|
| 商户订单号 | out_trade_no | 是 | String(32)| 1217752501201407033233368018 | 商户系统内部订单号，要求 32 个字符内，只能是数字、大小写字母_-\|*@ ，且在同一个商户号下唯一。|
| 订单金额 | total_fee| 是 | Int | 100| 订单总金额，单位为分，只能为整数，详见[支付金额](https://pay.weixin.qq.com/doc/v2/partner/4011941200#1%E3%80%81%E4%BA%A4%E6%98%93%E9%87%91%E9%A2%9D)|
| 应结订单金额 | settlement_total_fee | 否 | Int | 100| 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。|
| 货币种类 | fee_type | 否 | String(8) | CNY| 订单金额货币类型，符合 ISO 4217 标准的三位字母代码，默认人民币：CNY，其他值列表详见[货币类型](https://pay.weixin.qq.com/doc/v2/partner/4011941200#3%E3%80%81%E8%B4%A7%E5%B8%81%E7%B1%BB%E5%9E%8B) |
| 现金支付金额 | cash_fee | 是 | Int | 100| 现金支付金额，单位为分，只能为整数，详见[支付金额](https://pay.weixin.qq.com/doc/v2/partner/4011941200#1%E3%80%81%E4%BA%A4%E6%98%93%E9%87%91%E9%A2%9D)|
| 退款笔数 | refund_count | 是 | Int | 1| 当前返回退款笔数|
| 商户退款单号 | out_refund_no_$n | 是 | String(64)| 1217752501201407033233368018 | 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-\|*@ ，同一退款单号多次请求只退一笔。|
| 微信退款单号 | refund_id_$n | 是 | String(32)| 1217752501201407033233368018 | 微信退款单号|
| 退款渠道 | refund_channel_$n| 否 | String(16)| ORIGINAL | ORIGINAL—原路退款
BALANCE—退回到余额
OTHER_BALANCE—原账户异常退到其他余额账户
OTHER_BANKCARD—原银行卡异常退到其他银行卡|
| 订单总退款次数 | total_refund_count | 否 | Int | 35 | 订单总共已发生的部分退款次数，当请求参数传入 offset 后有返回|
| 申请退款金额 | refund_fee_$n| 是 | Int | 100| 退款总金额,单位为分,可以做部分退款|
| 退款金额 | settlement_refund_fee_$n | 否 | Int | 100| 退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额|
| 代金券类型 | coupon_type_$n_$m| 否 | String(8) | CASH | CASH--充值代金券
NO_CASH---非充值代金券
订单使用代金券时有返回（取值：CASH、NO_CASH）。$n 为下标,$m 为下标,从 0 开始编号，举例：coupon_type_$0_$1 |
| 总代金券退款金额 | coupon_refund_fee_$n | 否 | Int | 100| 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见[代金券或立减优惠](https://pay.weixin.qq.com/doc/v3/partner/4012087800) |
| 退款代金券使用数量 | coupon_refund_count_$n | 否 | Int | 1| 退款代金券使用数量 ,$n 为下标,从 0 开始编号|
| 退款代金券 ID | coupon_refund_id_$n_$m | 否 | String(20)| 10000| 退款代金券 ID, $n 为下标，$m 为下标，从 0 开始编号 |
| 单个代金券退款金额 | coupon_refund_fee_$n_$m| 否 | Int | 100| 单个退款代金券支付金额, $n 为下标，$m 为下标，从 0 开始编号 |
| 退款状态 | refund_status_$n | 是 | String(16)| SUCCESS| 退款状态：SUCCESS—退款成功
REFUNDCLOSE—退款关闭。
PROCESSING—退款处理中
CHANGE—退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往商户平台（pay.weixin.qq.com）-交易中心，手动处理此笔退款。$n 为下标，从 0 开始编号。 |
| 退款资金来源 | refund_account_$n| 否 | String(30)| REFUND_SOURCE_RECHARGE_FUNDS | REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户
REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
$n 为下标，从 0 开始编号。 |
| 退款入账账户 | refund_recv_accout_$n| 是 | String(64)| 招商银行信用卡 0403 | 取当前退款单的退款入账方
1）退回银行卡：
{银行名称}{卡类型}{卡尾号}
2）退回支付用户零钱:
支付用户零钱

3）退还商户:
商户基本账户
商户结算银行账户
4）退回支付用户零钱通:
支付用户零钱通 |
| 退款成功时间 | refund_success_time_$n | 否 | String(20)| 2016-07-25 15:26:26| 退款成功时间，当退款状态为退款成功时有返回。$n 为下标，从 0 开始编号。 |

## 错误码

| 名称| 描述 | 原因 | 解决方案 |
|-----------|--------|----|--------|
| SYSTEMERROR | 接口返回错误 | 系统超时 | 请尝试再次调用 API。|
| REFUNDNOTEXIST| 退款订单查询失败 | 订单号错误或订单状态不正确 | 请检查订单号是否有误以及订单状态是否正确，如：未支付、已支付未退款 |
| INVALID_TRANSACTIONID | 无效 transaction_id | 请求参数未按指引进行填写 | 请求参数错误，检查原交易号是否存在或发起支付交易接口返回失败 |
| PARAM_ERROR | 参数错误 | 请求参数未按指引进行填写 | 请求参数错误，请检查参数再调用退款申请 |
| APPID_NOT_EXIST | APPID 不存在| 参数中缺少 APPID| 请检查 APPID 是否正确|
| MCHID_NOT_EXIST | MCHID 不存在| 参数中缺少 MCHID| 请检查 MCHID 是否正确|
| REQUIRE_POST_METHOD | 请使用 post 方法 | 未使用 post 传递参数 | 请检查请求参数是否通过 post 方法提交 |
| SIGNERROR | 签名错误 | 参数签名结果不正确 | 请检查签名参数和方法是否都符合签名算法要求 |
| XML_FORMAT_ERROR| XML 格式错误| XML 格式错误| 请检查 XML 参数格式是否正确|
