微信公众号模板消息群发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 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
Smarty模板变量调节器用法分析
May 23 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP生成随机码的思路与方法实例探索
Apr 11 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 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
php模板函数 正则实现代码
2012/10/15 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
js函数调用的方式
2014/05/06 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
vue实现图书管理系统
2020/12/29 Vue.js
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
简单介绍Ruby中的CGI编程
2015/04/10 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
师范生实习的个人自我鉴定
2013/10/20 职场文书
教师实习自我鉴定
2013/12/11 职场文书
《赶海》教学反思
2014/04/20 职场文书
法定代表人授权委托书
2014/09/19 职场文书
导师工作推荐信
2015/03/27 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
农村老人去世追悼词
2015/06/23 职场文书
同学联谊会邀请函
2019/06/24 职场文书
导游词之日本富士山
2020/01/06 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
MySQL触发器的使用
2021/05/24 MySQL