thinkPHP实现微信支付之退款,附demo示例
此篇文章主要介绍了ThinkPHP6框架下整合微信支付之退款功能
手册里面有的东西不多介绍,请求参数、返回结果之类的请移步官方手册查看。本文主要是通过一个demo实例进行讲解微信支付退款接口。
手册地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4
注意:
交易时间超过一年的订单无法提交退款
微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次,错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
每个支付订单的部分退款次数不能超过50次
如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败
申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果。
双项证书这里要填物理路径,也就是绝对路径。
微信支付退款接口流程介绍:
将基本请求参数和随机字符串(见下文)写入到数组
生成签名(按照字典序排序)写入数组
将数组转为xml包
提交CURL请求(POST),必须携带双向证书。
微信返回数据
生成随机字符串方法和签名生成方法见下文微信支付类下载地址。
微信支付退款接口必填请求参数:
appid 公众号ID
mch_id 商户号
nonce_str 随机字符串
out_trade_no商户订单号、transaction_id微信支付订单号,二选一
out_refund_no 商户退款单号
refund_fee 退款金额(单位为分)
total_fee 标价金额(单位为分)
sign 签名
此方法一共涉及一个类文件,为WxPay(微信支付类),下载地址见下文。
// 退款 public function tuikuan(){ $content['order_sn'] = 'wx2021022653651423'; //商户订单号 $order['uid'] = '15564343543'; //商户退款单号 $order['refundMoney'] = '0.01'; //退款金额 单位为元 $order['amount'] = '9.9'; //订单金额 单位为元 // 实例化支付类,并传入参数 $wx = new WxPay(""); // 微信的金额单位为分,所以要乘100!!! $content =$wx->tuiKuan("{$order['order_sn']}","{$order['uid']}","{$order['refundMoney']}"*100,"{$order['amount']}"*100); // 判断是否退款成功 if($content['result_code']=="SUCCESS"){ echo "退款成功" . $content['refund_fee']/100 . "元"; } }