侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

PHP开发实现微信退款功能示例

微信(小程序)  /  管理员 发布于 7年前   185

本文实例讲述了PHP开发实现微信退款功能。分享给大家供大家参考,具体如下:

最近在调微信退款接口,发现有许多坑,更大家分享一下

① 要是在测试的时候,网页提示 curl 58 说明 证书的路径出现问题(这里要填物理路径,也就是绝对路径)
② 网页提示curl 52 说明你的证书引入少了,在官方的demo上只有两个证书 apiclient_cert.pem和 apiclient_key.pem  你还需要引入一个证书 rootca.pem,这个证书需要你登录到
你的商户平台上下载
③ 要是网页提示  "HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Jun 2017 08:08:01 GMT Content-Type: text/plain Content-Length: 852 Connection: keep-alive Keep-Alive: timeout=8
说明你的代码是没有问题的 ,应该是参数出错了 我之前错的地方是把 out_refund_no和 out_trade_no写的一样,微信官网上也是这样写的 ,但是就是出现问题,我把out_refund_no 修改了一下 发现可以了

注意:金额的单位是分

下面就是我写的接口

function Home_index() {  date_default_timezone_set("Asia/Shanghai");  $date = date("YmdHis");  $appid = "";  $mch_id = "";  $out_trade_no = "14487658021497944120";  $op_user_id = "";  $out_refund_no = $date;  $total_fee = "500";  $refund_fee = "500";//  $transaction_id = "4009542001201706206596667604";  $key = "";  $nonce_str = nonceStr();  $ref = strtoupper(md5("appid=$appid&mch_id=$mch_id&nonce_str=$nonce_str&op_user_id=$op_user_id"          . "&out_refund_no=$out_refund_no&out_trade_no=$out_trade_no&refund_fee=$refund_fee&total_fee=$total_fee"          . "&key=$key")); //sign加密MD5  $refund = array(  'appid' =>$appid, //应用ID,固定  'mch_id' => $mch_id, //商户号,固定  'nonce_str' => $nonce_str, //随机字符串  'op_user_id' => $op_user_id, //操作员  'out_refund_no' => $out_refund_no, //商户内部唯一退款单号  'out_trade_no' => $out_trade_no, //商户订单号,pay_sn码 1.1二选一,微信生成的订单号,在支付通知中有返回  // 'transaction_id'=>'1',//微信订单号 1.2二选一,商户侧传给微信的订单号  'refund_fee' => $refund_fee, //退款金额  'total_fee' => $total_fee, //总金额  'sign' => $ref//签名  );  $url = "https://api.mch.weixin.qq.com/secapi/pay/refund";  ; //微信退款地址,post请求  $xml = arrayToXml($refund);  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, $url);  curl_setopt($ch, CURLOPT_HEADER, 1);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //证书检查  if ($useCert == true) {    // 设置证书    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');    curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . '/WxPay/cert/apiclient_cert.pem');    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');    curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . '/WxPay/cert/apiclient_key.pem');    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/WxPay/cert/rootca.pem');  }  curl_setopt($ch, CURLOPT_POST, 1);  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  $xml = curl_exec($ch);  // 返回结果0的时候能只能表明程序是正常返回不一定说明退款成功而已  if ($xml) {    curl_close($ch);    // 把xml转化成数组    libxml_disable_entity_loader(true);    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);//    var_dump($xmlstring);    $result['errNum'] = 0;    $result['info'] = object_to_array($xmlstring);//    var_dump($result);    return $result;  } else {    $error = curl_errno($ch);    curl_close($ch);    // 错误的时候返回错误码。    $result['errNum'] = $error;    return $result;  }}function arrayToXml($arr) {  $xml = "";  foreach ($arr as $key => $val) {    if (is_array($val)) {      $xml .= "<" . $key . ">" . arrayToXml($val) . "";    } else {      $xml .= "<" . $key . ">" . $val . "";    }  }  $xml .= "";  return $xml;}function object_to_array($obj) {  $obj = (array) $obj;  foreach ($obj as $k => $v) {    if (gettype($v) == 'resource') {      return;    }    if (gettype($v) == 'object' || gettype($v) == 'array') {      $obj[$k] = (array) object_to_array($v);    }  }  return $obj;}function nonceStr() {  $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  $str = "";  $length = 32;  for ($i = 0; $i < $length; $i++) {    $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);  }  // 随机字符串  return $str;}Home_index();

赶快添加到你的项目中去吧

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK)流程教程详解
  • PHP实现微信申请退款流程实例代码
  • php实现微信支付之退款功能
  • PHP实现微信退款功能
  • PHP实现微信申请退款功能
  • PHP实现QQ、微信和支付宝三合一收款码实例代码
  • PHP编程实现微信企业向用户付款的方法示例
  • php实现微信支付之企业付款
  • php实现微信企业付款到个人零钱功能
  • php微信公众号开发之微信企业付款给个人
  • PHP实现微信退款的方法示例


  • 上一条:
    PHP写微信公众号文章页采集方法
    下一条:
    PHP微信企业号开发之回调模式开启与用法示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 微信模板消息改版后发送规则记录(微信订阅消息参数值内容限制说明)(1个评论)
    • 微信支付v3对接所需工具及命令(0个评论)
    • 2023年9月1日起:微信小程序必须备案才能上线运营(0个评论)
    • 腾讯官方客服回应了:微信好友上限约10000个!(1个评论)
    • 2023年做微信小程序的老铁注意:新增收费项、微信小程序获取手机号也收费了(2个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客