本篇主要描述微信小程序的后台登錄,獲取用戶信息,解密微信運動數據
首先 登錄由前端發起 小程序授權用戶才能進行登錄 前端具體接口信息可登錄微信開放平台進行查看
前端調用 wx.login() 獲取臨時登錄憑證code ,並回將code傳到后台服務器,后台服務器通過微信開放的code2Session接口
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
進行調用,微信接口將返回session_key,openid等信息
請求參數
屬性 | 類型 | 默認值 | 必填 | 說明 |
---|---|---|---|---|
appid | string | 是 | 小程序 appId | |
secret | string | 是 | 小程序 appSecret | |
js_code | string | 是 | 登錄時獲取的 code | |
grant_type | string | 是 | 授權類型,此處只需填寫 authorization_code |
返回的 JSON 數據包
屬性 | 類型 | 說明 |
---|---|---|
openid | string | 用戶唯一標識 |
session_key | string | 會話密鑰 |
unionid | string | 用戶在開放平台的唯一標識符,在滿足 UnionID 下發條件的情況下會返回 |
errcode | number | 錯誤碼 |
errmsg | string | 錯誤信息 |
此時 我們可以獲取openid,以及秘鑰session_key,通過前端調用 wx.getUserInfo(Object object)可以獲取到除openid外的其他用戶信息(需判斷是否授權,授權后才能調用),
前端具體接口信息可在微信開放平台查看
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html
wx.getUserInfo會返回UserInfo信息以及encryptedData(包括敏感數據在內的完整用戶信息的加密數據),iv(加密算法的初始向量)
我們也可以利用session_key對session_key進行解密獲取到用戶的具體信息(包含unionId)
具體解密方法給出一個鏈接可以參考這個大哥的 https://www.jianshu.com/p/3170749b6660
微信運動數據需前端調用wx.getWeRunData(Object object) 接口描述
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html
該接口會返回encryptedData(微信運動數據的加密信息) iv(加密算法的初始向量)
通過之前獲取的session_key 可對加密信息進行解密 解密方法參照微信用戶數據解密的鏈接
微信小程序登錄流程就是前端返回 code、encryptedData(微信用戶加密信息)、iv,后端根據code通過code2Session接口獲取session_key,
然后用session_key去解密encryptedData來獲取微信用戶數據
注意:前端調用wx.getUserInfo(Object object) wx.getWeRunData(Object object) 需判斷是否授權
session_key有過期時間 有效期是30天
微信小程序前端沒有cookie 前端可以將后台返回的登錄標識存在storage 請求后台時帶上
微信小程序綁定微信公眾開放平台后,解密信息才會出現unionId
同一個用戶在微信公眾開放下的不同應用(小程序,公眾號)上有不同的openid 有相同的unionId