微信支付退款最佳实践

更新时间: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接口处理异常退款。