原文:http://www.upwqy.com/details/19.html
1 微信退款官方文档
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_4&index=6
2 微信退款的实现过程
老板已经催促了好几个月了。今天实在是没有办法了,那就给他写了吧,原来没有写过退款 ,看文档还是看了很久的,虽然说官方给的demo 但是还是看一下比较好 就当是学习了嘛
好了,废话不多说 ,开始上菜 因为是第一次做退款 咱们还是直接用demo里面的代码
首先呢 导入类库
Loader::import(‘paywx.lib.WxPay‘, EXTEND_PATH, ‘.Api.php‘);
然后在demo里面找到refund.php 文件 可以看到里面有两种退款方式 一种是根据商户订单号退款 一种是根据微信订单号退款
咱们使用商户订单号退款 其实代码是基本是一样的 只是设置订单时参数不一样的而已
好了 上代码
public static function WxRefund($out_trade_no,$total_fee,$refund_fee){ if($out_trade_no){ $input = new \WxPayRefund(); $input->SetOut_trade_no($out_trade_no); $input->SetTotal_fee($total_fee*100); $input->SetRefund_fee($refund_fee*100); $input->SetOut_refund_no(\WxPayConfig::MCHID.date("YmdHis")); $input->SetOp_user_id(\WxPayConfig::MCHID); $param = \WxPayApi::refund($input); if($param[‘return_code‘] == ‘SUCCESS‘){ return true; } throw new Exception($param[‘return_msg‘]); } return true; }
我们可以看到 基本上时demo里面是一样的 那么我们为什么还要专门写出来呢,当然不是来显摆的啊。
虽然 是代码很简单 但是里面还是有坑的
第一 :看代码 其实订单金额和退款金额两个参数都 (*100),为什么呢,这就要看文档了。文档上说的这两个参数的单位是分。因为看文档没有看仔细 浪费了不少时间。直接使用订单金额 会报 订单金额和退款金额不一致的错误
第二:就是证书的路径问题。我不知道别人是怎么配置的 我这里电脑是Mac的直接使用demo里面的路径 在调用接口后 返回
curl出错,错误码:58
这样的错误 在网上查了很久 大多都是说在windows上使用绝对路径 ,在linux上使用相对路径 ,而Mac上应该也是使用相对路径 但是还是一直报错 ,我这里是使用的 TP5 ,demo是放在extend目录下面 ,我想是不是应该tp5的入口是public目录下 而extend不能直接访问 所以在使用相对路径是找不到路径的原因呢 ,然后就开始尝试把证书放址到public目录下 其实路径改为
getcwd().‘/cert/apiclient_cert.pem‘
结果竟然成功了。
但是感觉放置在public目录下 很不安全 但是暂时也没有别的办法了。只能先这样用着