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

简介:

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

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

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

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


 
 
  1. {{first.DATA}}  
  2. 被撕的人:{{name.DATA}}  
  3. 被撕人的组别:{{zu.DATA}}  
  4. 被撕时间:{{time.DATA}}  
  5. 本组剩余的人:{{remain.DATA}} 
  6. {{remark.DATA}} 

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

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


    
    
  1. http_request(){ 
  2. $ch = curl_init(); 
  3. curl_setopt($ch, CURLOPT_URL, $url); 
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  5. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  6. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  7. curl_setopt($ch, CURLOPT_POST, 1); 
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  9. $output = curl_exec($ch); 
  10. curl_close($ch); 
  11. return $output; 
  12. } 
  13.  
  14.   function moban($name,$zu,$remain,$openid) 
  15.   { 
  16.  
  17.  $appid="";       //填写微信后台的appid 
  18.  $appsecret="";   //填写微信后台的appsecret 
  19.  //从数据库查看access_token 
  20.               $sql="SELECT * FROM `tokentime` WHERE id='$appid'"; 
  21.               $query=mysql_query($sql); 
  22.               $rk=mysql_fetch_array($query); 
  23.               $time=date('Y-m-d H:i:s',time()); 
  24.               if($rk=="")   //数据库查询无结果 获取access_token并存入 
  25.               { 
  26.                     
  27.                    $TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; 
  28.                    $json=file_get_contents($TOKEN_URL); 
  29.                    $result=json_decode($json,true); 
  30.                    $ACCESS_TOKEN=$result['access_token'];   
  31.                   
  32.                    $sql1="INSERT INTO `tokentime` (`id`,`access_token`,`time`) VALUES ('$appid','$ACCESS_TOKEN','$time')"; 
  33.                    $query1=mysql_query($sql1); 
  34.             } 
  35.               else 
  36.               {   $time_b=$rk['time'];//上次存的时间 
  37.                   $time_n=date('Y-m-d H:i:s',time()-7200); 
  38.                      
  39.                   if($rk['access_token']==""||$time_b<$time_n) 
  40.                   { 
  41.                     $TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; 
  42.                    $json=file_get_contents($TOKEN_URL); 
  43.                    $result=json_decode($json,true); 
  44.                    $ACCESS_TOKEN=$result['access_token'];   
  45.                   
  46.                    $sql2="UPDATE tokentime SET access_token='$ACCESS_TOKEN',time='$time' WHERE id='$appid'"; 
  47.                    $query2=mysql_query($sql2);         
  48.                 } 
  49.                   else 
  50.                   { 
  51.                      $ACCESS_TOKEN=$rk['access_token'];  
  52.                   } 
  53.                 } 
  54. //模板消息     
  55.    $times= date('m月d日 H:i:s',time());   
  56.        
  57. $template=array( 
  58. 'touser'=>$openid, 
  59. 'template_id'=>"_0DQerSIqPZaB4vjQjjOIPRXZhcVooFT_390vDhHhVw",    //模板的id 
  60. 'url'=>"http://weixin.qq.com/download", 
  61. 'topcolor'=>"#FF0000", 
  62. 'data'=>array( 
  63. 'name'=>array('value'=>urlencode($name),'color'=>"#00008B"),    //函数传参过来的name      
  64. 'zu'=>array('value'=>urlencode($zu),'color'=>'#00008B'),        //函数传参过来的zu 
  65. 'time'=>array('value'=>urlencode($times),'color'=>'#00008B'),   //时间 
  66. 'remain'=>array('value'=>urlencode($remain),'color'=>'#00008B'),//函数传参过来的ramain 
  67. ) 
  68. ); 
  69. $json_template=json_encode($template); 
  70. $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$ACCESS_TOKEN; 
  71. $res=http_request($url,urldecode($json_template)); 
  72. if ($res[errcode]==0) echo '消息发送成功!';  
  73. } 

函数的调用需要注意几点

 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,存入数据库,并发送模板消息和其他操作。
 



作者:深秋雨滴

来源:51CTO

相关文章
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
676 11
|
JSON 运维 安全
当“企业微信iPad协议”潜入深夜值班室:一段代码引发的零号群风暴
深夜突现群聊异常,运维紧急排查发现:有人利用企业微信iPad协议将群控脚本植入系统,导致用户被反复踢出。追溯根源,为降本增效,团队此前绕开官方接口,自建网关解析iPad协议事件流,实现群自动化。但协议高自由度伴生风险,一次逻辑误判便引发雪崩。经加固幂等性、引入审计队列与双重签名,终控危机。技术无畏,亦需敬畏——能力越强,责任越重。
772 3
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
Shell Android开发 Python
微信多开脚本,微信双开器脚本插件,autojs开源代码分享
AutoJS脚本实现安卓端微信多开,通过无障碍服务 Python脚本提供跨平台解决方案,自动检测微信安装路径
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
672 2
|
XML 数据处理 数据安全/隐私保护
微信卡片生成器在线制作,微信xml链接代码,xml卡片生成器
这段代码实现了一个完整的数据处理程序,包含主程序、数据处理模块和工具模块。主程序负责启动和异常处理
微信养号脚本,导入手机号自动添加,autojs代码分享
这段代码实现了基本的微信自动添加好友功能,包括读取手机号文件、启动微信、搜索用户和发送