微信小程序登錄和授權


登錄和授權

登錄和授權的說明
  • 在微信小程序中,登錄和授權是完全兩個獨立的事情。登錄只是通過 wx.login 獲取用戶在此時使用小程序產生的 code ,需要通過 Server 將 code 通過 auth.code2Session 獲取用戶唯一標識。
  • 授權是通過 wx.getUserInfo 來獲取用戶的微信信息,同時可以通過返回的 vi 等加密數據傳給 Server 端,用於解密后存儲或校驗業務用戶的微信信息。
  • 登錄和授權完全沒有關系
  • 說明

    • 調用 wx.login() 獲取 臨時登錄憑證code ,並回傳到開發者服務器。
    • 調用 auth.code2Session 接口,換取 用戶唯一標識 OpenID 和 會話密鑰 session_key。
    • 之后開發者服務器可以根據用戶標識來生成自定義登錄態,用於后續業務邏輯中前后端交互時識別用戶身份。
  • 注意

    • 會話密鑰 session_key 是對用戶數據進行 加密簽名 的密鑰。為了應用自身的數據安全,開發者服務器不應該把會話密鑰下發到小程序,也不應該對外提供這個密鑰。
    • 臨時登錄憑證 code 只能使用一次
用戶信息授權
  • 微信小程序用戶信息授權
    • 調用 wx.getUserInfo
    • 需要對 button 設置 open-type="getUserInfo" 的屬性
    • 將用於加密的數據傳遞給服務端,如 rawData signature encryptedData iv 等
  • 服務端解密用戶授權數據
    • 將小程序業務端通過 wx.getUserInfo 獲取到 加密數據進行解密
    • 結合已有的業務用戶,創建新的用戶或對已有用戶補全微信賬戶相關的信息
手機號授權
  • 獲取方式
    • 獲取微信用戶綁定的手機號,需先調用 wx.login 接口。
    • 因為需要用戶主動觸發才能發起獲取手機號接口,所以該功能不由 API 來調用,需用 button 組件的點擊來觸發。
    • 需要將 button 組件 open-type 的值設置為 getPhoneNumber,當用戶點擊並同意之后,可以通過 bindgetphonenumber 事件回調獲取到微信服務器返回的加密數據, 然后在第三方服務端結合 session_key 以及 app_id 進行解密獲取手機號。
  • 注意事項
    • 目前該接口針對非個人開發者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發現在不必要場景下使用,微信有權永久回收該小程序的該接口權限。
    • 在回調中調用 wx.login 登錄,可能會刷新登錄態。此時服務器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導致解密失敗。建議開發者提前進行 login;或者在回調中先使用 checkSession 進行登錄態檢查,避免 login 刷新登錄態。
應用建議
  • 注意登錄與授權沒有必然聯系
  • 登錄后的 OpenID 是需要通過服務器調用微信接口獲取
  • 業務可以根據授權用戶信息 + 授權手機號的結合,來創建新的業務用戶

靜默授權:我們常說的靜默授權其實就是通過調用小程序提供的 wx.login 換取 code 后,獲取用戶 OpenID 以及其他業務關聯的信息,因此我們常說的靜默授權其實就是不主動調用用戶信息授權。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM