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 相关文章推荐
PHP新手上路(九)
Oct 09 PHP
php 404错误页面实现代码
Jun 22 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 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去除字符串换行符示例分享
2014/02/13 PHP
浅谈php提交form表单
2015/07/01 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Django 视图层(view)的使用
2018/11/09 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python游戏地图最短路径求解
2019/01/16 Python
python如何获取apk的packagename和activity
2020/01/10 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
什么是GWT的Module
2013/01/20 面试题
公司合作意向书
2014/04/01 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
质检员岗位职责
2015/02/03 职场文书
车队安全员岗位职责
2015/02/15 职场文书
基层党支部承诺书
2015/04/30 职场文书
公司文体活动总结
2015/05/07 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis