游戏技术文章

浅析微信支付:申请退款、退款回调接口、查询退款

时间:2021-3-9 12:10:41  作者:棋牌资源网  来源:棋牌资源网 www.pahuai.com  查看:5033  评论:0
内容摘要:在实际场景中,申请退款和退款回调接口是比较常用到的微信支付接口,这里我们会讲 原路返回方式的退款,还有的是使用直接为用户 付款到零钱、 现金红包等方式来退款,此种情况主要会出现在客服退款时,不是全部退款的情况,也有的会出现在使用了 微信代金...
在实际场景中,申请退款和退款回调接口是比较常用到的微信支付接口,这里我们会讲 原路返回方式的退款,还有的是使用直接为用户 付款到零钱、 现金红包等方式来退款,此种情况主要会出现在客服退款时,不是全部退款的情况,也有的会出现在使用了 微信代金券-单品券的时候,因为单品券不能部分退款,所以只能走企业付款用户的方式,以下我们主要讲 原路返回退款。

PS:原路返回的意思就是,从你支付时的关联支付单中扣款,微信会记录相关数据,可以在客户端通知中展示。

1、申请退款接口

以下为微信官方的 申请退款文档:


  1. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4

1.1. 应用场景

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


  1. 注意:

  2. 1、交易时间超过一年的订单无法提交退款

  3. 2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号

  4. 3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150

  5. 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6

  6. 4、每个支付订单的部分退款次数不能超过50

PS:以上限制一般情况下不会出现,但我们也必须写入系统异常场景处理中,请求频率可以使用队列或增加延迟等方式来处理,部分退款此时不要超过微信的限制。

1.2. 接口链接


  1. https://api.mch.weixin.qq.com/secapi/pay/refund

1.3. 是否需要证书

请求需要双向证书。

PS:关于微信证书,可以在 [商户平台-账户中心-API安全] 去下载,此证书很多支付接口均需要使用,请将证书地址配置为常量,具体实现可以参考作者github源码。

1.4. 调用接口

先看源码

以上为sdk退款调用示例代码,有几个参数需要我们注意:

字段名 变量名 必填 类型 描述
微信订单号 transaction_id String(32) 微信生成的订单号,在支付通知中有返回
商户订单号 outtradeno String(32) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-
商户退款单号 outrefundno String(64) 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-
退款金额 refund_fee Int 退款总金额,订单总金额,单位为分,只能为整数
退款结果通知url notify_url String(256) 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数,如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。

PS:推荐以上的参数都必填, notify_url参数可配置为环境常量,根据环境的不同配置调用不会的回调地址。

下面为具体的实际sdk wxPay.refund

以上已经详细说明的具体的字段含义,有不明白的同学可以查看微信的官方文档,具体的源码可以查看作者的github。

这里有一个比较需要注意的点,在我们调用退款之后,会返回一些异常处理情况,官方文档中收录了一系列错误码code,我们可以在系统中对其进行处理,这里就不细说了。

2、退款回调接口

以下为微信官方的 退款结果通知文档:


  1. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10

2.1. 应用场景

当商户申请的退款有结果后,微信会把相关结果发送给商户,商户需要接收处理,并返回应答。 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。

(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

特别说明:退款结果对重要的数据进行了加密,商户需要用商户秘钥进行解密后才能获得结果通知的内容

2.2. 接口链接

在申请退款接口中上传参数“notify_url”以开通该功能 如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。


  1. 示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”

2.3. 解密方式


  1. 解密步骤如下:

  2. 1)对加密串Abase64解码,得到加密串B

  3. 2)对商户keymd5,得到32位小写key* ( key设置路径:微信商户平台-->账户设置-->API安全-->密钥设置 )

  4. 3)用key*对加密串BAES-256-ECB解密(PKCS7Padding

PS:特别注意,如果要进行微信AES解密,因为GJ的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。默认不允许256位密钥的AES加解密,解决方法就是修改策略文件,我们需要从官方网站下载无限制权限策略文件,注意自己JDK的版本别下错了。

jdk8的jce下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

将localpolicy.jar和USexportpolicy.jar这两个文件替换%JREHOME%\lib\security和%JDK_HOME%\jre\lib\security下原来的文件,注意先备份原文件。

如果是jdk8,可能会遇到安全目录下有 policy文件夹的情况,拿作者的电脑举例,jdk路径为 /opt/jdk1.8.0_152/jre/lib/security/policy,此目录下有两个子文件夹 limited、 limited,需要替换 limited文件夹下的文件 local_policy.jar、 US_export_policy.jar这两个,最好先备份哦~!!!替换后重启项目即可。

2.4. 调用接口

因为退款回调接口是咋们系统被动接收微信的消息,所以此处和支付回调接口一致,也是使用了流的方式,格式为xml

以上代码详细解释了如何接收微信回调数据和解码数据,具体的 AESUtil.decryptData(req_info)请参考作者源码,文末有地址,这里就不细讲了。

具体的退款接收参数请参考微信官方文档,需要注意的是 商户退款单号和 微信退款单号,此两个参数是修改和记录退款的必要凭证。

3、查询退款

以下为微信官方的 查询退款文档:


  1. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5

3.1. 应用场景

提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。

注意:如果单个支付订单部分退款次数超过20次请使用退款单号查询

3.2. 接口链接


  1. https://api.mch.weixin.qq.com/pay/refundquery

3.3. 是否需要证书

不需要

3.4. 调用接口

注意:当一个订单部分退款超过10笔后,商户用微信订单号或商户订单号调退款查询API查询退款时,默认返回前10笔和 total_refund_count(订单总退款次数)。商户需要查询同一订单下超过10笔的退款单时,可传入订单号及offset来查询,微信支付会返回offset及后面的10笔,以此类推。当商户传入的offset超过 total_refund_count,则系统会返回报错 PARAM_ERROR

举例:


  1. 一笔订单下的退款单有36笔,当商户想查询第25笔时,可传入订单号及offset=24,微信支付平台会返回第25笔到第35笔的退款单信息,或商户可直接传入退款单号查询退款

以下为调用方式

PS:微信订单号查询的优先级是: refundid > outrefundno > transactionid > outtradeno

需要注意的是,查询退款时,需要注意退款返回的错误码,如果出现错误,需要及时同步商户系统中的退款数据。

结语

以上为 申请退款、退款回调接口、查询退款相关的解释和源码,特别需要注意的是接收退款时的解密方式和替换安全文件

标签:微信支付退款 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2022 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved