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