微信公众号模板消息群发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效率,提高php性能的一些方法
Mar 24 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php生成随机颜色方法汇总
Dec 03 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
基于laravel belongsTo使用详解
Oct 18 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python中pyplot基础图标函数整理
2020/11/10 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
违反课堂纪律检讨书
2014/01/19 职场文书
《小池塘》教学反思
2014/02/28 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS
服务器nginx权限被拒绝解决案例
2022/09/23 Servers