微信二维码登录的原理
这是一个在问答社区里有人提出的问题。
有个叫“小奎”的网友是这样回答的:
碰巧我刚完成了一个这样的功能,简单说一下我是怎么实现的...
1.浏览器打开一个网页显示一个二维码,这个不用说了...关键是二维码的内容,这个内容就是要标识出当前这个连接的,也就是惟一key。这个惟一key除了要在二维码里保存,还要告诉浏览器知道。
2.浏览器再发起一个请求,根据惟一key,获取登录用户登录信息。
3.手机客户端上的微信扫描到二维码中的惟一key, 发起一个请求到服务端,告诉服务端,这个惟一key是合法的用户,是我的分身,于是网页客户端完成了登录 。
其实大家说的思路都是对的,但我的实现与大家稍微不同的一点是第二步,这步,我不是简单轮询,因为轮询的间隔太小的话,服务器压力太大,间隔大了的话,网页客户端登录就有延迟。这一步我用了long-polling。
其实TX的微信确实用了long-polling,首先要了解oauth2.0原理,移动端微信已经登录,获得access_token,再与扫描的二维码中的字符串进行组合编码,发送给服务器,服务器给浏览器网页的监听器发送消息,网页解析消息,并得到access_token,实现登录。
二维码只是充当一个掩码作用,具体方式可以登录wx.qq.com上来查看,首先用chrome打开调试界面,细致观察,你将会发现每隔30s,会发送一个 https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=x&tip=1&_=y 这样的一个请求地址。
解释:
x:个人id凭证
y:当前时间