微信公众号模板消息群发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 empty函数报错解决办法
Mar 06 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
laravel邮件发送的实现代码示例
Jan 31 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHP获取当前时间不准确问题解决方案
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连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
javascript一点特殊用法
2008/05/28 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
学Python 3的理由和必要性
2019/11/19 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
优秀教师获奖感言
2014/01/31 职场文书
人事部岗位职责范本
2014/03/05 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
宣传稿格式范文
2015/07/23 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
Mysql binlog日志文件过大的解决
2021/10/05 MySQL