admin管理员组

文章数量:1640453

我的小站

网页版微信扫码登录流程

1. 请求页面

先打开https://wx.qq/显示出页面,这时候会加载一堆的html,js等资源。

2. 获取会话UUID

微信Web版本不使用用户名和密码登录,而是采用扫描二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录。

使用get方法,通过请求地址:https://login.weixin.qq/j...

其中,时间戳这个值是当前距离林威治标准时间的毫秒。

get成功,则返回:window.QRLogin.code = 200; window.QRLogin.uuid = "AAAAAAAA"
其中的AAAAAAAA就是我们需要的uuid

3. 获取登录二维码

访问网址:https://login.weixin.qq/q...
这里的XXXXXXX就是我们刚才获取的uuid,这个网址直接显示的就是二维码,该二维码是有有效期的,有效期时长由微信服务端决定。

4. 查询是否扫描二维码登录

显示了二维码以后,用户必须用手机微信扫描这个二维码才能登录。(微信为啥要这么设计?很奇怪的思维。。。我用电脑很多情况不就是因为手机没在旁边吗。。。)

使用get方法,查询地址:https://login.weixin.qq/c...

这里的AAAAAAAA是我们刚才获取的uuid,时间戳同上。tip在第一次获取时应为1,其他次时为0.

如果服务器返回:

window.code=201,
window.userAvatar = base64:img/bbb

则说明此时用户在手机端已经完成扫描,并在网页端显示扫描人的头像。但还没有点击登录,继续使用上面的地址查询。

点击登录后,如果服务器返回:

window.code=200;
window.redirect_uri="https://wx.qq/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AZBAkjuOKc-2GAHcRBsKNuOt@qrticket_0&uuid=YbHBoVi8_w==&lang=zh_CN&scan=1504160545";

则说明此时用户在手机端已经确认登录,window.redirect_uri=后面的这个网址(暂称为BB)要记下来,接着要访问这个地址。

如果服务器返回:window.code=408,则说明等待超时,继续使用上面的地址查询。

5. 访问登录地址BB,获得uin、sid、pass_ticket、skey

用get方法,访问在上一步骤获得访问地址BB,并在参数后面加上:&fun=new,会返回一个xml格式的文本,类似这样:

    <error>
    <ret>0</ret>
    <message></message>
    <skey>@crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba</skey>
    <wxsid>n/5yTn844+kHkU66</wxsid>
    <wxuin>2799942121</wxuin>
    <pass_ticket>JOkd35AoEoi8MVx34qKT6xJVeaS8tT7mo8BFdGlKRfDGRCWKkKLW9DsrA%2BEJ34WM</pass_ticket>
    <isgrayscale>1</isgrayscale>
    </error>

  • skey是获取联系人信息的关键信息(比如获取好友(包括订阅的公众号)头像信息),标识当前人的身份。还是检查web端微信心跳的标识。发消息时也会使用。

  • pass_ticke

本文标签: 过程网页版微信扫码