微信支付退款最佳实践
更新时间:2025.05.22一、概述
对微信支付订单退款,需严格遵循官方文档规范,确保资金安全。商户需通过回调通知和查询单笔退款接口获取退款单的最新状态,再根据获取的状态来做不同的业务逻辑处理。
二、退款处理流程
1、 前置条件校验
● 只有通过查询订单状态接口,查询到订单状态为“SUCCESS支付成功”时,才可发起退款。
● 订单只能在支付后1年内(支付时间+365天)发起退款,超出时间的订单,无法退款;
● 订单可选择全额退款或部分退款(最多支持50次部分退款)。
2、发起退款
调用申请退款API,发起退款请求,若接口应答不为“200 OK”,需先调用查询单笔退款接口确认退款单是否受理,再根据接口返回的错误码和错误码描述处理业务逻辑。
● 若受理成功,查询单笔退款接口会返回微信支付退款单号等字段信息,再根据查询的状态来处理;(如果退款单不是CLOSED状态,则退款请求已经被受理)
● 如受理失败,查询单笔退款接口会返回“RESOURCE_NOT_EXISTS 退款单不存在”,请使用原单原参数重试(原单不换参数重试,是安全且幂等的,不会发起重复退款)。
退款接口常见错误码:
状态码 | 错误码 | 描述 | 解决方案 |
400 | INVALID_REQUEST | 请求参数符合参数格式,但不符合业务规则 | 此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理 |
401 | SIGN_ERROR | 签名错误 | 请检查签名参数和方法是否都符合签名算法要求,参考:如何签名和验签 |
403 | NOT_ENOUGH | 余额不足 | 此状态代表退款申请失败,商户账户余额不足,请充值后,原单原参数重试 |
403 | USER_ACCOUNT_ABNORMAL | 退款请求失败 | 用户账号注销,此状态代表退款申请失败,商户可自行处理退款 |
404 | MCH_NOT_EXISTS | MCHID不存在 | 请检查商户号是否正确,商户号获取方式请参考开发必要参数说明 |
404 | RESOURCE_NOT_EXISTS | 退款单不存在 | 请检查你的订单号是否正确且是否已支付,未支付的订单不能发起退款 |
429 | FREQUENCY_LIMITED | 频率限制 | 该笔退款未受理,请降低频率后原单原参数重试 |
500 | SYSTEM_ERROR | 系统超时 | 请使用原单原参数重试 |
|
3、 确认退款结果
发起退款请求后,可通过以下两种方式确认退款状态:
● 回调通知:退款处理完成后,微信支付会通过回调通知返回退款结果。
● 主动查询:若未收到回调, 推荐每间隔1分钟调用查询单笔退款接口查询一次退款状态,若超过5分钟仍是退款处理中状态,建议开始逐步衰减查询频率(比如之后间隔5分钟、10分钟、20分钟、30分钟……查询一次)。
退款单状态,可以参考:
三、 退款异常处理流程
若用户账户异常(如银行卡冻结)会导致退款失败,查询单笔退款接口会返回ABNORMAL(退款异常)。此时,商户可选择退款至用户其他银行账户或退款至交易商户银行账户,再由商户退款给用户。
● 手动处理:登录【服务商平台 -> 交易中心】人工审核退款。参考:平台退款指引
● 接口调用: 通过发起异常退款API接口处理异常退款。