微信公众号模板消息群发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对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 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下使用无限生命期Session的方法
2007/03/16 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
一些常用的Python爬虫技巧汇总
2016/09/28 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
对pandas中Series的map函数详解
2018/07/25 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Python可以实现栈的结构吗
2020/05/27 Python
python中@contextmanager实例用法
2021/02/07 Python
应届中专生自荐书范文
2014/02/13 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
计划生育诚信协议书
2014/11/02 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang