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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
如何用php获取文件名后缀
Jun 09 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
php数组函数array_walk用法示例
May 26 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
laravel按天、按小时,查询数据的实例
Oct 09 PHP
php桥接模式应用案例分析
Oct 23 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 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 字符串替换的方法
2012/01/10 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
实例讲解React 组件
2020/07/07 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
详解django中自定义标签和过滤器
2017/07/03 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
软件工程师面试题
2012/06/25 面试题
自荐信的两点禁忌
2013/10/30 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
2014年国庆节寄语
2014/09/19 职场文书
钳工实训报告总结
2014/11/04 职场文书
教师思想工作总结2015
2015/05/13 职场文书
党员心得体会范文2016
2016/01/23 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android