首页
时事
归档
壁纸
更多
留言
关于
邻里
Search
1
使用必应Bing每日图片做网站背景(自动)
2,810 阅读
2
vue的输入值校验规则整理
1,443 阅读
3
好站推荐-https://wangchujiang.com/linux-command/
1,391 阅读
4
微信支付开发前准备(小程序、公众号、App、H5)
1,391 阅读
5
VUE `ERR_CONNECTION_TIMED_OUT`的解决办法
1,321 阅读
文章
图说
代码
吐槽
登录
Search
标签搜索
Linux
laravel
windows
TYPO3
php
shell脚本
git
微信
好站
vue
第三方登录
centos
linxu
centos7
thinkPHP
微信支付
api
MySQL
桌面
必应首图
Beer
累计撰写
114
篇文章
累计收到
21
条评论
首页
栏目
文章
图说
代码
吐槽
页面
时事
归档
壁纸
留言
关于
邻里
搜索到
59
篇与
代码
的结果
2020-04-04
如何在TYPO3版本9.5中创建sitemap.xml
安装扩展首先,需要安装扩展 seo ,这个扩展从 TYPO3 9.5 版本开始已经集成,只要成功安装TYPO3就可以自动加载使用了。集成扩展然后,需要将静态 TypoScript 模板包括到网站的主模板中。最好在根页面上使用,除非有特殊情况。执行以上操作后,通过以下形式连接就可以看到生成的站点地图了: https://www.yourdomin.cn/?type=1533906435如:本站的站点地图是: https://www.whongbin.cn/?type=1533906435效果预览官方文档此处在TYPO3官方文档中对整个内容进行了说明:https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/XmlSitemap/Index.html创建 domin.cn/sitemap.xml 格式官方文档中并没有提供有关如何创建格式为 domain.cn/sitemap.xml 格式的网址的更多详细信息。但是在一些聚合站点上,使用这种格式的站点地图还是占大多数,由此,我分享一个简单的方法以解决这个问题:创建路由打开 站点 选项,创建一个名称为 sitemap.xml 的新静态路由即可。现在,在浏览器中通过这种格式 https://domin.cn/sitemap.xml 就可以查看站点地图或站点地图索引了!如:本站的站点地图是: https://www.whongbin.cn/sitemap.xml
2020年04月04日
455 阅读
0 评论
0 点赞
2020-03-24
nginx配置站点强制跳转到 https://www
前言当前一些主流的浏览器会自动解析www域名指向不带www的域名,但是有时候我们并不想让他这样做,所以就需要做下相应的配置.代码在需要强制域名跳转的虚拟主机配置文件中做如下修改即可实现 server { listen 80; server_name xxx.cn; rewrite ^(.*)$ https://www.${server_name}$1 permanent; } server { listen 80; server_name www.xxx.cn; rewrite ^(.*)$ https://${server_name}$1 permanent; } server { listen 443; ssl on; server_name xxx.cn; rewrite ^(.*)$ https://www.${server_name}$1 permanent; ssl_certificate /etc/nginx/cert/xxxxxxx.pem; ssl_certificate_key /etc/nginx/cert/xxxxxxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; } server { listen 443; server_name www.xxx.cn; ssl on; root /xxxx/public; # Add index.php to the list if you are using PHP index index.php index.htm index.html; ssl_certificate /etc/nginx/cert/xxxxxxx.pem; ssl_certificate_key /etc/nginx/cert/xxxxxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
2020年03月24日
427 阅读
0 评论
0 点赞
2020-02-04
WordPress 忘记密码后如何找回
使用方法WordPress 忘记密码后简单粗暴直接的找回方法,就是下面代码,将以下代码添加到当前主题 functions.php 文件: global $wpdb; $wpdb->query("UPDATE 'wp_users' SET 'user_pass'='21232f297a57a5a743894a0e4a801fc3' WHERE 'user_login'='admin'");说明以上代码的作用是修改 wp_users 这张表,如果你的表前缀已修改,只需要把代码中的表明换成你的表名就可以了.用户登录名为:admin, 需要修改为忘记密码的那个用户名;登录密码为:admin, 代码中的加密字符串就是这个。添加好上述代码并保存好文件后,刷新一下站点页面,登录密码就会自动修改为:admin。用这个 admin 密码就可以登录到 WordPress 后台。注意: 密码重置、修改完毕后,一定要将上述代码删除,以防误修改!切记!!!
2020年02月04日
382 阅读
0 评论
0 点赞
2019-04-16
一个简单的获取当月最后一天的shell脚本
前言近期有部分业务需要在月底进行数据归拢处理,人为控制显然违背了码程序的初衷,想到最方便的方法就是使用 Linux 中的 crontab 定时器了,但是crontab貌似没有获取当月最后一天的这么一种定时规则,所以只能想办法让它在最后一天去执行了。原理获取明天的日期,判断如果明天是1号,那么今天肯定是本月的最后一天了,如我想让系统在每月最后一天23点整访问我的博客,代码如下。代码脚本#!/bin/sh TOMORROW=`date -d tomorrow '+%d'` #获取明天的日期 if [ $TOMORROW = "01" ] ; then #如果01的话执行curl语句 curl_cmd="/usr/bin/curl https://www.whongbin.com" #需要执行的shell命令 echo `date "+%Y-%m-%d %H:%M:%S"` "开始执行 ===>> " $curl_cmd else echo `date "+%Y-%m-%d"` "不是最后一天" fi #ifendcrontab规则#################### 每月最后一天23点执行一次,访问我的博客 0 23 * * * /usr/bin/sh /opt/bash/date.sh
2019年04月16日
448 阅读
0 评论
0 点赞
2019-04-11
基于PhpSpreadsheet类库的数据导出方案
前言我之前有写过一篇使用PHPexcel导出的文章,需要的可以看下:ThinkPHP5+PHPExcel导入导出 那篇文章使用的是旧版本PHPexcel库,目前这个库已经不再维护了,且项目已迁移至PhpSpreadsheet,项目地址https://github.com/PHPOffice/PhpSpreadsheet。所以,本篇文章我分享下使用新版PhpSpreadsheet开发导出功能,演示代码基于thinkphp5。解读下载类库在Composer 中文网 里搜索PHPoffice时,会发现有好几个可用库,细心点可以发现,phpexcel库显示不再维护更新,所以选择下面的 phpoffice/phpspreadsheet 类库。bash进入项目根目录执行下面命令进行安装composer require phpoffice/phpspreadsheet安装完成后,需要在项目中引入类库,如果使用常见框架(如:thinkphp,Laravel...) 在项目根目录中入口文件中引入 vendor/autoload.php 。这个类库的调用方式于原PHPExcel库的调用方式有所不同,个人感觉相对来说新版库的使用方式比较简单异常处理如果是正常导入导出的话按照下载的库里面的示例代码就可以用了,但是万一碰到必须导出大量列的业务场景时,示例中的方法就有点不胜其任了。使用Coordinate类中的stringFromColumnIndex可以解决。调用方法见代码。Tips:需要注意的一点是,在循环时,如果第一级循环从0开始的话,其实列是从Z1开始的,导出后就会出现少列的情况,使用$i+1即可;第二级循环如果从0开始时,则需要使用$j+1。这样出来的起始列才是A1。否则会报错。代码//此方法基于新版PHPExcel use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /** * excel表格导出 * @param string $fileName 文件名称 * @param array $headArr 表头名称 * @param array $data 要导出的数据 * @author whongbin */ function excel_export($fileName = '', $headArr = [], $datas = []) { foreach($datas as $item) $data[] = array_values($item); $dataArr[] = $headArr; $count = count($headArr); //计算表头数量 $spreadsheet = new Spreadsheet(); $spreadsheet->getProperties(); $sheet = $spreadsheet->getActiveSheet(); $fileName .= "_" . date("Ymd", \think\Request::instance()->time()) . ".xlsx"; /*--------------开始从数据库提取信息插入Excel表中------------------*/ for ($a=0; $a < count($data); $a++) { $dataArr[] = $data[$a]; } for ($i=0; $i < count($dataArr[0]); $i++) { for ($j=0; $j < count($dataArr); $j++) { $coord = Coordinate::stringFromColumnIndex($i+1) . ($j+1); if (is_numeric($dataArr[$j][$i])) { if ($dataArr[$j][$i]==0) { $value = '否'; }else if ($dataArr[$j][$i]==1) { $value = '是'; }else{ $value = ' '.$dataArr[$j][$i]; } }else{ $value = $dataArr[$j][$i]; } $sheet->setCellValue($coord,$value); } } header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $fileName); header('Cache-Control: max-age=0'); $writer = new Xlsx($spreadsheet); $writer->save('php://output'); //删除清空: $spreadsheet->disconnectWorksheets(); unset($spreadsheet); exit; }
2019年04月11日
433 阅读
0 评论
0 点赞
2019-04-01
使用phpexcel导入数据出现PHPExcel_RichText Object解决办法
前言PHP是最好的语言,不接受反驳:bowtie:问题上图是我在typo3开发中遇到的一个错误,错误原因至今不明,但是好在我找到了解决办法。看下面解决$A = $objPHPExcel->getActiveSheet()->getCell('A' . $currentRow)->getValue(); if (is_object($A)) { $A = $A->__toString(); } $B = $objPHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue(); if (is_object($B)) { $B = $B->__toString(); }
2019年04月01日
456 阅读
0 评论
0 点赞
2019-03-25
在Ubuntu18.04LTS上安装typo3LTS
什么是TYPO3TYPO3是一个开源企业CMS(内容管理系统),拥有庞大的全球社区,并得到了许多公司和个人的大力支持。目前我所知道的国内的是我所在的公司 极益科技有限公司在做二次开发,开源项目地址:https://gitee.com/ngo/os我在本文中,分享下 在Ubuntu18.04上基于LAMP环境安装TYPO3的最新可用LTS版本 的详细步骤。环境准备系统:Ubuntu18.04LTS服务:Apache2.4PHP:PHP7.0+(如果是typo3 9版本 则至少 7.3)MySQL:MySQL5.5+TYPO3源码在安装TYPO3之前,需要找到TYPO3源码。获取方式并不唯一一、CURL下载源码登录服务器后,进入web服务目录,然后执行下载命令。下面的命令下载到的是最新的TYPO3 LTS版本。cd /var/www/html下载TYPO3源码sudo curl -L https://get.typo3.org/8 -o typo3_src.tar.gz解压typo3_src.tar.gz压缩包sudo tar xfz typo3_src.tar.gz源码下载成功。。。TYPO3安装进入 /var/www/html/typo3_src-8.7.24 目录中。二、安装依赖项在浏览器中访问网站IP或域名。如果看到如下TYPO3页面则证明源码下载没有问题根据提示得知,我们需要创建一个名为__FIRST_INSTALL__ 的 __文件__(是文件!!!)才能继续安装。(不明白为什么老外不把这个文件创建在源码包里)sudo touch FIRST_INSTALL文件创建成功后,重新加载浏览器,看到下面页面就可以继续往下进行了。注:如果看到很多红色和黄色的消息,请不要担心。这只是环境中有未安装的PHP模块或着PHP配置不符。继续往下看,后面有解决办法#使用apt一次安装所有需要的模块来解决这个问题。 sudo apt install php-gd php-xml php-zip php-soap php-apcu openssl安装完所有内容后,重启Apache服务以确保加载PHP模块。再次刷新页面,通常是执行完上面操作后应该只剩下黄色消息,黄色消息是PHP相关配置。配置PHP.ini在phpinfo中找到php.ini的目录,编辑它sudo editor /etc/php/7.2/apache2/php.ini sudo service apache2 restart如果以上所有步骤都正确执行了,再次刷新页面应该是这样的点击按钮 System looks good. Continue! 继续安装三、配置MYSQL连接在连接前,准备好链接参数1、root 权限sudo -s2、连接到MySQL服务mysql3、创建typo3用户create user typo3 identified by '123456';密码随意,但也不要太随意了。本文仅作为演示。4、为此用户创建数据库并授予权限。create database typo3; grant all privileges on typo3.* to 'typo3';5、更改字符集为utf8。alter database typo3 character set utf8 collate utf8_general_ci;然后把数据库的用户名和密码写入四、创建用户,网站命名执行完这一步安装就快完成了,现在为我们网站创建一个后端管理员用户。还可以命名你的网站名称。五、最后一步执行完上面所有步骤,网站就安装成功了。现在你可以使用第四步创建的用户登录并管理你的网站了吐槽下吧typo3的功能确实强大,强大到你只要有基础,两天就会用,四天就会改的地步,但是,如果你一旦改错地方,你可能需要大量时间去修改它。说是这么说,typo3是我见过代码最严谨的框架。。。 至于TYPO3的功能。简直丰富的不要不要的,毕竟它可以完全零代码就能搭建,如果不用定制开发的话,四千多个插件总有你喜欢的。如果你想了解更多或者开发遇到问题。请联系我
2019年03月25日
834 阅读
2 评论
0 点赞
2019-03-22
CentOS7 搭建服务器监控-Linux-dash
前言这是一个开源的服务器监测软件 Git地址:https://github.com/afaqurk/linux-dash.git安装环境:Apache+Centos7安装步骤安装Apacheyum install httpd httpd-toolsLoaded plugins: fastestmirror, refresh-packagekit, security安装PHPyum install php php-xml php-common php-jsonLoaded plugins: fastestmirror, refresh-packagekit, security安装gityum install gitLoaded plugins: fastestmirror, refresh-packagekit, security下载并安装linux-dash可以直接安装在 'var/www/html/'路径(项目路径)下,也可以安装好后移动到此目录git clone https://github.com/afaqurk/linux-dash.git重启Apacheservice httpd restart重启后在浏览器中输入 http://yourdomin.com 出现以下弹框即安装正确使用截图
2019年03月22日
494 阅读
0 评论
0 点赞
2019-03-22
基于一言api的typecho碎言api
闲聊二话前几天把博客搭起来了,弄了个碎言单页,但是一直没有去完善,今天抽时间完善了下,也算是对得起今天中午的泡面+火腿了。。。分享个代码<?php /** 载入数据库支持 */ include_once $_SERVER['DOCUMENT_ROOT'] . '/config.inc.php'; // 查询数据 $db = Typecho_Db::get(); $query = $db->select('cid,text')->from('table.contents')->where('slug = ?', 'awords'); $results = $db->fetchAll($query); $weekarray=array("日","一","二","三","四","五","六"); //数据模板 $temp = "\[awords\] ##DATE## ##WEEK## ##AWORD##\[\/awords\] "; //拼接数据 $mdstr = "<!--markdown-->"; $oldstr = str_replace($mdstr,"",$results[0]['text']); $newstr = str_replace("##DATE##", date("Y-m-d H:i:s"), $temp); $newstr = str_replace("##WEEK##", "星期".$weekarray[date("w")], $newstr); $newstr = str_replace("##AWORD##", file_get_contents("https://v1.hitokoto.cn/?c=d&encode=text"), $newstr); $newstr = $mdstr . $newstr . $oldstr; //更新数据 $update = $db->update('table.contents')->rows(array('text' => $newstr))->where('slug = ?', 'awords'); $updateRows = $db->query($update); ?>食用方法在主题目录下新建.php文件,然后把上面代码完整保存到文件中,然后访问这个路径就行例:https://www.domin.com/usr/themes/yourtheme/yourapi.php
2019年03月22日
482 阅读
0 评论
0 点赞
2019-03-18
自用的一个web站点加载特效
一个加载特效CSS代码.spinner { width: 60px; height: 60px; background-color: #67CF22; margin: 100px auto; -webkit-animation: rotateplane 1.2s infinite ease-in-out; animation: rotateplane 1.2s infinite ease-in-out; } @-webkit-keyframes rotateplane { 0% { -webkit-transform: perspective(120px) } 50% { -webkit-transform: perspective(120px) rotateY(180deg) } 100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) } } @keyframes rotateplane { 0% { transform: perspective(120px) rotateX(0deg) rotateY(0deg); -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg) } 50% { transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg) } 100% { transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); } }JavaScript代码//获取浏览器页面可见高度和宽度 var _PageHeight = document.documentElement.clientHeight, _PageWidth = document.documentElement.clientWidth; //计算loading框距离顶部和左部的距离(loading框的宽度为215px,高度为61px) var _LoadingTop = _PageHeight > 90 ? (_PageHeight - 90) / 2 : 0, _LoadingLeft = _PageWidth > 90 ? (_PageWidth - 90) / 2 : 0; //在页面未加载完毕之前显示的loading Html自定义内容 var _LoadingHtml = '<div id="loadingDiv" style="position:absolute;left:0;width:100%;height:' + _PageHeight + 'px;top:0;background:#FFFFFF;opacity:1.0;filter:alpha(opacity=80);z-index:10000;"><div class="spinner" style="position: top: 60px; margin:' + _LoadingTop + 'px auto ;"></div></div>'; //呈现loading效果 document.write(_LoadingHtml); //监听加载状态改变 document.onreadystatechange = completeLoading; //加载状态为complete时移除loading效果 function completeLoading() { if (document.readyState == "complete") { $("#loadingDiv").fadeOut(1500); } } html使用方法把上面的两段代码保存成 .css / .js 文件,在需要加载的页面引入文件即可<!DOCTYPE html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>loading加载特效</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="./loading.css"> </head> <body style="text-align:center;margin-top: 200px"> <h2>这是一个加载特效,刷新页面可见,页面加载完成后隐藏</h2> <script src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js" ></script> <script src="./loading.js" ></script> </body> </html>使用效果
2019年03月18日
490 阅读
0 评论
0 点赞
2019-03-13
ThinkPHP5的无限级分类之思路与技巧
前言tp5对分类数据表的信息读取与展示,我们即可以控制器完成,也可以在对应的模型中完成。本案例,我们在模型中完全成。况且,对数据表的增,删改查操作,本来就是模型的本职工作。首先声明一下,我们采用递归的方式来实现无限分类。但无限分类的实现,不是只是递归一种方式,还有一种是全路径方式,也可以实现,不过,这种方式通常用在全路径导航菜单中。所以,这里我们还是用最常见的递归函数来实现:无限分类。实现方法首先我们先创建一个静态方法:getCate,为什么要静态方式,因为静态方法执行效率高,不需要实例化,而且,分类查询是使用非常频繁的操作,很多查询都要依赖分类查询的结果。当前的getCate方法,有三个参数:第一个是$pid,是父类的id,默认为0,表示从顶级开始查起。第二个参数是返回的查询结果,我们放在一个数组中返回,注意,这个变量是引入方式传入的。采用引用参数的方式,来返回结果,这也是目前主流的技术。尽管理解起来有难度,但执行效率是最高的,我们要玩,就玩大的,所以这里,我们就直接采用引用,来返回查询结果。第三个参数,可以没有,它是用来设置一下分类之间的层次显示的,可以让结果看上去更直观清晰。模型方法<?php namespace app\admin\model; use think\Collection; use think\Model; class Category extends Model { //创建一个静态方法getCate,来获取分类信息 /** * @param int $pid: 当前分类的父id * @param array $result:引用返回值 * @param int $blank:设置分类之间的显示提示 */ public static function getCate($pid=0, &$result=[], $blank=0) { //1.分类表查询:$pid $res = self::all(['pid'=>$pid]); //2.自定义分类名称前面的提示信息 $blank += 2; //3.遍历分类表 foreach ($res as $key => $value) { //3-1自定义分类名称的显示格式 $cate_name = '|--'.$value->cate_name; $value->cate_name = str_repeat(' ',$blank).$cate_name; //3-2将查询到的当前记录保存到结果$result中 $result[] = $value; //3-3关键:将当前记录的id,做为下一级分类的父id,$pid,继续递归调用本方法 self::getCate($value->id, $result, $blank); } //4.返回查询结果,调用结果集类make方法打包当前结果,转为二维数组返回 return Collection::make($result)->toArray(); } }控制器中调用代码: public function edit(Request $request) { //1.获取一下分类id $cate_id = $request -> param('id'); //2.查询要更新的数据 $cate_now = CategoryModel::get($cate_id); //3.递归查询所有的分类信息 $cate_level = CategoryModel::getCate(); //4.模板赋值 $this -> view -> assign('cate_now', $cate_now); $this -> view -> assign('cate_level', $cate_level); //5.渲染模板 return $this -> view -> fetch('category_edit'); }
2019年03月13日
540 阅读
0 评论
0 点赞
2019-03-13
微信小程序之 PHP 发送模板消息
今天入坑小程序模板消息的推送,也是踩了不少的坑啊,在这儿 share 一下~,有任何疑问可以联系我!准备1: 官方文档https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#发送模板消息总的来说,小程序发送模板消息和公众号发送模板消息区别不是很大2: 小程序发送模板消息:- 获取access_token并存储以备再次使用 - 小程序端获取发送必要的formID(submit提交事件)或 prepay_id(支付事件) - 拼装模板消息数据 - 调用接口发送模板消息 吐槽一下微信小程序的机制是这样的formid 只能通过移动端进行获取(手机,iPad);每获取到一个 formid **只能使用一次**(一个formid只能发送一条模板消息);发起form表单提交事件 ==> 获取 form_id 和 发起人openid ==> php后台处理拼装模板消息 ==> 发送给发起人;上边说的意思是:A获取的formid只能用来给自己发送模板消息,不能用来给B发送模板消息;解决方案在A触发表单提交事件时,将本次获取到的formid保存到A提交的表单内容中,反正就是与A本次提交的数据绑定死(死结,除了自己,谁都不给用),在B触发对A的某事件时,需要发送模板消息了,这时把A之前绑定的formid拿出来用,还是给A自己用for example:A提交了请假申请(通过表单提交申请内容),B审核,审核完成后,把审核结果通过模板消息发送给A终于到代码了我不是前端妹子,小程序的代码就不放了,自己找找吧<?php namespace Jykj\\Template\\Weixin; /** * 小程序模板消息发送 * 微信规定:不能直接在小程序调用,只能在后台发起 */ class WxSendTemplate { private $token =''''; private $appid = ''******************''; private $appsecret = ''********************************''; private $templateid = ''*******************************************''; private $SEND_TEMPLATE_URL = ''https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=##TOKEN##''; private $GET_ACCESSTOKEN_URL = ''https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=##APPID##&secret=##APPSECRET##''; /** * 构造函数,获取access_token * @Author wanghongbin * @Email wanghongbin@ngoos.org * @DateTime 2018-07-06 */ public function __construct() { $this->token = $this->getAccessToken(); } /** * 发送模板消息 * @Author wanghongbin * @Email wanghongbin@ngoos.org * @DateTime 2018-07-06 * @param array * @return [type] */ public function sendTemplateData($data = array()) { $options = array( ''http'' => array( ''method'' => ''POST'', ''header'' => ''Content-type:application/json'',//header 需要设置为 JSON ''content'' => $this->getTemplatePostData($data), ''timeout'' => 60//超时时间 ) ); $url = str_replace("##TOKEN##",$this->token,$this->SEND_TEMPLATE_URL); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; } /** * 获取模板消息 * @Author wanghongbin * @Email wanghongbin@ngoos.org * @DateTime 2018-07-06 * @param array * @return [type] */ private function getTemplatePostData($data=array()){ $post_data = array ( "touser" => $data[''openid''],//用户的 openID,可用过 wx.getUserInfo 获取 "template_id" => $this->templateid,//小程序后台申请到的模板编号 "page" => $data[''pageuri''],//点击模板消息后跳转到的页面,可以传递参数 "form_id" => $data[''formid''],//第一步里获取到的 formID "data" => array( ''keyword1'' => array( "value" => $data[''status''],"color"=>"green"), ''keyword2'' => array( "value" => $data[''shopername'']), ''keyword3'' => array( "value" => $data[''telephone'']), ''keyword4'' => array( "value" => $data[''ordertime'']) ), "emphasis_keyword" => "keyword1.DATA" ); //将数组编码为 JSON return \\json_encode($post_data, true); } /** * 获取AccessToken * @Author wanghongbin * @Email wanghongbin@ngoos.org * @DateTime 2018-07-06 * @return [type] */ private function getAccessToken () { $url = str_replace("##APPID##",$this->appid,$this->GET_ACCESSTOKEN_URL); $url = str_replace("##APPSECRET##",$this->appsecret,$url); $html = file_get_contents($url); $output = json_decode($html, true); $access_token = $output[''access_token'']; return $access_token; } /** * 获取所有的模板 * @Author wanghongbin * @Email wanghongbin@ngoos.org * @DateTime 2018-07-06 * @return [type] */ public function get_all_private_template() { $url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=".$this->token; $res = file_get_contents($url); return json_decode($res,true); } }效果图
2019年03月13日
714 阅读
0 评论
0 点赞
1
2
3
...
5