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中文本数据翻页(留言本翻页)
Oct 09 PHP
PHP 处理图片的类实现代码
Oct 23 PHP
php 错误处理经验分享
Oct 11 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
phplot生成图片类用法详解
Jan 06 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP多进程编程实例详解
Jul 19 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP数组array类常见操作示例
May 15 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图片加水印原理(超简单的实例代码)
2013/01/18 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python的re模块使用方法详解
2019/07/26 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
大学迎新晚会主持词
2014/03/24 职场文书
学习雷锋倡议书
2014/04/15 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
教学督导岗位职责
2015/04/10 职场文书
保护校园环境倡议书
2015/04/28 职场文书
工程服务质量承诺书
2015/04/29 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python