微信号:C_programming

介绍:移动互联网支付技术和解决方案...

微信支付退款接口详解

2016-02-26 18:29 JeffChen


微信支付有2个退款相关的接口,分别是申请退款API和查询退款API,这2个接口在实际微信支付开发中都会用到。其中申请退款API因为安全性,需要使用证书,证书在商户平台后台下载.


申请退款接口支持一年以内的订单退款,可以分批退款,每个批次的退款订单号要不一样,分批退款的总金额不能超过原订单金额.


接口本身没有批量退款的能力,但是从程序的角度只要循环调用申请退款接口就可以了.


通常的流程是如上图所示:

1. 第一步营业员在POS端(收银软件端)发起退款请求,请求发送到商户的后台,通常是POS厂商或者微信支付服务商的后台。


2. 商户后台收到POS端发来的请求以后,根据微信支付的接口,向微信支付后台发起退款请求,具体接口见这里


3. 微信支付后台会处理退款请求,然后回复结果给商户的后台,返回结果的描述也在这个页面


4.1  商户后台如果收到微信支付退款成功(result_code是SUCCESS),那么返回退款成功的结果给POS端,整个流程结束


4.2  商户后台如果收到退款结果是失败(result_code是FAIL),如果err_code是SYSTEMERROR,那么用相同的参数再次调用申请退款API(回到第二步),如果是其他err_code,直接返回POS端退款失败


5. 商户后台如果没有收到退款的结果(由于丢包或者微信支付服务器异常),那么商户后台应该调用查询退款接口,接口文档在这里,调用查询退款接口时,使用微信订单号或者商户订单号或者商户退款单号,不要使用微信退款单号.


6. 微信支付后台会立即返回此笔订单的退款状态给商户的后台,result_code是SUCCESS代表退款受理成功,result_code是FAIL代表不成功,退款的状态(refund_status)有以下几种需要分别处理:

    a. SUCCESS 退款成功,此时result_code是SUCCESS

    b. FAIL,说明退款失败, 商户用原来的退款订单号重新发起退款,回到第二步

    c. PROCESSING 说明退款处理中,可以返回给POS端退款成功。微信支付后台会保证退款成功,如果商户金额不够的话,微信支付后台会定时重试,直到钱够退款并且退款成功为止.

    d. NOTSURE表示未确定,表示需要商户用原来的退款订单号重新发起,也就是第二步用一样的退款订单号重新发起

    e. CHANGE 表示用户退款给用户银行时,发现用户的卡作废或者冻结了,这时候钱会还给商户,那就需要商户人工操作,通过线下或者财付通转账的方式退款


另外,微信支付申请退款支持重入,可以用同一个订单号再次发起退款,如果订单在退款中还是返回成功,如果订单已经完成退款,那么返回错误.


 
移动开发技术 更多文章 #推荐第一篇# 你问大家答 你问我答 实际小问题答案 抵挡不住的诱惑 新百伦3折包邮
猜您喜欢 关于手机的5大谣言,你被忽悠过么? 所以你想成为一名前端开发者 高性能分布式Mock平台的框架与设计 我为什么在22岁辞去年薪150万的工作?【热文】 微信iOS9适配总结