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文件
Jan 04 PHP
php实现的MySQL通用查询程序
Mar 11 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
php数组去除空值函数分享
Feb 02 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
PHP7变量处理机制修改
Mar 09 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/04/17 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
一份python入门应该看的学习资料
2018/04/11 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python 画函数曲线示例
2019/12/04 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
医学专业个人求职自荐信格式
2013/09/23 职场文书
酒店管理专业学生求职信
2013/09/27 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
秋天的雨教学反思
2014/04/27 职场文书
教研活动总结
2014/04/28 职场文书
超市商业计划书
2014/05/04 职场文书
社团活动总结书
2014/06/27 职场文书
个人自查自纠材料
2014/10/14 职场文书
先进班集体申报材料
2014/12/26 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
部门主管竞聘书
2015/09/15 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电