現在透過了解知道微信二維碼裡麵包含一個uid,透過客戶端掃二維碼拿到這個UID,網頁端不斷的請求此Uid是否得到授權,得到授權之後才會登陸,我有點不明白的地方是,客戶端怎麼能讓網頁端知道已經被授權和登陸的請求。傳送到伺服器之後網頁端是怎麼拿到這個授權的,如果透過資料庫肯定很簡單,但是我覺得絕對不是透過資料庫拿到的。請問這個裡面還有什麼技術可以讓客戶端發送的指令讓網頁端拿到! !求不吝賜教
学习是最好的投资!
除了返回唯一的uid,實際上打開這個頁面的時候,瀏覽器跟伺服器還創建了一個長連接,請求uid的掃描記錄。如果沒有,在特定時長後(目前是27秒左右)會接到狀態碼408(請求超時),表示應該繼續下一次請求;如果接到狀態碼201(伺服器建立新資源成功),表示客戶端掃描了該二維碼。
function _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) { // .... } }); }
當用戶使用登入後的微信掃描二維碼的時候,會將uid和手機微信產生的token進行綁定,並上傳到伺服器。這時候,瀏覽器透過長輪詢查詢到uid掃描記錄,立即得到201回應碼,然後通知伺服器,客戶端由此也進入一個新的頁面(就是那個要你點確認的按鈕)。在客戶端點選確認後,取得伺服器授信的令牌,進行後續的資訊互動過程。
請求超時:返回408
掃碼成功:回傳201
查詢程式碼