小程式踩坑系列一

yck發表於2017-01-13

登入這塊是基本每個 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 去繫結微信帳號和使用者帳號能完成多個應用間的帳號統一,節約運營成本。

接下來伺服器通過一段規則生成 3rd_session,並以 3rd_session為 key,session_key + openid 為 value,寫入 session 儲存。

伺服器生成 3rd_session後,將 3rd_session 返回給客戶端,客戶端將 3rd_session 寫入快取。

圖中寫明在小程式請求時需要加上 3rd_session,這是因為小程式的請求是不支援傳遞 cookie 的,需要在 header 中自定義 key,將 3rd_session 作為 value 傳送出去,伺服器先檢測 3rd_session 對應的 seesion_key 是否過期,如果過期,需要客戶端重新發起 ws.login()

以上便是完整的登入請求流程。

相關文章