# 退款

接口应在服务器端调用,不可在前端(小程序、网页、APP等)直接调用,具体可参考接口调用指南

接口英文名:refundOrder

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

# 1. 调用方式

# HTTPS 调用

POST https://api.weixin.qq.com/retail/B2b/refund?access_token=ACCESS_TOKEN

# 云调用

  • 本接口不支持云调用。

# 第三方调用

  • 本接口支持第三方平台代商家调用。

  • 该接口所属的权限集 id 为:158

  • 服务商获得其中之一权限集授权后,可通过使用 authorizer_access_token 代商家进行调用,具体可查看 第三方调用 说明文档。

# 2. 请求参数

# 查询参数 Query String Parameters

参数名类型必填示例说明
access_tokenstringACCESS_TOKEN接口调用凭证,可使用 access_tokenauthorizer_access_token

# 请求体 Request Payload

参数名类型必填示例说明
mchidstring1230000109微信商户号。长度限制[1,32]。由微信支付生成并下发的商户号。
out_trade_nostring1217752501201407033233368018商户订单号。长度限制[6,32]。原支付交易对应的商户订单号。商户订单号和B2b支付订单号必填其一
order_idstringo202307291423123564754773B2b支付订单号。长度限制[1,32]。原支付交易对应的B2b支付订单号。商户订单号和B2b支付订单号必填其一
out_refund_nostring12177525012014070332321235商户退款单号。长度限制[6, 32] 。商户系统内部退款单号,商户系统内部唯一,只能是数字、大小写字母_-*,同一退款单号多次请求只退一笔。
refund_amountnumber888退款金额。单位为分,只能为整数,不能超过原订单支付金额。
refund_fromnumber1退款来源,枚举值 1:人工客服退款 2:用户自己退款 3:其他
refund_reasonnumber3退款原因。枚举值 0:暂无描述 1:产品问题 2:售后问题 3:意愿问题 4:价格问题 5:其他原因
descriptionstring抱枕退款商品描述。长度限制[1,127]

# 3. 返回参数

# 返回体 Response Payload

参数名类型示例说明
refund_idstringr202307281444591411763685B2b支付退款单号。长度限制[1, 32]
out_refund_nostring12177525012014070332321235商户退款单号。长度限制[6, 32]。户系统内部退款单号,商户系统内部唯一,只能是数字、大小写字母_-*,同一退款单号多次请求只退一笔。
order_idstringo202307291423123564754773B2b支付订单号。长度限制[1,32]。原支付交易对应的B2b支付订单号
out_trade_nostringo202307291423123564754773商户订单号。长度限制[1,32]。原支付交易对应的B2b支付订单号
errcodenumber0错误码
errmsgstringok错误信息

# 4. 注意事项

pay_sig的计算用现网AppKey

a、订单如需多次退款,同笔订单发起退款的间隔须大于一分钟

b、退款接口只是发起退款请求,不表示退款成功,请2分钟后调用退款查询结果轮询退款状态

# 退款通知

通过消息推送功能发送给业务方服务器,业务方按照消息推送的要求回复,否则会认为通知失败。通知失败后会按照一定的策略重新发起通知,以尽可能通知到商户,但并不保证通知最终能成功。(通知重试频率为10s, 30s, 60s, 5min, 15min, 30min, 60m, 3h, 6h, 12h)

通知参数

参数名 变量 类型[长度限制] 必填 描述
小程序原始ID ToUserName string 小程序原始ID
事件消息openid FromUserName string 微信官方的openid。示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
消息发送时间 CreateTime int64 消息发送时间戳。示例值:1698643478
消息类型 MsgType string 消息类型,固定为event。示例值:event
事件类型 Event string 事件类型,固定为retail_refund_notify。示例值:retail_refund_notify
小程序ID appid string[1,32] 商户申请的小程序对应的appid。示例值:wx8888888888888888
微信商户号 mchid string[1,32] 由微信支付生成并下发的商户号。示例值:1230000109
商户退款单号 out_refund_no string[6, 32] 商户系统内部退款单号,商户系统内部唯一,只能是数字、大小写字母_-*,同一退款单号多次请求只退一笔。示例值:12177525012014070332321235
B2b支付退款单号 refund_id string[1, 32] B2b支付退款单号。示例值:r202307281444591411763685
商户订单号 out_trade_no string[6,32] 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一。示例值:1217752501201407033233368018
B2b支付订单号 order_id string[1,32] B2b支付生成的订单号。示例值:o202307291423123564754773
退款金额 refund_amount int64 退款金额,单位为分,只能为整数,不能超过原订单支付金额。示例值:888
订单总金额 order_amount int64 订单总支付金额,单位为分。示例值:1300
退款来源 refund_from string 退款来源,枚举值 1:人工客服退款 2:用户自己退款 3:其他。示例值:1
退款原因 refund_reason string 退款原因,枚举值 0:暂无描述 1:产品问题 2:售后问题 3:意愿问题 4:价格问题 5:其他原因。示例值:3
退款创建时间 create_time string[1, 32] 退款受理时间,标准北京时间,时区为东八区,格式为yyyy-MM-dd HH:mm:ss。示例值:2023-07-30 17:04:23
退款成功时间 refund_time string[1, 32] 退款成功时间,当退款状态为退款成功时有返回,标准北京时间,时区为东八区,格式为yyyy-MM-dd HH:mm:ss。示例值:2023-07-30 17:04:28
退款状态 refund_status string[1, 32] 仅退款成功或失败时通知,枚举值:REFUND_SUCC:退款成功;REFUND_FAIL:退款失败;示例值:REFUND_SUCC
微信支付退款单号 wxpay_refund_id string[1, 32] 微信支付退款单号。示例值:1235481444591411763685
订单环境 env int32 订单环境 0:正式环境 1:沙箱环境。示例值:0
交易渠道类型 pay_channel int32 交易渠道类型 0:微信支付 1:银行转账。示例值:0
退款说明 refund_desc string[1, 256] 退款说明。示例值:账户资金不足,请待充足后重新发起

通知示例

{
  "ToUserName": "gh_xxxxx",
  "FromUserName": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
  "CreateTime": "1741168258",
  "MsgType": "event",
  "Event": "retail_refund_notify",
  "appid": "wx8888888888888888",
  "mchid": "1230000109",
  "out_refund_no": "12177525012014070332321235",
  "refund_id": "r202307281444591411763685",
  "out_trade_no": "1217752501201407033233368018",
  "order_id": "o202307291423123564754773",
  "refund_amount": 1,
  "order_amount": 1000,
  "refund_from": "REFUND_FROM_USER",
  "refund_reason": "REFUND_REASON_WILLING",
  "create_time": "2025-03-05 17:50:50",
  "refund_time": "2025-03-05 17:50:53",
  "refund_status": "REFUND_SUCC",
  "wxpay_refund_id": "50302002662025030599670471876",
  "env": 0,
  "pay_channel": 0,
  "refund_desc": "", 
}

应答参数

  1. 直接回复success(推荐方式)
  2. 直接回复空串(指字节长度为0的空字符串,而不是结构体中content字段的内容为空)

# 5. 代码示例

请求示例

{
  "mchid": "1230000109",
  "out_trade_no": "1217752501201407033233368018",
  "out_refund_no": "12177525012014070332321235",
  "refund_amount": 1,
  "refund_from": 2,
  "refund_reason": 3
}

返回示例

{
  "refund_id": "r202307281444591411763685",
  "out_refund_no": "12177525012014070332321235",
  "order_id": "o202307291423123564754773",
  "out_trade_no": "1217752501201407033233368018",
  "errcode": 0,
  "errmsg": OK
}

# 6. 错误码

以下是本接口的错误码列表,其他错误码可参考 通用错误码;调用接口遇到报错,可使用官方提供的 API 诊断工具 辅助定位和分析问题。

错误码错误描述解决方案
10604单笔订单的退款频率过高在一分钟内只能发起一次退款,请稍后重试
9403200参数为空或不合法。按照文档要求传参,根据返回的具体错误描述检查参数
9403201数据不存在订单不存在,请检查入参
9403202退款单已受理请调用查询退款接口确认退款请求
9403203建档未完成,还不能发起支付或退款请完成建档签约流程
9403205订单无法退款(订单状态不对或超过160天)请检查订单状态或订单时间
9403206退款状态未知,请商户2分钟后主动查询退款状态请2分钟后调用查询退款接口确认退款状态
9403208该订单正在退款中,请等待退款完成再发起新的退款请等待退款完成再发起新的退款
9403209不允许结算前退款请等待订单结算后再退款

# 7. 适用范围

本接口暂未明确可调用账号类型,或在业务中根据调用传参自行确定是否可调用,请以实际调用情况为准。