更新
不知道是不是因为网页版微信的console.log问题被发现(可以看看知乎这里),中秋假期里出了新版本,有一些地方改了。但具体哪里改了还没时间去深究,不过可以发现同步更新的时间间隔改成了25s,如下图:
可以对比原来的27s间隔(点我)
有发现其他改变的地方的朋友有兴趣的话可以提出来,大家一起交流。
2016-09-20更新
因为项目需要,对网页版微信的通信过程做了一番研究。以下是探索过程中的分析笔记。
登录
1. 获取UUID
首先,我们打开浏览器端发起登陆请求,系统返回一个唯一的uid,并将uid的信息绘制成二维码返回给用户。
请求:
url | https://login.wx.qq.com/jslogin |
---|---|
method | GET |
Params | appid:wx782c26e4c19acffb,应用ID (固定值)redirect_uri: https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage fun : new lang : en_US 或 zh_CN,浏览器的语言 _ : 1466394395577,时间戳(ms,js中的实现为new Date) |
%2F是’/ ‘的URL编码
返回数据(String):
window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"
如下:
2. 显示二维码
得到uuid之后,请求二维码:
https://login.weixin.qq.com/qrcode/wYGuImiikg==
返回的数据:
一张二维码图片
3. 等待扫码登录
url | https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login |
---|---|
method | GET |
params | loginicon : true uuid : 获取到的uuid tip : 1-未扫描 0-已扫描 r : 1698811404(时间戳取反,js中的实现:~new Date) _ : 时间戳 |
返回数据(String):
window.code=xxx;
xxx值可以是:
408 登陆超时
201 扫描成功
200 确认登录
如下:
(1)如果一直没有扫描,则得到408返回码
(2)扫描成功后,得到201返回码:
扫描成功后网页上会出现你的账号头像,userAvatar后面的字符串是将要登录账号的头像(直接将userAvatar后面的字符串放入地址栏就可以得到你的头像)
(3)登录成功,得到200返回码:
登录成功后的返回数据(String):
window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AXMhC-q8hFm1YagQCIfejW0W@qrticket_0&uuid=wYGRJ91k7A==&lang=en_US&scan=1466408041";
PS:scan值为时间戳(s),js中的实现为Date.now()
登录成功之前,每隔27s左右就会重新确认状态,如下:
4. 获取登录参数(uin、skey、sid、pass_ticket)
请求:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=ATB6rg04PsHA1mpklaCZd2Tu@qrticket_0&uuid=AaGxsJd1kQ==&lang=zh_CN&scan=1467183053&fun=new&ve