小程序登陸(Laravel后臺)

小程序登陸相比微信登陸要繁瑣一些,因?yàn)榈顷懙臅r(shí)候不能直接拿到用戶的信息。需要再次到后臺進(jìn)行解密。

這篇文章所用的服務(wù)架構(gòu)如下:

1、Laravel后臺:主要是管理用戶,和一些操作邏輯登陸邏輯。

2、微信后臺:主要是儲存微信配置項(xiàng),用戶微信用戶授權(quán)解密等等。

3、微信官方后臺:微信官方服務(wù)器。

4、小程序前端

之所以將微信授權(quán)和解密放在單獨(dú)的服務(wù)器是因?yàn)樵诠娞柺跈?quán)方面涉及到多站點(diǎn)授權(quán),需要統(tǒng)一回調(diào)到統(tǒng)一站點(diǎn),再進(jìn)行分發(fā)。而且服務(wù)單一,易維護(hù)。

首先列出應(yīng)該查看的小程序API:

1、wx.login(Object object)

2、wx.getUserInfo(Object object)

3、code2Session

下面是流程圖:

真特么丑


其實(shí)認(rèn)真看圖就完全明白了,為了照顧你們可能看不懂我寫的字,我就簡單說一下流程。

1、用戶打開小程序,小程序就執(zhí)行wx.login方法。會靜默獲取到j(luò)s_code。留著備用。

此階段小程序的有的數(shù)據(jù):js_code

2、小程序前端接下來調(diào)用wx.getUserInfo方法(withCredentials參數(shù)為true),注意這個(gè)方法需要用戶授權(quán)。也就是彈出萬惡授權(quán)框,??注意用戶拒絕授權(quán)要做處理(也就是啥都不讓用戶干,跳到一個(gè)頁面放一個(gè)授權(quán)button,點(diǎn)擊重新彈出授權(quán)框)。授權(quán)成功后會返回encryptedData、iv和一堆驗(yàn)證的數(shù)據(jù),留著encryptedData、iv備用。

此階段小程序的有的數(shù)據(jù):js_code、encryptedData、iv

3、小程序前端用剛才拿到的js_codeLaravel后臺獲取3rdSession(后面說這是個(gè)啥)。

? ? ? ? a)這個(gè)接口都干了啥,返回了啥?

接受到j(luò)s_code之后,Laravel后臺就用這個(gè)js_code去請求微信后臺的獲取open_id和session_key接口。

b)微信后臺的這個(gè)接口都干了啥?

微信后臺調(diào)用code2Session接口(上面提到過)。這個(gè)接口接收js_code,返回open_id和session_key,返回給Laravel后臺open_id和session_key(用來解密,留著備用)。

c)Laravel后臺接收到open_id和session_key之后,把這兩個(gè)放起來存著,因?yàn)榻?jīng)常變,放在緩存中就可以。我用的是這種格式[open_id(3rdSeesion) => session_key],之后把open_id(3rdSeesion)返回給小程序前端

3rdSession其實(shí)就是一個(gè)標(biāo)識,正常來說應(yīng)該把open_id和session_key存在緩存,鍵是一個(gè)隨機(jī)字符串,這個(gè)字符串就是3rdSession,為了方便,小程序正好也需要open_id,就用open_id代替了3rdSession。

此時(shí)微信后臺參數(shù):open_id和session_key

此階段小程序的有的數(shù)據(jù):js_code和open_id、encryptedData、iv、open_id(3rdSession)

4、小程序前端接著用現(xiàn)在有的數(shù)據(jù)open_id(3rdSession)、encryptedData、iv、去請求Laravel后臺解密encryptedData(被加密的用戶信息)

? ? ? ? a)這個(gè)接口干了啥?

?Laravel后臺用傳遞過來的open_id(3rdSession)、encryptedData、iv、去請求微信后臺解密接口。

? ? ? ? ? ? ? ? b)這個(gè)接口干了啥?

微信后臺用傳之前的?session_key 和傳遞過來的 iv??去解密encryptedData。將解密后的信息返回給Laravel后臺。

c)Laravel后臺接收到微信后臺返回的用戶信息之后,用里面的unionId去做和網(wǎng)站用戶的處理(此處看自己網(wǎng)站的邏輯)。處理之后將token返回給小程序前端。接下來就可以實(shí)現(xiàn)用戶認(rèn)證的請求,也就是登陸狀態(tài)。

為什么要用unionId?

因?yàn)槟悴淮_定你會不會僅僅只開發(fā)這個(gè)一個(gè)小程序,如果同一網(wǎng)站要多個(gè)小程序和公眾號,這樣用戶的open_id就很難統(tǒng)一,處理不了。所以在最開始做的時(shí)候一定要考慮到這個(gè)問題。微信開放平臺就是干這個(gè)的。自己去文檔吧。

建議laravel使用overtrue的easywechat,超級傻瓜式操作。

完事了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,702評論 0 121
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,527評論 19 139
  • 現(xiàn)在的我,對自己很不滿意,無時(shí)無刻都要拿手機(jī),很多時(shí)候都是在浮淺工作,無法專注!缺乏大腦深度的思考!加入樊登...
    飛翼諾言閱讀 285評論 0 0
  • 聲明主 DEX 文件中需要的類 為 Dalvik 可執(zhí)行文件分包構(gòu)建每個(gè) DEX 文件時(shí),構(gòu)建工具會執(zhí)行復(fù)雜的決策...
    android_zyq閱讀 8,384評論 0 3

友情鏈接更多精彩內(nèi)容