微信公众号模板消息群发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 4.2书写安全的脚本
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php生成数字字母的验证码图片
Jul 14 PHP
PHP MSSQL 分页实例
Apr 13 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 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之PHP语法学习笔记1
2006/12/17 PHP
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
Async/Await替代Promise的6个理由
2019/06/15 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python实现求最长回文子串长度
2018/01/22 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
为什么python比较流行
2020/06/19 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
教师的实习鉴定
2013/12/15 职场文书
生产班组长岗位职责
2014/01/05 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
《满井游记》教学反思
2014/02/26 职场文书
公司委托书格式
2014/08/01 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书