登陸這塊是基本每一個 APP 都須要用到的技術,小程序這邊的登陸和其餘的有點不一樣,本篇文章主要講下登陸這塊的坑。小程序
首先看一下文檔裏介紹登陸的圖
緩存
首先在第一個頁面中調用 ws.login()
獲取 code,而後在圖片中寫着直接將 code 發送給本身的後臺,這其中少了一步調用 wx.getUserInfo
來獲取一段加密串,獲得這段加密串後將加密串和 code 一塊兒發給服務器,而後服務器經過 APPID, APPSecret, code 參數請求微信服務器得到 session_key 和 openid。而後經過得到的 session_key 去解密以前發過來的加密串獲得 unionid。服務器
unionid 和 openid 是不一樣的,首先在小程序中得到 unionid 是須要先在微信後臺綁定公衆號,而後綁定小程序,才能得到 unionid 的。微信
unionid 和 openid 的區別在於,當咱們分別有多個不一樣應用時,只經過 openid 去綁定微信賬號和用戶賬號會賬號不統一,由於 openid 在多個應用間是不一樣的,而後 unionid 在多個應用間是相同的,經過 unionid 去綁定微信賬號和用戶賬號能完成多個應用間的賬號統一,節約運營成本。cookie
接下來服務器經過一段規則生成 3rd_session,並以 3rd_session爲 key,session_key + openid 爲 value,寫入 session 存儲。session
服務器生成 3rd_session後,將 3rd_session 返回給客戶端,客戶端將 3rd_session 寫入緩存。加密
圖中寫明在小程序請求時須要加上 3rd_session,這是由於小程序的請求是不支持傳遞 cookie 的,須要在 header 中自定義 key,將 3rd_session 做爲 value 發送出去,服務器先檢測 3rd_session 對應的 seesion_key 是否過時,若是過時,須要客戶端從新發起 ws.login()
。code
以上即是完整的登陸請求流程。cdn