微信公众号模板消息群发php代码示例


Posted in PHP onDecember 29, 2016

微信模板消息只能发给一个人,如果要群发,需要通过php循环,依次发送。

注意,如果模板消息发信息时有时无,不稳定,可能你的access_token令牌更新缓存不及时,过期了.可以根据日志文件查看.建议300秒更新一下.否则会很烦.

模板id需要自己去公众号中设置行业后得到.

<?php 
 //使用方法.直接在页面的逻辑中增加fahuo_wechat();即可.函数要事先引用. 
 function fahuo_wechat($shopid){ 
      if(_cfg("sendmobile")){ 
      $thisdb = System::load_sys_class("model"); 
      $access= getAccessToken();//模板id api等 
     
    $access_token=$access['access_token']; 
    $template_id = $access['template_id']; 
    $sql = "select * from `@#_member_go_record` where `shopid`='$shopid' and status = '已付款,未发货,未完成'"; 
    $row = $thisdb->GetList($sql); 
     
    $postUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$access_token"; 
    foreach($row as $k=>$v){ 
    $uid=$v['uid']; 
    $member_band = $thisdb->GetOne("SELECT b_code,b_data FROM `@#_member_band` WHERE `b_uid` = '$uid' and b_data!='' "); 
        //if(empty($member_band)){return false;} 
        //return $row ; 
      if(!empty($member_band['b_data'])){ 
 
$url=WEB_PATH."/mobile/user/buyDetail/".$shopid; 
$mobile=$v['company_money']; 
      $data = array( 
 
        "touser" => $member_band['b_code'],//一次只发一个人 
 
        "template_id"=>$template_id, 
 
        "url"=>$url,  
//回调 
        "data" => array( 
 
          'first' =>array( 
 
            "value"=>"您好,".$v['username'].",您的牌局已组建成功。", 
 
            "color"=>"#888", 
 
            ), 
 
          "keyword1"=>array( 
 
            "value"=>$v['shopname'], 
 
            "color"=>"#888", 
 
            ), 
//echo date('Y-m-d H:i:s',$itemlist[0]['q_end_time']) 
          "keyword2"=>array( 
 
            "value"=>date('Y-m-d H:i:s',$v['time']), 
 
            "color"=>"#888", 
 
            ), 
 
          "keyword3"=>array( 
 
            "value"=>"20分钟", 
 
            "color"=>"#888", 
 
            ), 
 
          "keyword4"=>array( 
 
            "value"=>round($v['moneycount'])."金豆", 
 
            "color"=>"#888", 
 
            ), 
 
          "keyword5"=>array( 
 
            "value"=>"待定", 
 
            "color"=>"#888", 
 
            ), 
 
          "remark"=>array( 
 
            "value"=>" 点击查看详情", 
 
            "color"=>"#054ff7", 
 
            ), 
 
        ), 
 
      ); 
  https_request($postUrl,json_encode($data),$mobile);//发货通知的内容.发给微信服务器   
    } 
       
       
    //发送的发货提示的字符串组合成功.准备发送.  
         
   
    } 
    } 
  } 
    //微信发货准备 
    
   function getAccessToken() { 
  // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 
  $path = G_CACHES.'access_token.json';   
   
  $data = json_decode(file_get_contents($path),true); 
  //print_r($data);exit; 
  if ($data['expire_time'] < time()) {//过期时间小于当前时间,说明过期,需要更新 
    $appid=$data['appid']; 
    $appsecret=$data['appsecret']; 
   $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; 
   $json=getCurl($url); 
   $data= json_decode($json,true); 
   //print_r($res);exit; 
   $access_token = $data['access_token']; 
   if ($access_token) { 
      $thisdb = System::load_sys_class("model"); 
    $wechat= $thisdb->GetOne("select * from `@#_wechat_config` where id = 1");// 获取appid 
     
    $data['expire_time'] = time() + 300;//5分钟更新一次.一天请求微信500多次,不超过2000次的限额就行.  
    //这里的300最好不要设置的过大.否则会经常提示令牌过期,没法发消息.官方说2小时过期.其实是骗人的.远远达不到. 
    $data['access_token'] = $access_token; 
    $data['template_id']=$wechat['template_id']; 
    $data['appid']=$wechat['appid']; 
    $data['appsecret']=$wechat['appsecret']; 
    $fp = fopen($path, "w"); 
    fwrite($fp, json_encode($data)); 
    fclose($fp); 
   } 
  }  
  return $data; 
 } 
  function https_request($url,$data = null,$mobile=''){ 
 
    $curl = curl_init();//初始化一个CURL会话 
 
    curl_setopt($curl, CURLOPT_URL, $url);//这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项 
 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
 
    if (!empty($data)){ 
 
      curl_setopt($curl, CURLOPT_POST, 1); 
 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
     //传递一个作为HTTP “POST”操作的所有数据的字符串。 
 
    } 
 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    //讲curl_exec()获取的信息以文件流的形式返回,而不是直接输出。 
 
    $output = curl_exec($curl); 
 
    if(!strstr($output,":0"))
  //如果微信发信后的回执中不包含:0,说明一定是没发送成功.所以要把不成功的放在日志中.方便找原因. 
{ 
$path1 = G_CACHES.'access_token2.json';//access_token2.json为日志保存目录,请对应修改. 
 file_put_contents($path1, $output,FILE_APPEND);//FILE_APPEND表示用追加的方式保存日志 
} 
 
    if(strstr($output,"40003")&&$mobile)//如果是40003说明,,客户没关注我们,发信息提醒他. 
{ 
_sendmobile($mobile,'请关注我们的公众号.否则收不到微信约牌通知,谢谢。');// 
} 
  
    curl_close($curl); 
 
    return json_decode($output); 
 
  } 
   
      //判断用户名是否是普通管理员 
 function is_gly($name){ 
if(strstr($name,"gly")) 
{ 
  return true; 
} 
else 
{ 
  return false; 
} 
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP网上调查系统
Oct 09 PHP
获取远程文件大小的php函数
Jan 11 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
php简单获取复选框值的方法
May 11 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
Laravel5中Cookie的使用详解
May 03 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 #PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 #PHP
PHP实现的XML操作类【XML Library】
Dec 29 #PHP
php常用字符函数实例小结
Dec 29 #PHP
php常用正则函数实例小结
Dec 29 #PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 #PHP
php常用数组函数实例小结
Dec 29 #PHP
You might like
德劲1102收音机的打理维修案例
2021/03/02 无线电
一个php导出oracle库的php代码
2009/04/20 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python下载文件时显示下载进度的方法
2015/04/02 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
利用Python获取操作系统信息实例
2016/09/02 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
贺卡寄语大全
2014/04/11 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
体育活动总结
2015/02/04 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL