微信公众号模板消息群发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.MVC的模板标签系统(四)
Sep 05 PHP
如何写php程序?
Dec 08 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Tensorflow 实现释放内存
2020/02/03 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
python IP地址转整数
2020/11/20 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
美容师的职业规划书
2013/12/27 职场文书
个性发展自我评价
2014/02/11 职场文书
施工安全责任书范本
2014/07/24 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
消防演习感想
2015/08/10 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
php字符串倒叙
2021/04/01 PHP
Oracle创建只读账号的详细步骤
2021/06/07 Oracle