javascript - 關(guān)于微信掃一掃的技術(shù)問(wèn)題
問(wèn)題描述
現(xiàn)在通過(guò)了解知道微信二維碼里面包含一個(gè)uid,通過(guò)客戶端掃二維碼拿到這個(gè)UID,網(wǎng)頁(yè)端不斷的請(qǐng)求此Uid是否得到授權(quán),得到授權(quán)之后才會(huì)登陸,我有點(diǎn)不明白的地方是,客戶端怎么才能讓網(wǎng)頁(yè)端知道已經(jīng)得到授權(quán)和登陸的請(qǐng)求。發(fā)送到服務(wù)器之后網(wǎng)頁(yè)端是怎么拿到這個(gè)授權(quán)的,如果通過(guò)數(shù)據(jù)庫(kù)肯定很簡(jiǎn)單,但是我覺(jué)得肯定不是通過(guò)數(shù)據(jù)庫(kù)拿到的。請(qǐng)問(wèn)這個(gè)里面還有什么技術(shù)可以讓客戶端發(fā)送的指令讓網(wǎng)頁(yè)端拿到!!求不吝賜教
問(wèn)題解答
回答1:除了返回唯一的uid,實(shí)際上打開(kāi)這個(gè)頁(yè)面的時(shí)候,瀏覽器跟服務(wù)器還創(chuàng)建了一個(gè)長(zhǎng)連接,請(qǐng)求uid的掃描記錄。如果沒(méi)有,在特定時(shí)長(zhǎng)后(目前是27秒左右)會(huì)接到狀態(tài)碼408(請(qǐng)求超時(shí)),表示應(yīng)該繼續(xù)下一次請(qǐng)求;如果接到狀態(tài)碼201(服務(wù)器創(chuàng)建新資源成功),表示客戶端掃描了該二維碼。
請(qǐng)求超時(shí):返回408function _poll(_asUUID) { $.ajax({ type: 'GET', url: 'https://login.' + _sBaseHost + '/cgi-bin/mmwebwx-bin/login?uuid=' + _asUUID + '&tip=' + show_tip, dataType: 'script', cache: false, timeout: _nAjaxTimeout, success: function(data, textStatus, jqXHR) { switch (_aoWin.code) { case 200: // .... break; case 201: // .... break; case 408: // .... break; case 400: case 500: // .... break; } }, error: function(jqXHR, textStatus, errorThrown) { // .... } }); }
當(dāng)用戶使用登錄后的微信掃描二維碼的時(shí)候,會(huì)將uid和手機(jī)微信產(chǎn)生的token進(jìn)行綁定,并上傳到服務(wù)器。這個(gè)時(shí)候,瀏覽器通過(guò)長(zhǎng)輪詢查詢到uid掃描記錄,立即得到201響應(yīng)碼,然后通知服務(wù)器,客戶端由此也進(jìn)入一個(gè)新的頁(yè)面(就是那個(gè)要你點(diǎn)確認(rèn)的按鈕)。在客戶端點(diǎn)擊確認(rèn)后,獲得服務(wù)器授信的令牌,進(jìn)行隨后的信息交互過(guò)程。
相關(guān)文章:
1. angular.js - 關(guān)于$apply()2. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問(wèn)題。3. MySQL數(shù)據(jù)庫(kù)中文亂碼的原因4. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問(wèn)題 麻煩幫我看一下5. nignx - docker內(nèi)nginx 80端口被占用6. android-studio - Android Studio 運(yùn)行項(xiàng)目的時(shí)候一堆警告,跑步起來(lái)!?7. dockerfile - [docker build image失敗- npm install]8. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???9. mysql - 新浪微博中的關(guān)注功能是如何設(shè)計(jì)表結(jié)構(gòu)的?10. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?
