PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】

2018-09-07 14:45

阅读:475

  本文实例讲述了PHP实现微信模拟登陆并给用户发送消息的方法。分享给大家供大家参考,具体如下:

   <?php /* 原作者:修改:Server getUserFakeid函数 获取fakeid的正则匹配公式 调用方式简单说明: $arr = array( account => 公众平台帐号, password => 密码 ); $w = new Weixin($arr); $w->getAllUserInfo();//获取所有用户信息 $w->getUserInfo($groupid, $fakeid);//获取所有用户信息,如果默认分组,则$groupid传0 $w->sendMessage(群发内容); //群发给所有用户 $w->sendMessage(群发内容,$userId); //群发给特定用户,这里的$userId就是用户的fakeid,数组方式传递password=>1259012345)); $w->sendMessage(hello, oXLujjp9y1311QldQKht7iyq83RM); exit; class Weixin { public $userFakeid;//所有粉丝的fakeid private $_account;//用户名 private $_password;//密码 private $url;//请求的网址 private $send_data;//提交的数据 private $getHeader = 0;//是否显示Header信息 private $token;//公共帐号;//主机 private $origin = 引用地址 private $cookie; private $pageSize = 100000;//每页用户数(用于读取所有用户) private $userAgent = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0; public function __construct($options){ $this->_account = isset($options[account])?$options[account]:; $this->_password = isset($options[password])?$options[password]:; $this->login(); } //登录 private function login(){ $url = 获取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=>请使用邮箱登陆))); case 10: die(json_encode(array(status=>1,errCode=>$match[1],msg=>该公众会议号已经过期,无法再登录使用))); case 0: //$this->userFakeid = $this->getUserFakeid(); break; } } if(preg_match(/^set-cookie:[\s]+([^=]+)=([^;]+)/i, $value,$match)){//获取cookie $this->cookie .=$match[1].=.$match[2].; ; } } } //单发消息 private function send($fakeid,$content){ $url = 单发消息 private function sendimg($fakeid,$mediaid){ $url = 群发消息 public function sendMessage($content=,$userId=) { if(!empty($userId)){ $json = json_decode($this->sendimg($userId,304019426)); /*if($json->ret!=0){ $errUser[] = $v; }*/ /*foreach($userId as $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 ); return json_encode($data);*/ } //获取所有用户信息 public function getAllUserInfo(){ foreach($this->userFakeid as $v){ $info[] = $this->getUserInfo($v[groupid],$v[fakeid]); } return $info; } //获取用户信息 public function getUserInfo($groupId,$fakeId){ $url = 获取所有用户fakeid private function getUserFakeid(){ ini_set(max_execution_time,600); $pageSize = 100; $this->referer = ,\t,\n,\r), , $user); preg_match_all(%id:(.*?),%si, $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 */ private function curlPost($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; } private function vget($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相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

  希望本文所述对大家PHP程序设计有所帮助。


评论


亲,登录后才可以留言!