移动开发之实现微信QQ二维码登录原理的示例分析

  介绍

这篇文章主要介绍移动开发之实现微信QQ二维码登录原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

  在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用开始多起来,这里先说下啥是二维码,其实二维码就是存了二进制数据的黑白图片,当出现要求二维码登录的时候,服务器会生成一条临时的唯一的二维码信息,发送到客户端以二维码(图片)的形式写入到网页,然后你就会看到统一的四个方形的二维码,如果做的好这个二维码信息应该是有时效的,这里暂且不考虑这些,就简单的微信登录作为例子看看吧:

移动开发之实现微信QQ二维码登录原理的示例分析

首先说下整个授权流程

移动开发之实现微信QQ二维码登录原理的示例分析

在客户端网页中会不断向服务器发送https连接,并且这里传输很少的数据之后就断开连接了,下面看下微信网页中这个login1c709c。js文件:

(函数(美元,_aoWin), {   ,=,_aoWin.QRLogin , {};=,_aoWin.LoginLog “,“;   ,var  _sBaseHost =,““,=,_oLoginQrCodeImg  . getelementbyid (“loginQrCode");   ,if  (document.domain ==,“qq.com"), {=,_sBaseHost “weixin.qq.com";   ,}else 如果(location.hostname.match(/(微信\ com)/美元)){=,_sBaseHost “wechat.com";   ,其他}{=,_sBaseHost “wechatapp.com";   ,}   ,   ,var  show_tip =, 1,   _sCurUUId,   _oResetTimeout,=,_aWebMMCallbacks  [],=,,_oDetactWebMMInterval  setInterval(函数(){   如果才能(_aoWin.WebMM) {   clearInterval才能(_oDetactWebMMInterval);   var 才能,回调;   而才能(callback =, _aWebMMCallbacks.shift ()) {   ,,如果(typeof(回调),!=,“function"),继续;   ,,回调();   ,,}   ,,}   ,},1000);   ,   ,function  _logInPage (_asLog) {=,,_aoWin.LoginLog  LoginLog  +, _asLog  +,“\ n";   ,}   ,   ,function  _afterLoadWebMMDo(回调){   ,如果(! _aoWin.WebMM) {   _aWebMMCallbacks.push才能(回调);   ,其他}{   ,,回调();   ,}   ,}   ,   ,function  _reportNow(文本){   ,_logInPage(文本);   ,_afterLoadWebMMDo(函数(){   WebMM.ossLog才能({文本:文本});   WebMM.flushOssLog才能();   ,});   ,}   ,   ,var  reLoadQRImgCount =, 0,=,loadQRCodeTime  0,=,loadQRImgSucc 函数(){   clearInterval才能(loadQRImgWatchDog);   _logInPage才能(“Load  QRCode 成功,,时间=?+,(new 日期().getTime(),安康;loadQRCodeTime), +,“女士,,reload 数:,“,+,reLoadQRImgCount);   },=,loadQRImgFail 函数(img) {   _reportNow才能(“Load  QRcode 失败!“,+,status  +,,,, src:,“, +, img.src  +,,,,:,“, +, (new 日期().getTime(),安康;loadQRCodeTime), +,“ms");   },=,loadQRImgWatchDog 零;   ,function  _loadQRImg (uuid), {   ,_poll (uuid);   ,_logInPage (“Load  QRCode 时);=,,loadQRCodeTime  new 日期().getTime ();   ,=,_oLoginQrCodeImg.onload 函数(){   loadQRImgSucc才能();   时间=_oLoginQrCodeImg.onload 才能;零;   ,};=,_oLoginQrCodeImg.onerror , function () {loadQRImgFail ()};=,_oLoginQrCodeImg.src “https://login." + _sBaseHost +“qrcode/? uuid +“t=webwx";   ,=,,loadQRImgWatchDog  setInterval(函数(){   if 才能;(reLoadQRImgCount 祝辞=,5),{   _reset才能();   返回才能;   ,,}   reLoadQRImgCount才能+ +;   ,   var 才能;_img =, new 图像();   时间=_img.onload 才能;function  (), {   如果才能(! _oLoginQrCodeImg.onload),返回;   ,   时间=_oLoginQrCodeImg.onload 才能;零;   _oLoginQrCodeImg.src 才能=,this.src;//替换   loadQRImgSucc才能();   ,,};   时间=_img.onerror 才能;函数(){loadQRImgFail ()};   时间=_img.src 才能;_oLoginQrCodeImg.src  +,“, r=? +, new 日期().getTime ();   ,},5000);   ,}   ,   ,var  _sSecondRequestTime =, 0,   100年,_nAjaxTimeout =,, *, 1000年,=,_nNewLoginFuncErrCount  0;   ,function  _poll (_asUUID), {   ,var  _self =, arguments.callee,   时间=_nTime 才能;0;=,,_sCurUUId  _asUUID;   ,   ,_logInPage (“_poll  Request 开始,,:,“,+,new 日期().getTime ());=,,_nTime  new 日期().getTime ();   ,. ajax({美元   类型:大敌;“GET",   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

移动开发之实现微信QQ二维码登录原理的示例分析