php实现微信公众号无限群发


Posted in PHP onOctober 11, 2015

利用微信客服接口进行各类消息的无限群发

sendAllMsg.php

<?php
  /*
    Author:yf
    使用说明:微信公众号无限群发接口,使用实例:   
    $test = new SendAllMsg("你的appId","你的appSecret");
    $test->sendMsgToAll(); //调用群发方法
    注:1.使用条件:认证号或测试号
      2.群发消息内容可为图文、文本、音乐等,$data具体内容参照微信开发文档/客服接口
      3.若用户量过万,需修改getUserInfo(),具体参照信开发文档/获取关注者列表
       
    新手上路,大神们多多指点,谢谢
  */
  interface iSendAllMsg{
    function getData($url); //curl 发送get请求
    function postData($url,$data); //curl 发送post请求
    function getAccessToken();  //在构造方法中已调用该方法来获取access_token,注意它在wx服务器的保存时间7200s
    function sendMsgToAll(); //群发消息方法,发送的消息$data 可自行修改
  }
  class SendAllMsg implements iSendAllMsg{
    private $appId; 
    private $appSecret;
    private $access_token;
    //
    public function __construct($appId, $appSecret) {
      $this->appId = $appId;
      $this->appSecret = $appSecret;
      $this->access_token = $this->getAccessToken();
    }
    //
    function getData($url){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
      curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
    }
    //
    function postData($url,$data){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
      curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $tmpInfo = curl_exec($ch);
      if (curl_errno($ch)) {
        return curl_error($ch);
      }
      curl_close($ch);
      return $tmpInfo;
    }
    //
    function getAccessToken(){
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appId."&secret=".$this->appSecret;
      $res = $this->getData($url);
      $jres = json_decode($res,true);
      $access_token = $jres['access_token'];
      return $access_token;
    }
    //
    private function getUserInfo(){
      $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$this->access_token;
      $res = $this->getData($url);
      $jres = json_decode($res,true);
      //print_r($jres);
      $userInfoList = $jres['data']['openid'];
      return $userInfoList;
    }
    function sendMsgToAll(){
      $userInfoList = $this->getUserInfo();
      $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$this->access_token;
      foreach($userInfoList as $val){
        $data = '{
              "touser":"'.$val.'",
              "msgtype":"text",
              "text":
              {
                "content":"测试一下,抱歉打扰各位"
              }
            }';
        $this->postData($url,$data);
      }
    }
  }
  $test = new SendAllMsg("YOURappId","YOURappSecret");
  $test->sendMsgToall();
   
?>

以上就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
PHP 字符串操作入门教程
Dec 06 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
PHP操作MySQL事务实例
Nov 05 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
php加密解密字符串示例
Oct 13 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 #PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 #PHP
刷新PHP缓冲区为你的站点加速
Oct 10 #PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 #PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 #PHP
PHP内存使用情况如何获取
Oct 10 #PHP
PHP中Session和Cookie是如何操作的
Oct 10 #PHP
You might like
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
js函数般调用正则
2008/04/08 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
获取body标签的两种方法
2011/10/13 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
使用Python发现隐藏的wifi
2020/03/04 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
用python绘制樱花树
2020/10/09 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
美国眼镜网:GlassesUSA
2017/09/07 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
项目施工员岗位职责
2014/03/09 职场文书
关于长城的导游词
2015/01/30 职场文书
中学生综合素质自我评价
2015/03/06 职场文书