申请退款

更新时间:2023.12.07

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

注意

  1. 交易时间超过一年的订单无法提交退款
  2. 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
  3. 请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次
  4. 每个支付订单的部分退款次数不能超过50次
  5. 如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败
  6. 申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果
  7. 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
  8. 一个月之前的订单申请退款频率限制为:5000/min
  9. 同一笔订单多次退款的请求需相隔1分钟

# 接口说明

支持商户: 【普通商户】

请求URL: "https://api.mch.weixin.qq.com/v3/refund/domestic/refunds"

请求方式: 【POST】

接口频率: 150qps

# 请求参数

    Header HTTP头参数
  • Authorization 必填 string
    请参考 签名认证 生成认证信息
  • Accept 必填 string
    请设置为 application/json
  • Content-Type 必填 string
    请设置为 application/json
    Body 包体参数
  • transaction_id 选填 string(32)
    【微信支付订单号】 原支付交易对应的微信订单号,与out_trade_no二选一
  • out_trade_no 选填 string(32)
    【商户订单号】 原支付交易对应的商户订单号,与transaction_id二选一
  • out_refund_no 必填 string(64)
    【商户退款单号】 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
  • reason 选填 string(80)
    【退款原因】 若商户传入,会在下发给用户的退款消息中体现退款原因
  • notify_url 选填 string(256)
    【退款结果回调URL】 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的URL,不能携带参数。 如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效,优先回调当前传的这个地址。
  • funds_account 选填 string
    【退款资金来源】 若传递此参数则使用对应的资金账户退款,否则默认使用未结算资金退款(仅对老资金流商户适用)
    可选取值:
    • AVAILABLE: 仅对老资金流商户适用,指定从可用余额账户出资
  • amount 必填 AmountReq
    【金额信息】 订单金额信息
    • 属性
  • goods_detail 选填 array
    【退款商品】 指定商品退款需要传此参数,其他场景无需传递
    • 数组

# 应答参数

    200OK
  • refund_id 必填 string(32)
    【微信支付退款号】 微信支付退款号
  • out_refund_no 必填 string(64)
    【商户退款单号】 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
  • transaction_id 必填 string(32)
    【微信支付订单号】 微信支付交易订单号
  • out_trade_no 必填 string(32)
    【商户订单号】 原支付交易对应的商户订单号
  • channel 必填 string
    【退款渠道】 退款渠道
    可选取值:
    • ORIGINAL: 原路退款
    • BALANCE: 退回到余额
    • OTHER_BALANCE: 原账户异常退到其他余额账户
    • OTHER_BANKCARD: 原银行卡异常退到其他银行卡
  • user_received_account 必填 string(64)
    【退款入账账户】 取当前退款单的退款入账方,有以下几种情况:
    1)退回银行卡:{银行名称}{卡类型}{卡尾号}
    2)退回支付用户零钱:支付用户零钱
    3)退还商户:商户基本账户商户结算银行账户
    4)退回支付用户零钱通:支付用户零钱通
  • success_time 选填 string(64)
    【退款成功时间】 退款成功时间,退款状态status为SUCCESS(退款成功)时,返回该字段。遵循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秒。
  • create_time 必填 string(64)
    【退款创建时间】 退款受理时间,遵循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秒。
  • status 必填 string
    【退款状态】 退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往商户平台(pay.weixin.qq.com)-交易中心,手动处理此笔退款。
    可选取值:
    • SUCCESS: 退款成功
    • CLOSED: 退款关闭
    • PROCESSING: 退款处理中
    • ABNORMAL: 退款异常
  • funds_account 选填 string
    【资金账户】 退款所使用资金对应的资金账户类型
    可选取值:
    • UNSETTLED: 未结算资金
    • AVAILABLE: 可用余额
    • UNAVAILABLE: 不可用余额
    • OPERATION: 运营户
    • BASIC: 基本账户(含可用余额和不可用余额)
    • ECNY_BASIC: 数字人民币基本账户
  • amount 必填 Amount
    【金额信息】 金额详细信息
    • 属性
  • promotion_detail 选填 array
    【优惠退款信息】 优惠退款信息
    • 数组

请求示例

1{
2 "transaction_id": "1217752501201407033233368018",
3 "out_refund_no": "1217752501201407033233368018",
4 "reason": "商品已售完",
5 "notify_url": "https://weixin.qq.com",
6 "funds_account": "AVAILABLE",
7 "amount": {
8 "refund": 888,
9 "from": [
10 {
11 "account": "AVAILABLE",
12 "amount": 444
13 }
14 ],
15 "total": 888,
16 "currency": "CNY"
17 },
18 "goods_detail": [
19 {
20 "merchant_goods_id": "1217752501201407033233368018",
21 "wechatpay_goods_id": "1001",
22 "goods_name": "iPhone6s 16G",
23 "unit_price": 528800,
24 "refund_amount": 528800,
25 "refund_quantity": 1
26 }
27 ]
28}

应答示例

1{
2 "refund_id": "50000000382019052709732678859",
3 "out_refund_no": "1217752501201407033233368018",
4 "transaction_id": "1217752501201407033233368018",
5 "out_trade_no": "1217752501201407033233368018",
6 "channel": "ORIGINAL",
7 "user_received_account": "招商银行信用卡0403",
8 "success_time": "2020-12-01T16:18:12+08:00",
9 "create_time": "2020-12-01T16:18:12+08:00",
10 "status": "SUCCESS",
11 "funds_account": "UNSETTLED",
12 "amount": {
13 "total": 100,
14 "refund": 100,
15 "from": [
16 {
17 "account": "AVAILABLE",
18 "amount": 444
19 }
20 ],
21 "payer_total": 90,
22 "payer_refund": 90,
23 "settlement_refund": 100,
24 "settlement_total": 100,
25 "discount_refund": 10,
26 "currency": "CNY"
27 },
28 "promotion_detail": [
29 {
30 "promotion_id": "109519",
31 "scope": "SINGLE",
32 "type": "DISCOUNT",
33 "amount": 5,
34 "refund_amount": 100,
35 "goods_detail": {
36 "merchant_goods_id": "1217752501201407033233368018",
37 "wechatpay_goods_id": "1001",
38 "goods_name": "iPhone6s 16G",
39 "unit_price": 528800,
40 "refund_amount": 528800,
41 "refund_quantity": 1
42 }
43 }
44 ]
45}

# 错误码

# 公共错误码

状态码 错误码 描述 解决方案
400 PARAM_ERROR 参数错误 请根据错误提示正确传入参数
400 INVALID_REQUEST HTTP 请求不符合微信支付 APIv3 接口规则 请参阅 接口规则
401 SIGN_ERROR 验证不通过 请参阅 签名常见问题
500 SYSTEM_ERROR 系统异常,请稍后重试 请稍后重试

# 业务错误码

状态码 错误码 描述 解决方案
400 INVALID_REQUEST 请求参数符合参数格式,但不符合业务规则 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。
400 PARAM_ERROR 参数错误 请求参数错误,请重新检查再调用申请退款接口
401 SIGN_ERROR 签名错误 请检查签名参数和方法是否都符合签名算法要求
403 NO_AUTH 没有退款权限 此状态代表退款申请失败,请检查是否有该笔订单的退款权限
403 NOT_ENOUGH 余额不足 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。
403 USER_ACCOUNT_ABNORMAL 退款请求失败 此状态代表退款申请失败,商户可自行处理退款。
404 MCH_NOT_EXISTS MchID不存在 请检查MchID是否正确
404 RESOURCE_NOT_EXISTS 订单号不存在 请检查你的订单号是否正确且是否已支付,未支付的订单不能发起退款
429 FREQUENCY_LIMITED 频率限制 该笔退款未受理,请降低频率后重试
500 SYSTEM_ERROR 系统超时 请不要更换商户退款单号,请使用相同参数再次调用API。
反馈
咨询
目录