微信公众账户模拟登陆后的一系列操作
<?php header("content-type:text/html;charset=utf-8"); /** * wx_mass * * 完成微信公众账户模拟登陆后的一系列操作 * mass($content) 调用微信群发接口,群发文本信息 * getUserList($page,$pagesize,$group) 获取用户信息 * * 群发demo * * $user=array('account'=>'公众账户名称','password'=>'密码'); * $obj=new wx_mass($user); * $obj->mass('感谢您关注优乐购物,这条消息是由测试程序发出,给你带来不便,敬请谅解!'); * * @package wxdl * @author 我好笨 * @copyright 2014 * @version $Id$ * @access public */ class wx_mass { private $_cookiefile; private $_cookieexpired = 3600; private $_account; private $_password; private $_token; public function __construct($options) { $this->_account = isset($options['account'])?$options['account']:''; $this->_password = isset($options['password'])?$options['password']:''; //必须使用绝对路径 $this->_cookiefile=dirname(__FILE__).'/temp/'.md5($this->_account);//此处需要创建一个文件夹装cookie文件 $this->getCookie(); } /** * wx_mass::mass() * * 微信群发功能 * * @param mixed $content 群发内容 * @return 成功返回ture,失败返回fasle */ public function mass($content) { $refer="https://mp.weixin.qq.com/cgi-bin/masssendpage?t=mass/send&token=".$this->_token."&lang=zh_CN"; $submit="https://mp.weixin.qq.com/cgi-bin/masssend"; $post['ajax']=1; $post['city']=''; $post['content']=$content; $post['country']=''; $post['f']='json'; $post['groupid']=-1; $post['imgcode']=''; $post['lang']='zh_CN'; $post['province']=''; $post['random']=$this->randomFloat(0,1); $post['sex']=0; $post['synctxnews']=0; $post['synctxweibo']=0; $post['t']='ajax-response'; $post['token']=$this->_token; $post['type']=1; $tmpInfo=$this->curl($submit,$refer,false,true,$post); $result = json_decode($tmpInfo,true); if (!isset($result['base_resp']) || $result['base_resp']['ret'] != 0) { return false; } return true; } /** * wx_mass::getUserList() * * 根据分组ID获取用户列表 * * @param integer $page * @param integer $pagesize * @param integer $groupid * @return */ public function getUserList($page=0,$pagesize=10,$groupid=100) { $t = time().strval(mt_rand(100,999)); $referer = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=".$pagesize."&pageidx=".$page."&type=0&groupid=0&lang=zh_CN&token=".$this->_token; $submit = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=".$pagesize."&pageidx=".$page."&type=0&groupid=$groupid&lang=zh_CN&f=json&token=".$this->_token; $result=$this->curl($submit,$referer); $json = json_decode($result,true); if(isset($json['contact_list'])) { $json = json_decode($json['contact_list'],true); if(isset($json['contacts'])) { return $json['contacts']; } } return false; } /** * wx_mass::login() * * 模拟登陆 * * @return void */ private function login() { $submit = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN"; $refer = "https://mp.weixin.qq.com/"; $post["username"] = $this->_account; $post["pwd"] = md5($this->_password); $post["f"] = "json"; $post["imgcode"] = ""; $tmpInfo=$this->curl($submit,$refer,true,true,$post); $result = json_decode($tmpInfo,true); if (!isset($result['base_resp']) || $result['base_resp']['ret'] != 0) { return false; } preg_match("/token=(\d+)/i",$result['redirect_url'],$matches); if($matches) { $this->_token = $matches[1]; } } /** * wx_mass::curl() * * @param mixed $submit curl访问目标URL * @param mixed $refer 伪造的refer * @param bool $write_cookie 读写cookie,true为保存,false为读取 * @param bool $is_post 是否post提交数据,true为提交数据,提交数据时,$post为提交的值 * @param mixed $post is_post为真时,提交的数据 * @return 返回curl执行结果 */ private function curl($submit,$refer,$write_cookie=false,$is_post=false,$post=array()) { $ch = curl_init(); // 启动一个CURL会话 curl_setopt($ch, CURLOPT_URL, $submit); // 要访问的地址 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_SSLVERSION, 3); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器 curl_setopt($ch, CURLOPT_REFERER, $refer); if($is_post) { curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Post提交的数据包 } curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 if($write_cookie && file_exists($this->_cookiefile)) { @unlink($this->_cookiefile); } if($write_cookie) { curl_setopt($ch,CURLOPT_COOKIEJAR,$this->_cookiefile); } else { curl_setopt($ch, CURLOPT_COOKIEFILE, $this->_cookiefile); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $tmpInfo = curl_exec($ch); // 执行操作 var_dump($tmpInfo); if(curl_errno($ch)) { $tmpInfo='Errno'.curl_error($ch);//捕抓异常 } curl_close($ch); // 关闭CURL会话 return $tmpInfo; } /** * wx_mass::getCookie() * * 获取cookie,检测cookie有效性 * * @return void */ private function getCookie() { //登录获取cookie及token $this->login(); } private function randomFloat($min = 0, $max = 1) { return $min + mt_rand() / mt_getrandmax() * ($max - $min); } } $arr = array("account"=>"公众账户名称","password"=>"密码"); $aar = new wx_mass($arr); $abc = $aar -> getUserList(); var_dump($abc); ?>