注明:番外篇,非微信官方正式接口不推荐使用...........(骚年们,慎用);
在微信开发中,为了获取用户的信息,公众账号的一些信息,除了通过官方给出的接口外,还可以通过"非法手段"通过模拟登陆进行获取数据(PHPCURL,或者是借助snoopy类库);下面示例通过模拟登陆获取公众账号信息(借助于snoopy类库),在做模拟登陆获取数据之前,你需要了解一下http知识,一些抓包软件(这里LZ使用的是chrome的F12进行分析...主要是不会用各种抓包工具),打开php的curl扩展等.
1.通过模拟登陆 获取 TOKEN(万恶的TOKEN) 和 cookie
主要步骤 1. 下载snoopy,直接Google即可找到下载链接,页面中引入snoopy,snoopy类使用方法请自行Google
2. 打开公众平台登陆页面 进行抓包分析!
可以看到,在登陆是微信将发送 username,pwd,imgcode,f 三个参数到 http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN URL上. username, pwd 即微信公众账号的登陆邮箱和密码.imgcode 参数可以不用理会;pwd需要用MD5进行加密
核心代码如下:
$snoopy = new Snoopy();
$submit = "http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";
$snoopy->referer = "http://mp.weixin.qq.com/";
$snoopy->rawheaders["Origin"] = "http://mp.weixin.qq.com";
$snoopy->rawheaders["Host"] = "mp.weixin.qq.com";
$snoopy->rawheaders["Pragma"] = "no-cache";
$post["username"] = $user;
$post["pwd"] = md5($pwd);
$post['imgcode'] = '';
$post["f"] = "json";
$snoopy->submit($submit,$post);
//取出token
$rs = json_decode($snoopy->results,true);
preg_match('/token=(\d+)/',$rs['redirect_url'],$token);
//取得token[1]就是token值
$cookie = '';
foreach ($snoopy->headers as $key => $value) {
$value = trim($value);
if(strpos($value,'Set-Cookie: ') || strpos($value,'Set-Cookie: ') === 0){
$tmp = str_replace("Set-Cookie: ","",$value);
$tmp = str_replace("Path=/","",$tmp);
$cookie .= $tmp.';';
}
}
if(strlen($cookie) > 20){
$a['cookie'] = $cookie;
$a['token'] = $token[1];
$this->cookie = $cookie;
$this->token = $token[1];
$this->results = $a;
return $a; //返回数组
}else{
return false;
}
返回的数组$a 即 COOKIE 和 TOKEN;微信机制是TOKEN在7200S 之后自动过期.
修改 微信更新后 继续使用http无法获取到数据 需要采用http 443端口 需要使用snoopy 2.0版本 snoopy 1.*版本 win环境下不支持https协议..................
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。