一、背景
記得11、12年的時候大家一窩蜂的開始做客戶端Android、IOS開發,我是14年才開始做Andoird開發,干了兩年多,然后18年左右微信小程序火了,我也做了兩個小程序,一個是將原有牛奶公眾號的功能遷移到小程序,用戶體驗得到極大的提升,另外一個是給XX做的一個簡單的賣蜂蜜的小程序,當時投入3個人,兩周左右搞定。
濟南微信小程序開發其實還是比較簡單的,小程序端代碼和Vue整體架構差不多,比較復雜的就是登錄和支付這兩塊,因為這兩塊涉及到三方交互(小程序端、開發者服務器、微信服務端),今天講一下登錄這塊是怎么一個交互的(這個18年時候做的事情,現在微信有些接口可能有所調整,但變化不會太大)
二、一些名詞概念
1、openid:普通用戶標記,對當前開發者賬號是唯一的,一個openid對應一個具體的應用,不同的公眾號不同的小程序會給同一個微信用戶分配不同的openid。
2、unionid:微信用戶統一標記,一個開放平臺賬號下同一個微信用戶unionid是唯一的,需要在微信開放平臺綁定公眾號/小程序。
案例說明:牛奶應用開始是開發公眾號-服務號,這個時候用戶注冊到我們表里會有一個openid_1,然后小程序火起來了,我們決定開發小程序,但小程序會重新給同一個用戶分配一個openid_2,這就不好了,你不能讓一個用戶在公眾號上可以看到他自己的訂單,然后跑到小程序后找不到訂單是吧,咋整呢,微信還有一個開放平臺,你再申請一個郵箱去注冊一下開放平臺,然后把公眾號和小程序都在里邊綁定一下,這樣他就會給你分配一個統一的unionid。
3、session_key:用于用戶解密微信用戶數據,接口返回敏感數據是密文的,如unionId,手機號等,需要用session_key做為密鑰去解密。
三、微信提供和登錄相關幾個主要接口
小程序端調用
1、wx.login():獲取臨時登錄憑證CODE,有效時間為5分鐘,使用后就立即失效。
2、wx.authorize():發起用戶授權請求,如要獲取用戶信息,地理位置,保存相冊、攝像頭等需要調用該接口得到用戶的授權。
3、wx.getUserInfo():得到加密碼的用戶數據,返回encryptedData數據,加密向量值IV,將數據傳給服務端,服務端完成解密用戶信息注冊等,調用該接口前必須先調用上面兩個方法。
開發者服務器調用
1、jscode2session:通過CODE獲取openid、unionid、sessiooo_key。
四、調用交互圖