微信网页版 二维码登录 原理剖析

用过微信的同学,大部分应该都知道这个功能,看起来挺神奇的~被问到了,就稍微研究了一下(过程大概是先自己描述,然后综合各方面的解读,尽量做最靠谱的还原)。

二维码登录

  1. 在PC端,打开登录页https://web.wechat.com/

这一步,经过我多次实验,每次的二维码全都是不相同的(之前我就是这一点没想到,啊呀)

那么就有合理的解释了:

打开网页的时候,PC端向Server发出这样一个请求:“有人想要使用网页版微信了~”,Server就把一个类似于UIID的东西发过来(我们看到的就是这个编码生成的二维码),UIID是一个唯一的编码,在请求到网页->扫面的这段时间里,这个页面一直在监听服务器端的登录请求。

  1. 使用移动端扫描二维码。

扫描其实是一个获取UIID的过程,之后会出现“请在移动端点击 确认”的页面,然后在移动端点击确认,由于移动端本身是已经登录的(有access_token),那么移动端将UIID+Token(组合编码)发送给Server。

  1. PC端页面显示登录成功。

Server接收到移动端的编码,解析之后,服务端生成登录的授权码,通知给正在监听的PC端页面,页面显示登录成功,并显示相应信息。

3

  1. 移动端显示登录成功。

PC端登录成功后发回给Server一个携带了UIID的类似200(OK)的确认信息,Server将此信息解析后发给移动端,移动端得到确认,显示确认界面。

这样,之后包括File Transfer的功能就很类似了。

总结

这样实际上就是C-S-C模式:

PC web端 --> Server <-- 移动端

图解如下:

类似的摇一摇传图的实现原理其实也是一样的,登录之后同样类似于File Transfer的原理,不过是动作不一样(一个是拖拽 触发,一个是摇晃 触发)。