完整的退款逻辑
更新时间:2025.02.19微信支付提供了两个退款API,一个用于退款提交,另一个用于退款查询,强烈建议机构根据以下指引完善退款逻辑,以防止用户投诉的产生。
退款资金不足
业务场景
每一个mch_id(机构商户号或直连商户商户号)申请成功后都有两个资金池,CNY资金池和结算货币资金池。由于微信跨境支付的用户都是持有大陆身份证的中国用户,故T日的交易资金都以人民币的形式存储在CNY资金池内。
T+1日,所有CNY资金池内的资金都会换汇为结算外币资金存储到结算币种资金池内。该操作每个自然日都会进行,且不受T日总交易金额影响。结算币种资金池的资金一旦达到800USD,微信支付即会向机构或直连商户的银行账户发起付款。
由于退款需要给用户退人民币,故只能使用CNY资金池的资金。因此要求机构或直连商户每天都要有新的交易发生才能发起退款。
解决方案
当遇到退款请求返回NOT ENOUGH时,即表示当前CNY资金池账户余额不足。建议机构或直连商户在间隔一段时间后重试。重试间隔要根据机构或商户的日常交易量大小及当前退款金额的大小来决定。
对于机构,由于会二次封装接口提供给子商户,建议将重试逻辑封装在机构层,即子商户发起退款请求后,由机构层受理来发起重试。
查询退款
业务场景
微信的退款结果采用异步的方式进行同步,所以这里提供了两个接口:提交退款接口以及查询退款接口。提交退款接口所返回的结果仅代表该次退款请求是否受理成功,由于本身退款的结果部分依赖于用户支付卡银行的处理,所以最终退款结果是否成功还需要通过查询退款接口来确认。
解决方案
商户或机构系统需要在提交退款后,在一定时间段内轮询查询退款结果。轮询时间可参考以下退款处理时间说明:
如果当前订单是使用微信零钱/零钱通支付,则退款会在20分钟内处理完毕,通常都可在1分钟内处理完毕。
如果当前订单是使用绑定银行卡支付,则退款处理需要0-5个工作日完成。对于一般银行,基本都可在退款提交的当日完成,但某些地方性银行可能处理时间较长,部分可能会达到5个工作日。
建议机构或商户可根据以上退款周期来设置退款查询时间。通常24小时内的查询可以覆盖99%的退款。
注意:对于pos机具或线上应用的前端展示,建议在发起退款后直接将业务受理结果同步到前端。尤其对于线下支付场景,用户无法在门店一直等待退款最终结果的同步,可以先将受理结果同步给用户,并告知后续关注微信支付下发的退款成功通知。
退款重试逻辑
业务场景
微信支付在收到退款请求后会对退款金额,已退金额及订单金额进行核验,以保证退款总额不会大于交易金额。但机构或商户在做部分退款时,一定要注意避免在退款受理结果不明确的情况下,就更换退款单号重试的操作。
解决方案
微信支付会将不同的退款单号认定为不同的退款,即使两笔退款发生在同一笔交易下。因此在部分退款场景下,收到不明确的退款请求结果后,使用原退款单号进行重试,切勿更换单号。