当前位置: 首页 > 编程日记 > 正文

微信推送模板消息的PHP代码整理

本文为本人原创,未经许可,不可转载。  博主长期从事微信开发,微信开发相关问题和业务请联系qq 2580234897

最近做过一个需要推送消息的系统,就研究了一下微信的模板消息的推送。由于认证过的微信号,就用测试号做的,但是过程基本一致。

本文基于微信平台的官方文档写成,http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl

首先,得在微信的后台管理中设置一下,模板消息的格式,获取到一个模板消息的id

{{first.DATA}} 
被撕的人:{{name.DATA}}
被撕人的组别:{{zu.DATA}}
被撕时间:{{time.DATA}}
本组剩余的人:{{remain.DATA}} {{remark.DATA}}

这里以做的一个撕名牌的通知为例,相关参数的设置如上。生成id备用。

下面直接贴出需要调用的函数moban()  和它的辅助函数http_request()

http_request(){
$ch
= curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $output = curl_exec($ch); curl_close($ch); return $output; }function moban($name,$zu,$remain,$openid){$appid=""; //填写微信后台的appid $appsecret=""; //填写微信后台的appsecret//从数据库查看access_token$sql="SELECT * FROM `tokentime` WHERE id='$appid'";$query=mysql_query($sql);$rk=mysql_fetch_array($query);$time=date('Y-m-d H:i:s',time());if($rk=="") //数据库查询无结果 获取access_token并存入 {$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$ACCESS_TOKEN=$result['access_token']; $sql1="INSERT INTO `tokentime` (`id`,`access_token`,`time`) VALUES ('$appid','$ACCESS_TOKEN','$time')";$query1=mysql_query($sql1);}else{ $time_b=$rk['time'];//上次存的时间$time_n=date('Y-m-d H:i:s',time()-7200);if($rk['access_token']==""||$time_b<$time_n){$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$ACCESS_TOKEN=$result['access_token']; $sql2="UPDATE tokentime SET access_token='$ACCESS_TOKEN',time='$time' WHERE id='$appid'";$query2=mysql_query($sql2); }else{$ACCESS_TOKEN=$rk['access_token']; }} //模板消息 $times= date('m月d日 H:i:s',time()); $template=array( 'touser'=>$openid, 'template_id'=>"_0DQerSIqPZaB4vjQjjOIPRXZhcVooFT_390vDhHhVw", //模板的id 'url'=>"http://weixin.qq.com/download", 'topcolor'=>"#FF0000", 'data'=>array( 'name'=>array('value'=>urlencode($name),'color'=>"#00008B"), //函数传参过来的name 'zu'=>array('value'=>urlencode($zu),'color'=>'#00008B'), //函数传参过来的zu 'time'=>array('value'=>urlencode($times),'color'=>'#00008B'), //时间 'remain'=>array('value'=>urlencode($remain),'color'=>'#00008B'),//函数传参过来的ramain ) ); $json_template=json_encode($template); $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$ACCESS_TOKEN; $res=http_request($url,urldecode($json_template)); if ($res[errcode]==0) echo '消息发送成功!';
}

函数的调用需要注意几点

1、moban()函数是需要传参的,具体传参的

moban($name,$zu,$remain,$openid)   
$name 被撕的人
$zu 被撕的人组别
$remain 本组剩余的人
$openid 发送给哪个openid
传参的可以自行修改 只需要对应上函数里面模板的输出格式
模板里面的appid appserect一定要填

2、数据库的一定在要在数据库里面建一个表,因为access_token的有效期只有7200s,防止它过期这里采用了数据库保存的方式,表名为tokentime,三个字段就可以了,分别是id(int) time(varchar) access_token(varchar) //括号里面是格式,access_token字段一定要大一点

至此就可以使用自己的模板给用户发消息了,由于发送模板消息是按照openid发送的,所有需要获取用户的openid。
等有时间,写一下如何批量获取用户的openid,存入数据库,并发送模板消息和其他操作。

转载于:https://www.cnblogs.com/rain-drop/p/4550340.html

相关文章:

Android studio Day01-23

AndroidDay01-2&#xff08;Android studio安装&#xff09; 步骤如下&#xff1a; &#xff08;1&#xff09;下载Android studio下载地址&#xff1a;www.developer.android.com./sdk/installing/studio.html &#xff08;2&#xff09;双击安装&#xff0c;建议在studio安…

Unity 3D学习视觉脚本无需编码即可创建高级游戏

在本课程中&#xff0c;您将学习如何在Unity中使用可视化脚本(以前称为Bolt)以及如何在不编写一行代码的情况下创建自己的高级游戏所需的一切。本课程将教你如何掌握可视化脚本&#xff0c;即使你以前没有任何关于unity或编程的经验。 课程获取&#xff1a;Unity 3D学习视觉脚…

树莓派siri homekit_利用树莓派Zero自制一款Homekit摄像头,看上去挺酷,手痒了吗?...

虽然最近相继有多款兼容homekit商用摄像头上市&#xff0c;如果您也和小编一样&#xff0c;喜欢动手&#xff0c;那么DIY一款Homekit摄像头&#xff0c;然后自己3D打印个外壳支架&#xff0c;是不是很酷&#xff1f;HKCam项目Home 4开发者Matthias提供了一个开源项目&#xff0…

如何释放电脑被限制的20%网速?

很多朋友不管是看电影还是玩游戏&#xff0c;总觉得自己的网速慢&#xff0c;这跟自己所办网络的带宽有一定关系&#xff0c;但我们也要知道&#xff0c;我们的电脑在买来时&#xff0c;默认是限制了20%网速的&#xff0c;如何释放这20%的网速&#xff0c;提高用户体验呢&#…

【Docker】registry部署docker私有镜像仓库

Docker Hub作为Docker默认官方公共镜像仓库&#xff0c;但是如果我们不想使用怎么办&#xff0c;第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库&#xff0c;第二就是如我们自己搭建一个自己的私有镜像仓库&#xff0c;官方也提供docker registry镜像&#xff0c;使得搭…

JAVA 面向对象

1&#xff1b;什么叫面向对象&#xff1a;1&#xff1b;面向对象和面向过程是一种思想2&#xff1b;面向过程&#xff1a;强调的是功能行为3&#xff1b;面向对象&#xff1a;将功能进行封装&#xff0c;强调具备了功能的对象2&#xff1b;面向对象的特征&#xff1a;1&#xf…

Android studio Day02-1

AndroidDay02-1&#xff08;project&#xff09; 新建一个project&#xff0c;并选择一个自己project的存贮的位置 Android studio 2.3.1默认的最小的API为15 第一次使用并建立自己的project&#xff0c;软件进行相应的sdk其他的组建的安装 点击next进入下一个界面&#xff0c…

Unity Pro builder创建模块化仓库建筑学习教程

Unity内部的专业3D编辑工作室 你会学到: 直接在Unity内部学习3D建模 使用专业构建器的专业方法 为您的游戏创建模块化资产 了解如何为您的三维模型设置纹理 三维资产的模块化布局 专业后期制作和轻烤 Unity Pro Builder Warehouse MP4 |视频:h264&#xff0c;1280720 |音频:AA…

C++拾遗(五)语句相关

前缀格式与后缀格式 对于表达式&#xff1a;后缀如 i 表达式的值仍是 i&#xff0c;在遇到下一个顺序点后再将 i 加1。前缀 i 表达式的值就是&#xff08;i1&#xff09;&#xff0c;先计算表达式的值&#xff0c;不需要等待      顺序点。 对于类&#xff1a;前缀函数效…

github里的默认域_GitMAD 一款扫描Github上的敏感信息和数据泄漏工具

GitMAD是一个用于发现Github上的敏感信息和数据泄漏的工具。通过给定关键字或域&#xff0c;GitMAD便会搜索Github上托管的代码&#xff0c;以查找是否存在匹配项。一旦找到了匹配项&#xff0c;GitMAD将克隆存储库并在文件中搜索一系列可配置的正则表达式。然后&#xff0c;Gi…

【Docker】Docker的三大核心组件

镜像&#xff08;Image&#xff09;、容器&#xff08;Container&#xff09;、仓库&#xff08;Repository&#xff09;是我们常说的Docker的三大组件&#xff0c;接下来就让我们一起详细地探索一番吧。 一、镜像&#xff08;Image&#xff09; 什么是Docker镜像&#xff1f;…

很高兴开始博客之旅

来到博客园&#xff01;&#xff0c;开启我的博客之旅&#xff0c;感觉棒棒哒转载于:https://www.cnblogs.com/pbnull/p/4562230.html

Android Studio Day02-2

AndroidDay02-2&#xff08;AVD&#xff09; Android APP编译的过程之中总是会需要进行相应的功能的调试&#xff0c;以及界面的布局设置在不同手机上的效果的展示。相应的Android平台都包含有Android虚拟设备管理器&#xff0c;Android虚拟设备管理器允许用户自己创建自己的虚…

网络增强现实开发简介 Introduction to Web AR development

搭配webXR、mindAR、three.js和tensorflow.js 你会学到: 获得构建不同类型的网络增强现实应用程序的实践经验&#xff0c;包括图像效果、人脸效果和世界效果 获得关于增强现实如何在网络浏览器中工作的基本理解 掌握使用WebXR、mind-ar-js和threejs构建web AR应用程序 学习使用…

umi脚手架搭建的项目_15天零成本搭建静态博客,托管于Github Page

博客地址技术栈概览前台&#xff1a;Umi(路由) Antd(视图) TypeScript(增加项目可维护性以及规范性)后台&#xff1a;Umi(路由) Antd(视图) TypeScript(增加项目可维护性以及规范性) Rematch(数据管理)服务&#xff1a;Egg.js(基于koa的下一代企业级应用框架) MongoDB搭建…

[maven] 使用问题及思考汇总

&#xff08;1&#xff09;Maven坐标 maven坐标可以唯一标识一个项目&#xff0c;包含四个元素 groupId , artifactId, packaging, version。 groupId&#xff1a;一般为团体,公司,项目。如 oceanic-web, oceanic-dal, oceanic-biz 同属一个 groupId。 artifactId&#xff1a;在…

VS调试时提示此项目已经过期

问题出因&#xff1a; 1.先前卸载VS重新安装时不全面 解决办法&#xff1a; 1.VS应安装两个C的组件 2.首先在“生成”-》 “生成解决方案”完成编译&#xff0c;问题解决。

(DBA之路【五】)关于锁的故事

首先很抱歉&#xff1a;这篇文章我其实整合了很多别人的文章&#xff0c;但是因为太多&#xff0c;一开始被没留意出处所以很难声明来源&#xff0c;很抱歉&#xff0c;但是这篇文章只用来作为学习笔记&#xff0c;作为新手&#xff0c;我以后会注意的。&#xff08;一&#xf…

Android Studio Day03-1(Android studio 系统界面简介)

IDE&#xff08;integrated Development Environment&#xff09;的主要的目的就是用来编辑文本的。 在界面中的分布如下&#xff08;以下的两张图片均为的《Android studio实战快速高效地构建Android应用》一书中的&#xff09;

全流程游戏模型制作学习教程

尤金彼得罗夫|时长:36小时 |视频:H264 19201080 |音频:AAC 44&#xff0c;1 kHz 2ch |大小解压后 35 GB 含课程文件 |语言:英语 (无字幕&#xff0c;) 在本教程中&#xff0c;我将介绍为现代FPS视频游戏创建游戏就绪武器资产的整个过程。我将展示我的工作管道&#xff0c;使用…

requirednew基于xml配置日志不回滚_Elasticsearch配置IK分词器的远程词库

在生活中很多很多地方都涉及到了全文检索&#xff0c;最常见的就好比日常使用到的百度搜索等搜索引擎&#xff0c;也都是基于全文检索来实现的&#xff1b;全文检索种类较多&#xff0c;就好比Elasticsearch、Sorl等。为Ealsticsearch配置词库&#xff0c;可以很好的解决生活中…

PS切图篇(一)---界面设置

#工作区设置 四大主要面板&#xff1a;信息 字符 图层 历史记录 打开必要属性&#xff1a; 选择工具设置 选择图层的方式&#xff1a;ctrl鼠标左击想选择的图层转载于:https://www.cnblogs.com/yinzf/p/5339873.html

简单解决用VS编写hello world时命令行一闪而过

一、在return 0;前一行加一个getchar(); 二、使用项目模板为 windows 桌面向导 c 3、命令行控制台一闪而过。这是我们使用空文件夹加载的项目&#xff0c;默认不是控制台应用程序&#xff0c;新建控制台程序&#xff0c;或者在代码中加入system(“pause”);这种通过代码人为的…

粒子群算法(1)----粒子群简要

一、历史粒子群算法从复杂适应系统衍生PSO算法&#xff08;Complex Adaptive System,CAS&#xff09;。CAS理论于1994年正式提出&#xff0c;CAS中的成员称为主体。比方研究鸟群系统&#xff0c;每一个鸟在这个系统中就称为主体。主体有适应性&#xff0c;它能够与环境及其它的…

Android Studio Day03-2(常用操作)

&#xff08;1&#xff09;选择文本 1.CtrlA 选中全文 2.在将光标置于任意的单词中时按住CtrlW&#xff0c;选中整个词 继续按CtrlW 选中的区域将扩大&#xff0c;扩大至包含任意数量的相邻的单词 按CtrlwShift 进行区域的缩小 &#xff08;2&#xff09;Undo和Redo&…

Blender数字雕刻终极指南学习教程

CGBoost–Blender中的3D雕刻大师–数字雕刻终极指南 大小&#xff1a;29G 含课程项目文件 Master 3D Sculpting in Blender – The Ultimate Guide to Digital Sculpting 本课程教你所有重要的Blender雕刻基础知识&#xff0c;以及如何仅使用免费工具从头开始创建令人惊叹的3D雕…

生产指挥调度系统_市安全生产应急救援指挥中心将大型装载机械设备储备信息纳入应急指挥调度系统...

为拓展应急救援力量体系&#xff0c;发挥社会力量在开展全市重特大突发事件应急救援中的重要作用&#xff0c;近日&#xff0c;市安全生产应急救援指挥中心在加强应急指挥信息平台“一网七库”建设的基础上&#xff0c;成功对接甘肃省非道路移动机械监管平台&#xff0c;做到数…

java.sql.Exception:setString 只能处理少于 32766 个字符的字符串

java.sql.Exception:setString 只能处理少于 32766 个字符的字符串 解决方式是 : 升级ojdbc的版本, 将原来的 ojdbc14_10.2.0.2.0.jar 升级到 ojdbc6_11.2.0.1.0.jar这边行方用的是 oracle版本是 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0maven 安装到本地…

无需自己输入include这些的方法

使用项目模板为 windows 桌面向导 c 不用空白项 直接默认 不用勾选其他

第二次团队冲刺2

实现了查询的webservice服务端&#xff0c;做了查询时等待界面&#xff0c;对查询速度做了一点优化。 还写了一个入馆须知模块&#xff0c;介绍图书馆借阅规则。 还有借阅个人信息没做出来&#xff0c;还没进行界面优化。 转载于:https://www.cnblogs.com/318abc/p/4569576.htm…