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


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

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

                  用户打开网页版微信: 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.查看已完毕的微信扫码登陆功能。最近我会开发微信扫码登陆插件,供大家使用。



  • 相关阅读:
    mysql数据索引
    JQuery学习
    (原创)JAVA多线程一传统多线程
    JAVA常用的XML解析方法
    java集合比较
    Hibernate总结3
    Hibernate总结4之HQL
    HDU5716, HDU5745【dp+bitset】
    Can of Worms 【迭代/线段树】
    CSU 1802 小X的战斗力【拓扑dp】
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7018757.html
Copyright © 2020-2023  润新知