uniapp app端和微信小程序端使用微信登陸以及獲取用戶信息


一、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填充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章