微信公众平台模拟登陆和发送消息详解 您所在的位置:网站首页 微信虚拟号怎么登陆 微信公众平台模拟登陆和发送消息详解

微信公众平台模拟登陆和发送消息详解

2024-07-18 03:30| 来源: 网络整理| 查看: 265

      腾讯过于坑爹,看起来叫开放平台,其实有很多限制,为了实现某些功能,本人也只好铤而走险,从此踏上了模拟登陆的不归路,百度了无数的网页,不过由于腾讯的不停调整,那些代码都已经失效了,看过了不少风格迥异的代码,渐渐有了清晰的思路,在这里以微信公众平台为例写一篇思路详细的模拟登陆技术文章,希望可以让后来者少走弯路,这些代码实在各位大神的代码基础上修改完成的,其实也要感谢微信公众平台的加密并没弄得很复杂,要不然还真搞不定。

      先来介绍浏览器浏览网页的大致原理,浏览器发送一段请求给服务器,服务器收到请求后,发送网页给浏览器,浏览器记下Cookie,并解析网页,最后展示给电脑前的你。所以所谓的模拟登陆就是模仿浏览器向服务器骗取信息。

      首先打开mp.weixin.qq.com进入微信公众平台首页,按下F12调出开发者工具,(IE的优势更体现在这里,真心觉得ie的开发者工具很强大,而且再装个HttpWatch插件就无敌了),这里以遨游为例(因为简单),按下f12,进入源代码选项,打开按ctrl+O选择名字为wxm2-loginform1ec5f7.js的源代码,

然后找到这段代码

[javascript]  viewplain copy t.post("/cgi-bin/login?lang=zh_CN", {"font-family: Arial, Helvetica, sans-serif;">username: e.account,pwd: t.md5(e.password.substr(0, 16)),imgcode: c.data("isHide") ? "" : e.verify,f: "json"}   这段就是登陆的时候用来提交账号和密码用的,username就是用户名,pwd就是密码,而且使用MD5加密过的,imgcode就是验证码,不过由于只要账号密码正确,就不需要输入验证码,接下来就是把这段东西稍作处理发给微信服务器就能登陆了。

 

[php]  viewplain copy function cookie(){   $post['username']=$this->username;             //账号,这个是类的成员,具体声明见完整的源代码,后面的也是   $post['pwd']=md5($this->password);              //密码   $post['f']='json';   $post['imgcode']='';   $login_url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN';    //见下文解释   $cookie_file = tempnam('./temp','cookie');                           //设置cookie保存地址   $ch = curl_init($login_url);                                         //php是curl技术,需要服务器支持(新浪sae支持这个技术)   curl_setopt($ch,CURLOPT_REFERER,'https://mp.weixin.qq.com/');        //跳转地址,见下文   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');                                                                       //浏览器代理,可以理解为模仿某种浏览器向服务器发送消息   curl_setopt($ch, CURLOPT_HEADER, 0);                                //不注释的大家可以自行百度,我个人没他们讲的专业   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   curl_setopt($ch, CURLOPT_MAXREDIRS, 1);   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   curl_setopt($ch, CURLOPT_AUTOREFERER, 1);   curl_setopt($ch, CURLOPT_POST, 1);   curl_setopt($ch, CURLOPT_POSTFIELDS, $post);                         //这里就是提交账号密码的地方   curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);                   //cookie   $contents = curl_exec($ch);                                           [php]  viewplain copy preg_match('/[\?\&]token=(\d+)"/',$contents,$t);       //这个是正则表达式,具体用法我也不是很熟悉,可参照网上的语法规则和检测工具来验证自己                                               // 写的正不正确,这里是为了从刚才返回的信息中吧token的值抠出来               self::$token=$t[1];   curl_close($ch);                                         //其实到这里模拟登陆就已经结束了,不过不搞搞其他东西就一点也不好玩      $cookie_wenjain = file_get_contents($cookie_file);   $cookie_wenjain = str_replace("\n","",$cookie_wenjain);   $cookie_wenjain = str_replace("\t","",$cookie_wenjain);   $cookie_wenjain = str_replace("\r","",$cookie_wenjain);   preg_match_all('/data_bizuin(.*)mp/isU',$cookie_wenjain,$slave_user_lists);   $data_bizuin = $slave_user_lists[1][0];   preg_match_all('/data_ticket(.*)mp/isU',$cookie_wenjain,$slave_user_lists);   $data_ticket = $slave_user_lists[1][0];   preg_match_all('/slave_user(.*)mp/isU',$cookie_wenjain,$slave_user_lists);   $slave_user = $slave_user_lists[1][0];   preg_match_all('/slave_sid(.*)=/isU',$cookie_wenjain,$slave_sid_lists);   $slave_sid = $slave_sid_lists[1][0];   $cookie = "data_ticket=".$data_ticket.";data_bizuin=".$data_bizuin.";slave_user=".$slave_user.";slave_sid=".$slave_sid."=";   unlink($cookie_file);   self::$cookie = str_replace("#HttpOnly_","",$cookie);//将信息保存在$cookie里           }  

 

接下来讲解上面的$login_url和refer网址是怎么找出来的了,进入开发者工具网络选项卡,然后在微信网页上用错误的密码登陆,找到post的那条信息,     

 那个请求url和refer就分别对应上面的两项,因为当初那个大神的代码上refer是另一个网址,因此我不禁怀疑是不是因为我没有登录,跳转的网页才不正确,可是如果登陆了,浏览器就调到另一个网页上去了,那些监控的信息就会被清空,这个时候就要靠HttpWatch,它可以记录所有的信息,这次正常登陆,结果显示这个refer是正确的,       

之所以与大神不同可能是,腾讯的调整或者refer根本就不是这么找的。接下来介绍怎么用这玩样发送信息,每个微信都有一个独一无二的fakeid,微信公众平台就是根据这个来给大家发送信息的,所以我们就来搜集所有收听者的fakeid,

 

[php]  viewplain copy  function getUserFakeid()          {           //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=".self::$token;                //$url = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize={$pageSize}&pageidx=0&type=0&groupid=0&t//oken=".self::$token."&lang=zh_CN";                //$user = $this->vget($url);                //$preg = "/\"id\":(\d+),\"name\"/";                //preg_match_all($preg,$user,$b);                //$i = 0;                //foreach($b[1] as $v){                //$url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid='//.$v.'&token='.$this->token.'&lang=zh_CN';                                                                                                   $j=1;$page=15;//因为对代码进行了不小的修改,上面那些有些利用价值的注释就不删了,上面可以获取订阅者的分组信息,以便搜集到所有的fakeid,以下                             是以默认分组进行举例          //$mysql = new SaeMysql();           //这个是新浪sae的mysql,因为大家也许都不用就把它注释掉了,如果需要可解除注释          for($i=0;$i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有