一、app端和微信小程序端使用uni.login()
app端調用uni.login
返回的數據:
微信小程序端調用uni.login
後返回的數據:
共同點
它們都會返回 code
不同點
在app端拿到的這個code去請求後端接口,後端用這個code去請求微信接口js2session
換取openid, session_key、unionid
時會返回該code已被使用
而在小程序拿到的code是可以獲得openid, session_key的
這是爲啥?
原因:
其實可以看出來,app端使用uni.login
時返回的數據多了很多東西,這是因爲在app端封裝好了,uni.login()
後,會自動用該code去請求微信https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
換取access_token、openid,unionid
等,這時code已經被用了,所以後面後端拿code去請求會顯示code已被使用,要記住app端使用的微信登陸是基於Oauth 2.0 機制的(順便說一下微信公衆號獲取用戶信息的方式和這個一樣,都是先拿code,換access_token、openid,再拿access_token、openid換用戶的數據)
需要注意的是:
1.在調試的時候選擇運行到手機的情況下,獲得到的openid、unionid
什麼的都是屬於DCloud
的,需要用到自己的話要自定義基座調試(一般都是打包時纔會去配置)
2.unionid只能在一定條件下才能得到,即必須綁定在微信開放平臺上,不綁定是沒有的(PS:綁定開放平臺需要開發者資質認證,認證收費的 300嘿嘿)
二、app端和小程序端使用uni.getUserInfo()獲取用戶信息
使用這個獲取用戶頭像,暱稱這些的前提是用戶授權了(例如通過login等按鈕喚起),授權過的話可以直接通過getUserInfo獲取,否則既不會報錯,也不會彈出需要授權的窗口
app端返回的數據:
這一步的用戶信息,是通過前面獲得的access_token、openid
去請求微信https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
這個接口得到的,同樣的,也是封裝好了的~
小程序端返回的數據:
小程序端獲取用戶信息的正確步驟應該是:
其中第5步,後端拿到3rdSessionID、encryptedData
等需要解密可以獲得用戶的敏感數據,流程如下:
- 密文 encryptedData
- 密鑰 aesKey
- 偏移向量 iv
1.密文和偏移向量由客戶端發送給服務端,對這兩個參數在服務端進行Base64_decode解編碼操作
2. 據3rdSessionId從緩存中獲取session_key,對session_key進行Base64_decode可以得到aesKey,aes密鑰
3. 調用aes解密方法,算法爲 AES-128-CBC,數據採用PKCS#7填充