php 实现微信模拟登陆、获取用户列表及群发消息功能示例
本文实例讲述了php实现微信模拟登陆、获取用户列表及群发消息功能。分享给大家供大家参考,具体如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | <?phpheader('Content-Type: text/html; charset=UTF-8');/*调用方式简单说明: $arr = array(  'account' => '公众平台帐号',  'password' => '密码');$w = new Weixin($arr);print_r($w->getAllUserInfo());//获取所有用户信息$w->getUserInfo($groupid, $fakeid);//获取所有用户信息,如果默认分组,则$groupid传0$w->sendMessage('群发内容'); //群发给所有用户$w->sendMessage('群发内容',$userId); //群发给特定用户,这里的$userId就是用户的fakeid,数组方式传递*/classWeixin {  public$userFakeid;//所有粉丝的fakeid  private$_account;//用户名  private$_password;//密码  private$url;//请求的网址  private$send_data;//提交的数据  private$getHeader= 0;//是否显示Header信息  private$token;//公共帐号TOKEN  private$host= 'mp.weixin.qq.com';//主机  private$referer;//引用地址  private$cookie;  private$pageSize= 100000;//每页用户数(用于读取所有用户)  private$userAgent= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';  publicfunction__construct($options){    $this->_account = isset($options['account'])?$options['account']:'';    $this->_password = isset($options['password'])?$options['password']:'';    $this->login();  }  //登录  privatefunctionlogin(){    $this->send_data = array(      'username'=> $this->_account,      'pwd'=> md5($this->_password),      'f'=> 'json'    );    $this->getHeader = 1;    $result= explode("\n",$this->curlPost($url));    foreach($resultas$key=> $value) {      $value= trim($value);      if(preg_match('/token=(\d+)/i', $value,$match))      {        //获取token        $this->token = trim($match[1]);      }      if(preg_match('/"ret":(.*)/i', $value,$match)){//获取token        switch($match[1]) {          case-1:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"系统错误")));          case-2:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"帐号或密码错误")));          case-3:            die(urldecode(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>urlencode("密码错误")))));          case-4:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"不存在该帐户")));          case-5:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"访问受限")));          case-6:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"需要输入验证码")));          case-7:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"此帐号已绑定私人微信号,不可用于公众平台登录")));          case-8:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"邮箱已存在")));          case-32:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"验证码输入错误")));          case-200:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"因频繁提交虚假资料,该帐号被拒绝登录")));          case-94:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"请使用邮箱登陆")));          case10:            die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"该公众会议号已经过期,无法再登录使用")));          case0:            $this->userFakeid = $this->getUserFakeid();            break;        }      }      if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $value,$match)){//获取cookie        $this->cookie .=$match[1].'='.$match[2].'; ';      }    }  }  //单发消息  privatefunctionsend($fakeid,$content){    $this->send_data = array(        'type'=> 1,        'f'=> 'json',        'action'=> 'sync',        'content'=> $content,        'tofakeid'=> $fakeid,        'token'=> $this->token,        'ajax'=> 1,      );    $this->referer = 'https://mp.weixin.qq.com/cgi-bin/singlemsgpage?token='.$this->token.'&fromfakeid='.$fakeid.'&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN';    return$this->curlPost($url);  }  //群发消息  publicfunctionsendMessage($content='',$userId='') {    if(is_array($userId) && !empty($userId)){      foreach($userIdas$v){        $json= json_decode($this->send($v,$content));        if($json->ret!=0){          $errUser[] = $v;        }      }    }else{      foreach($this->userFakeid as$v){        $json= json_decode($this->send($v['fakeid'],$content));        if($json->ret!=0){          $errUser[] = $v['fakeid'];        }      }    }    //共发送用户数    $count= count($this->userFakeid);    //发送失败用户数    $errCount= count($errUser);    //发送成功用户数    $succeCount= $count-$errCount;    $data= array(      'status'=>0,      'count'=>$count,      'succeCount'=>$succeCount,      'errCount'=>$errCount,      'errUser'=>$errUser    );    returnjson_encode($data);  }  //获取所有用户信息  publicfunctiongetAllUserInfo(){    foreach($this->userFakeid as$v){      $info[] = $this->getUserInfo($v['groupid'],$v['fakeid']);    }    return$info;  }  //获取用户信息  publicfunctiongetUserInfo($groupId,$fakeId){    $url= "https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid={$fakeId}";    $this->getHeader = 0;    $this->referer = 'https://mp.weixin.qq.com/cgi-bin/contactmanagepage?token='.$this->token.'&t=wxm-friend&lang=zh_CN&pagesize='.$this->pageSize.'&pageidx=0&type=0&groupid='.$groupId;    $this->send_data = array(      'token'=>$this->token,      'ajax'=>1    );    $message_opt= $this->curlPost($url);    return$message_opt;  }  //获取所有用户fakeid  privatefunctiongetUserFakeid(){    ini_set('max_execution_time',600);    $pageSize= 1000000;    $this->referer = "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$this->token}";    $url= "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize={$pageSize}&pageidx=0&type=0&groupid=0&token={$this->token}&lang=zh_CN";    $user= $this->vget($url);    $preg= "/\"id\":(\d+),\"nick_name\"/";    preg_match_all($preg,$user,$b);    $i= 0;    foreach($b[1] as$v)    {      $arr[$i]['fakeid'] = $v;      $arr[$i]['groupid'] = 0;      $i++;    }    return$arr;  }  /**   * curl模拟登录的post方法   * @param $url request地址   * @param $header 模拟headre头信息   * @return json   */  privatefunctioncurlPost($url) {    $header= array(      'Accept:*/*',      'Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3',      'Accept-Encoding:gzip,deflate,sdch',      'Accept-Language:zh-CN,zh;q=0.8',      'Connection:keep-alive',      'Host:'.$this->host,      'Origin:'.$this->origin,      'Referer:'.$this->referer,      'X-Requested-With:XMLHttpRequest'    );    $curl= curl_init(); //启动一个curl会话    curl_setopt($curl, CURLOPT_URL, $url); //要访问的地址    curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置HTTP头字段的数组    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //从证书中检查SSL加密算法是否存在    curl_setopt($curl, CURLOPT_USERAGENT, $this->userAgent); //模拟用户使用的浏览器    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //使用自动跳转    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自动设置Referer    curl_setopt($curl, CURLOPT_POST, 1); //发送一个常规的Post请求    curl_setopt($curl, CURLOPT_POSTFIELDS, $this->send_data); //Post提交的数据包    curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); //读取储存的Cookie信息    curl_setopt($curl, CURLOPT_TIMEOUT, 30); //设置超时限制防止死循环    curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); //显示返回的Header区域内容    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //获取的信息以文件流的形式返回    $result= curl_exec($curl); //执行一个curl会话    curl_close($curl); //关闭curl    return$result;  }  privatefunctionvget($url){ // 模拟获取内容函数    $header= array(        'Accept: */*',        'Connection: keep-alive',        'Host: mp.weixin.qq.com',        'Referer: '.$this->referer,        'X-Requested-With: XMLHttpRequest'    );    $useragent= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';    $curl= curl_init(); // 启动一个CURL会话    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址    curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置HTTP头字段的数组    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在    curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模拟用户使用的浏览器    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer    curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的GET请求    curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); // 读取上面所储存的Cookie信息    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环    curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); // 显示返回的Header区域内容    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回    $tmpInfo= curl_exec($curl); // 执行操作    if(curl_errno($curl)) {      // echo 'Errno'.curl_error($curl);    }    curl_close($curl); // 关闭CURL会话    return$tmpInfo; // 返回数据  }} | 
php 实现微信模拟登陆、获取用户列表及群发消息功能示例的更多相关文章
- nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId
		nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ... 
- Ceph Object Gateway Admin api  获取用户列表问题
		按照官方文档使用Admin Ops API 获取用户列表 GET /admin/user时 返回{code: 403, message: Forbidden}这里有两个问题:首先用户列表的请求为 如下 ... 
- 微信OAuth授权获取用户OpenId-JAVA(个人经验)【申明:来源于网络】
		微信OAuth授权获取用户OpenId-JAVA(个人经验)[申明:来源于网络] 地址:https://my.oschina.net/xshuai/blog/293458 
- [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息
		因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ... 
- 基于微信小程序的用户列表点赞功能
		代码地址如下:http://www.demodashi.com/demo/13997.html 一.前言 (1).适合人群 1.微信小程序开发者 2.前端工程师 3.想入门学习小程序开发的人员 4.想 ... 
- 图解微信小程序---获取电影列表
		图解微信小程序---获取电影列表 代码笔记 list跳转 第一步:编写前端页面获取相关的电影列表参数(对于显示参数不熟悉,可以先写js,通过console Log的方式获取我们电影的相关数据字段,后 ... 
- 微信小程序 获取用户信息并保存登录状态
		微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml 
- Laravel wxxcx 微信小程序获取用户信息
		wxxcx 是Laravel5微信小程序登录获取用户信息扩展 部署 12345678 # 安装$ composer require iwanli/wxxcx# 注册服务# 在 /config/app. ... 
- 微信获取用户列表的json字符串解析
		今天学习微信遇到一个json的解析,但是因为自己的模型思维和思考能力很差一直困扰最后经过询问解决的问题,其实问题很简单总结起来就是json的解析: 注释:今天主要是讲怎样解析json的所以其他方法就只 ... 
随机推荐
- dbUtils 原理
			// Jdbc 的增,删, 改流程类似,只是参数不同, 因此可以向上抽取 public class Demo{ // Jdbc 的增加 public void addStu(Stu stu){ Con ... 
- MySQL中哈希表
			也称为散列表 由直接寻址表改进而来.先看直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.加入某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,...,m-1}的 ... 
- 使用git工具上传项目到github步骤
			这里记录一下上传项目到github的步骤.使用的工具是Git bash. 1.登陆github,没有账户就注册一个,新建一个Repository(仓库). 2.绑定用户. 因为Git是分布式版本控制系 ... 
- checked 和 unchecked 基元类型操作
			对基元类型执行的许多算术运算都可能造成溢出: Byte b = ; b = (Byte) (b + ); // b 现在包含 44(或者十六进制值 2C) 重要提示:执行上述算术运算时,第一步要求所有 ... 
- python——异常
			一.什么是异常 1.错误 从软件方面来说,错误是语法或是逻辑上的.错误是语法或是逻辑上的. 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译.这些些错误必须在程序执行前纠正. 当程 ... 
- 设置linux下shell显示不同颜色的字体
			实例代码如下: #!/bin/bash clear echo -e "\033[1m Hello World" # bold effect echo -e "\033[5 ... 
- settings配置  文件操作
			设置文件路径 import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 这里用到了python中一个神奇的变量 __file__ ... 
- JAVA中遍历Map和Set方法,取出map中所有的key
			Java遍历Set集合 1.迭代器遍历: Set<String> set = new HashSet<String>(); Iterator<String> it ... 
- Mac 环境 下使用Charles 抓包Http/Https请求
			实现目标 在Mac 上 对 iOS 真机 和 模拟器 进行 Http/Https抓包 使用工具 Mac 上 Charles 4.2 安装 参考链接 1. 和 链接 2. 抓包 http 请求 (1 ... 
- iOS  oc  调用 swift
			如股票oc要调用swift里面的代码 需要包含固定这个头文件 项目名称 LiqunSwiftDemo-Swift.h #ProjectName#-Swift.h 固定的写法 swift 目的 是取代o ... 
