首页 php教程 php手册 微信推送模板消息的PHP代码整理

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

Jun 21, 2016 am 08:46 AM
access nbsp quot time token

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

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

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

<ol class="dp-c">
<li class="alt"><span><span>{{first.DATA}}  </span></span></li>
<li><span>被撕的人:{{name.DATA}}  </span></li>
<li class="alt"><span>被撕人的组别:{{zu.DATA}}  </span></li>
<li><span>被撕时间:{{time.DATA}}  </span></li>
<li class="alt"><span>本组剩余的人:{{remain.DATA}} </span></li>
<li><span>{{remark.DATA}} </span></li>
</ol>
登录后复制

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

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

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

函数的调用需要注意几点

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

<em id="__mceDel">moban($name,$zu,$remain,$openid<span>)   <br>$name 被撕的人<br>$zu   被撕的人组别<br>$remain 本组剩余的人<br>$openid 发送给哪个openid<br>传参的可以自行修改 只需要对应上函数里面模板的输出格式 <br>模板里面的appid appserect一定要填<br><br></span></em><span style="font-size: 15px;">2、数据库的一定在要在数据库里面建一个表,因为access_token的有效期只有7200s,防止它过期这里采用了数据库保存的方式,表名为tokentime,三个字段就可以了,分别是id(int) time(varchar) access_token(varchar)    //括号里面是格式,access_token字段一定要大一点<br><br>至此就可以使用自己的模板给用户发消息了,由于发送模板消息是按照openid发送的,所有需要获取用户的openid。<br>等有时间,写一下如何批量获取用户的openid,存入数据库,并发送模板消息和其他操作。</span>
登录后复制

 



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Windows11怎么禁用后台应用程序_Windows11禁用后台应用教程 Windows11怎么禁用后台应用程序_Windows11禁用后台应用教程 May 07, 2024 pm 04:20 PM

1、在Windows11中打开设置。您可以使用Win+I快捷方式或任何其他方法。2、转到应用程序部分,然后单击应用程序和功能。3、查找要阻止在后台运行的应用程序。单击三点按钮并选择高级选项。4、找到【后台应用程序权限】部分并选择所需的值。默认情况下,Windows11设置电源优化模式。它允许Windows管理应用程序在后台的工作方式。例如,一旦启用省电模式以保留电池,系统将自动关闭所有应用程序。5、选择【从不】可防止应用程序在后台运行。请注意,如果您注意到程序不向您发送通知、无法更新数据等,您可

deepseek怎么转换pdf deepseek怎么转换pdf Feb 19, 2025 pm 05:24 PM

DeepSeek 无法直接将文件转换为 PDF。根据文件类型,可以使用不同方法:常见文档(Word、Excel、PowerPoint):使用微软 Office、LibreOffice 等软件导出为 PDF。图片:使用图片查看器或图像处理软件保存为 PDF。网页:使用浏览器“打印成 PDF”功能或专用的网页转 PDF 工具。不常见格式:找到合适的转换器,将其转换为 PDF。选择合适的工具并根据实际情况制定方案至关重要。

oracle怎么读取dbf文件 oracle怎么读取dbf文件 May 10, 2024 am 01:27 AM

Oracle 可以通过以下步骤读取 dbf 文件:创建外部表,引用 dbf 文件;查询外部表,检索数据;将数据导入 Oracle 表。

Java反射机制如何修改类的行为? Java反射机制如何修改类的行为? May 03, 2024 pm 06:15 PM

Java反射机制允许程序动态修改类的行为,无需修改源代码。通过Class对象操作类,可以通过newInstance()创建实例,修改私有字段值,调用私有方法等。但应谨慎使用反射,因为它可能会导致意外的行为和安全问题,并有性能开销。

Java 函数开发中常见的异常类型及其修复措施 Java 函数开发中常见的异常类型及其修复措施 May 03, 2024 pm 02:09 PM

Java函数开发中常见的异常类型及其修复措施在Java函数开发过程中,可能遇到各种异常,影响函数的正确执行。以下是常见的异常类型及其修复措施:1.NullPointerException描述:当访问一个还未初始化的对象时抛出。修复措施:确保在使用对象之前对其进行非空检查。示例代码:try{Stringname=null;System.out.println(name.length());}catch(NullPointerExceptione){

vue中iframe跨域的方法 vue中iframe跨域的方法 May 02, 2024 pm 10:48 PM

在 Vue 中解决 iframe 跨域问题的方法:CORS:启用后端服务器中的 CORS 支持,在 Vue 中使用 XMLHttpRequest 或 fetch API 发送 CORS 请求。JSONP:使用后端服务器中的 JSONP 端点,在 Vue 中动态加载 JSONP 脚本。代理服务器:设置代理服务器转发请求,在 Vue 中使用第三方库(如 axios)发送请求并设置代理服务器 URL。

解读 Botanix:网络资产管理去中心化的 BTC L2(附交互教程) 解读 Botanix:网络资产管理去中心化的 BTC L2(附交互教程) May 08, 2024 pm 06:40 PM

昨日,BotanixLabs宣布累计完成1150万美元融资,PolychainCapital、PlaceholderCapital等参投。融资将用于构建去中心化的EVM等效BTCL2Botanix。Spiderchain结合了EVM的易用性与比特币的安全性。自2023年11月测试网上线以来,已有超过20万个活跃地址。Odaily将于本文解析Botanix的特色机制与测试网交互流程。Botanix按照官方定义,Botanix是一个基于比特币构建的去中心化的图灵完备L2EVM,由两个核心组件以太坊虚

oracle中explain的用法 oracle中explain的用法 May 03, 2024 am 12:06 AM

Oracle中的EXPLAIN命令用于分析SQL语句的执行计划,使用方法为在SQL语句前添加EXPLAIN关键字。EXPLAIN结果包含ID、操作符类型、行数估计、成本估计、输出行数估计、访问谓词和过滤谓词等信息,可用于优化查询性能,标识高代价运算符和可能受益于优化技术的表。

See all articles