微信開放平台登錄功能
PC 網站的微信掃碼登陸有兩種,一種是微信開放平台提供的,參考文檔:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
這種技術實現是通過 OAuth2.0 授權登錄,授權並經過用戶同意后獲取用戶信息,然后在平台進行登陸獲取平台登錄態。
表現方式為,PC 瀏覽器根據自己的 AppID 調用微信的 JS SDK,創建一個登陸二維碼,其中有登陸成功的回調地址。彈出微信頁面,頁面顯示一個微信二維碼。用戶微信掃碼授權后,彈出頁面重定向到回調地址。業務根據回調地址處理登陸邏輯。
優點是微信處理好了大部分邏輯,業務只需要完善成功的回調邏輯。
缺點是用戶掃碼后還要點擊授權,不能實現要求用戶關注公眾號。我們采用下面的方式實現。
微信公眾號組合接口實現登陸
表現方式為,頁面請求后端獲取一個微信的二維碼,然后顯示該二維碼,並開始輪詢后端,等待掃碼結果(輪詢等待 5 分鍾二維碼過期)。
用戶掃碼后(未關注公眾號的需要關注公眾號)輪詢接口返回用戶 jwt 並且重定向到登錄結果頁。
需要了解的官方文檔
-
創建二維碼 ticket,這里我們創建臨時二維碼就行
-
獲取 access_token, 公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存,建議公眾號開發者使用中控服務器統一獲取和刷新access_token,其他業務邏輯服務器所使用的access_token均來自於該中控服務器,不應該各自去刷新,否則容易造成沖突,導致access_token覆蓋而影響業務。
官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
-
事件推送,重點關注“2 掃描帶參數二維碼事件”
官方文檔: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
-
獲取用戶信息,根據掃碼事件獲取到的用戶 openid 獲取用戶信息
主要流程
說明:
access_toke 有效期為兩個小時,統一由一個定時任務一個小時刷新一次並保留到 Redis,刷新后5分鍾內新老access_token都可用,業務一般不用特殊考慮。
scene_str 可以根據一定規則創建,事件推送監聽可以根據不同規則生成的 scene_str 來處理不同的業務邏輯(不一定只是登陸邏輯)。
v_code 類似一個隨機字符串效驗碼,前端輪詢的時候帶上並在后端做效驗防止偽造攻擊。