Thinkphp 5.0实现微信企业付款到零钱


Posted in PHP onSeptember 30, 2018

本文实例为大家分享了Thinkphp 5.0 微信企业付款到零钱的具体代码,供大家参考,具体内容如下

【微信支付】企业付款到零钱:官方文档

注意:1,证书路径一定要写绝对路径,且使用函数getcwd()。

Thinkphp 5.0实现微信企业付款到零钱

function transfer($data){
  //支付信息
  $wxchat['appid'] = WxPayConfig::$appid;
  $wxchat['mchid'] = WxPayConfig::$mchid;
  $webdata = array(
  'mch_appid' => $wxchat['appid'],//商户账号appid
    'mchid'  => $wxchat['mchid'],//商户号
  'nonce_str' => md5(time()),//随机字符串
    'partner_trade_no'=> date('YmdHis'), //商户订单号,需要唯一
  'openid' => $data['openid'],//转账用户的openid
  'check_name'=> 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
  'amount' => $data['money']*100, //付款金额单位为分
  'desc' => '微信企业付款到零钱',//企业付款描述信息
  'spbill_create_ip' => request()->ip(),//获取IP
  );
  foreach ($webdata as $k => $v) {
  $tarr[] =$k.'='.$v;
  }
  sort($tarr);
  $sign = implode($tarr, '&');
  $sign .= '&key='.WxPayConfig::$key;
  $webdata['sign']=strtoupper(md5($sign));
  $wget = $this->ArrToXml($webdata);//数组转XML
  $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';//api地址
  $res = $this->postData($pay_url,$wget);//发送数据
  if(!$res){
  return array('status'=>1, 'msg'=>"Can't connect the server" );
  }
  $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
  if(strval($content->return_code) == 'FAIL'){
  return array('status'=>1, 'msg'=>strval($content->return_msg));
  }
  if(strval($content->result_code) == 'FAIL'){
  return array('status'=>1, 'msg'=>strval($content->err_code),':'.strval($content->err_code_des));
  }
  $rdata = array(
  'mch_appid'  => strval($content->mch_appid),
  'mchid'   => strval($content->mchid),
  'device_info'  => strval($content->device_info),
  'nonce_str'  => strval($content->nonce_str),
  'result_code'  => strval($content->result_code),
  'partner_trade_no' => strval($content->partner_trade_no),
  'payment_no'  => strval($content->payment_no),
  'payment_time'  => strval($content->payment_time),
  );
  return $rdata;
}
//数组转XML
 function ArrToXml($arr)
 {
  if(!is_array($arr) || count($arr) == 0) return '';
  $xml = "<xml>";
  foreach ($arr as $key=>$val)
  {
   if (is_numeric($val)){
    $xml.="<".$key.">".$val."</".$key.">";
   }else{
    $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
   }
  }
  $xml.="</xml>";
  return $xml;
 }
//发送数据
 function postData($url,$postfields){
  $ch = curl_init();
  $params[CURLOPT_URL] = $url; //请求url地址
  $params[CURLOPT_HEADER] = false; //是否返回响应头信息
  $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
  $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
  $params[CURLOPT_POST] = true;
  $params[CURLOPT_POSTFIELDS] = $postfields;
  $params[CURLOPT_SSL_VERIFYPEER] = false;
  $params[CURLOPT_SSL_VERIFYHOST] = false;
  //以下是证书相关代码
  $params[CURLOPT_SSLCERTTYPE] = 'PEM';
  $params[CURLOPT_SSLCERT] = getcwd().'/plugins/payment/weixin/cert/apiclient_cert.pem';//绝对路径
  $params[CURLOPT_SSLKEYTYPE] = 'PEM';
  $params[CURLOPT_SSLKEY] = getcwd().'/plugins/payment/weixin/cert/apiclient_key.pem';//绝对路径
  curl_setopt_array($ch, $params); //传入curl参数
  $content = curl_exec($ch); //执行
  curl_close($ch); //关闭连接
  return $content;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php实现的在线人员函数库
Apr 09 PHP
php foreach、while性能比较
Oct 15 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
php多进程应用场景实例详解
Jul 22 PHP
laravel 解决crontab不执行的问题
Oct 22 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
PHP命令行与定时任务
Apr 01 PHP
PHP使用函数用法详解
Sep 30 #PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 #PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 #PHP
PHP从尾到头打印链表实例讲解
Sep 27 #PHP
实现php删除链表中重复的结点
Sep 27 #PHP
浅析php如何实现爬取数据原理
Sep 27 #PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 #PHP
You might like
PHP简洁函数小结
2011/08/12 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
php制作简单模版引擎
2016/04/07 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
Python三元运算实现方法
2015/01/12 Python
Python中的rjust()方法使用详解
2015/05/19 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
Python面向对象进阶学习
2019/05/21 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
SQL面试题
2013/12/09 面试题
行政管理毕业生自荐信
2014/02/24 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
升职自荐信怎么写
2015/03/05 职场文书
2014年底个人工作总结
2015/03/10 职场文书
交通安全温馨提示语
2015/07/14 职场文书
关爱空巢老人感想
2015/08/11 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android
LeetCode189轮转数组python示例
2022/08/05 Python