网页版微信和微信公共号扫码登陆原理分析

看到知乎上有关于微信扫码登陆原理的讨论。

现将自己的分析结果写出来,供大家參考。不对的地方望指正。

              用户打开网页版微信: https://wx.qq.com/。微信为用户生成了一张包括uuid的二维码,然后前台向后台发送轮询请求。查询此uuid是否已被绑定上登录签名。

但假设uuid尚未绑定登录签名,后台不回马上返回结果,而是会堵塞30秒左右。在30秒内仍未扫描成功,后台会返回一个结果码。结果码的值为408,代表微信client尚未扫描。

  • 发送轮询请求,推断uuid是否绑定了用户的登陆签名

              轮询请求server

  • 假设30秒内用户未扫码。uuid未绑定用户的登陆签名。则后台返回结果码 window.code=408
              轮询请求详情

              30秒内用户尚未扫码

              假设用户30秒内。未完毕扫码。则前台会不停的发送请求。一旦微信扫码完毕,后台会直接返回结果,降低等待时间。扫码成功后,后台会返回结果码window.code=201.
              微信client扫码二维码后,client会向server发送uuid以及用户信息,以便绑定uuid和用户信息。
  •  微信client请求信息  

微信client请求信息

  •  扫码成功界面
             用户扫码成功
             扫码成功后。微信client会等待用户确认登陆。用户确认登陆后,微信服务端会为用户生成登陆签名,并将此签名与uuid进行绑定。

绑定完毕后,微信服务端会将此签名信息返回到前台,之后网页版微信便可通过此签名获取用户信息和微信信息。

  • 确认登陆后的网页响应信息

确认登陆后的响应信息 

              返回的结果码为:window.code=200,代表用户确认登陆成功。接着跳转到网页版微信的登陆页,并携带登陆签名和uuid。微信登陆服务收到这两个參数后。进行校验完毕登录。登陆成功后,跳转到网页版微信主页,用户便能够通过网页使用微信了。




--------------------------------------------------------------------------文毕----------------------------------------------------------------------------



              微信自身的扫码登陆功能,也能够通过开放接口。供第三方站点或应用使用。集成微信扫码登陆功能。详见我的上一篇文章二维码登陆。假设不想开发代码,能够到我的个人站点:http://it.maerdym.cn/mm_mishu.查看已完毕的微信扫码登陆功能。最近我会开发微信扫码登陆插件,供大家使用。



原文地址:https://www.cnblogs.com/mfmdaoyou/p/7018757.html