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 相关文章推荐
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
基于php权限分配的实现代码
Apr 28 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
PHP PDOStatement::fetch讲解
Jan 31 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绘制一个矩形的方法
2015/01/24 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
详解Python中的正则表达式的用法
2015/04/09 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
PyQt5每天必学之组合框
2018/04/20 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
小学优秀班主任材料
2014/12/17 职场文书
2014年党小组工作总结
2014/12/20 职场文书
工作自我评价范文
2015/03/05 职场文书
工作自我评价范文
2019/03/21 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python