微信授權(quán)登錄



準(zhǔn)備工作

配置網(wǎng)頁授權(quán)獲取用戶基本信息,用于告訴微信發(fā)起授權(quán)的后端服務(wù)器地址

正式公眾號(hào):在微信公眾號(hào)請(qǐng)求用戶網(wǎng)頁授權(quán)之前,開發(fā)者需要先到公眾平臺(tái)官網(wǎng)中的“開發(fā) - 接口權(quán)限 - 網(wǎng)頁服務(wù) - 網(wǎng)頁帳號(hào) - 網(wǎng)頁授權(quán)獲取用戶基本信息”進(jìn)行配置操作;

測(cè)試沙箱環(huán)境:在 測(cè)試環(huán)境 中,進(jìn)行配置網(wǎng)頁授權(quán)(https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index)。可配置端口號(hào)用于本地調(diào)試。?注:勿加 http:// 等協(xié)議頭!

本次業(yè)務(wù)我們配置的是前端登錄頁面,沙箱中內(nèi)配置的網(wǎng)頁授權(quán)域名為本地https起的服務(wù)器域名(test.c3data.com.cn:3000)

授權(quán)說明

微信授權(quán)時(shí),分為snsapi_base和snsapi_userinfo兩種授權(quán)方式。本次我們的需求第一種snsapi_base即可滿足。

1、snsapi_base: 用來獲取進(jìn)入頁面的用戶的 openid 的,并且是靜默授權(quán)并自動(dòng)跳轉(zhuǎn)到回調(diào)頁的。用戶感知的就是直接進(jìn)入了回調(diào)頁(往往是業(yè)務(wù)頁面,不會(huì)有對(duì)于的認(rèn)為操作);

2、snsapi_userinfo: 是用來獲取用戶的基本信息的。但這種授權(quán)需要用戶手動(dòng)同意,并且由于用戶同意過,所以無須關(guān)注,就可在授權(quán)后獲取該用戶的基本信息。

網(wǎng)頁授權(quán)流程:

1、引導(dǎo)用戶進(jìn)入授權(quán)頁面同意授權(quán),獲取code

2、通過 code 換取網(wǎng)頁授權(quán)access_token(與基礎(chǔ)支持中的access_token不同)和openid

3、通過網(wǎng)頁授權(quán)access_token和 openid 獲取用戶基本信息(支持 UnionID 機(jī)制)

網(wǎng)頁授權(quán)詳細(xì)流程:

1.在用戶從公眾號(hào)進(jìn)入系統(tǒng)的時(shí)候,引導(dǎo)關(guān)注者打開如下頁面,獲取code:

由于授權(quán)操作安全等級(jí)較高,所以在發(fā)起授權(quán)請(qǐng)求時(shí),微信會(huì)對(duì)授權(quán)鏈接做正則強(qiáng)匹配校驗(yàn),如果鏈接的參數(shù)順序不對(duì),授權(quán)頁面將無法正常訪問;鏈接屬性如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect


用戶同意授權(quán)后,頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE

1、code作為換取access_token的票據(jù),每次用戶授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過期。

2、微信重定向回調(diào)地址,一定要在微信公眾號(hào)平臺(tái)進(jìn)行配置,為后端接口地址。(本次業(yè)務(wù)我們配置的是前端登錄頁面,沙箱中內(nèi)配置的網(wǎng)頁授權(quán)域名為本地https起的服務(wù)器域名(test.c3data.com.cn:3000))。

2.通過code換取網(wǎng)頁授權(quán)access_token(后端進(jìn)行)

首先請(qǐng)注意,這里通過code換取的是一個(gè)特殊的網(wǎng)頁授權(quán)access_token,與基礎(chǔ)支持中的access_token(該access_token用于調(diào)用其他接口)不同。公眾號(hào)可通過下述接口來獲取網(wǎng)頁授權(quán)access_token。如果網(wǎng)頁授權(quán)的作用域?yàn)閟nsapi_base,則本步驟中獲取到網(wǎng)頁授權(quán)access_token的同時(shí),也獲取到了openid,snsapi_base式的網(wǎng)頁授權(quán)流程即到此為止。

尤其注意:由于公眾號(hào)的secret和獲取到的access_token安全級(jí)別都非常高,必須只保存在服務(wù)器,不允許傳給客戶端。后續(xù)刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務(wù)器發(fā)起。

獲取code后,請(qǐng)求以下鏈接(該接口就是第一步中定義的redirect_uri值,即后端接口地址,微信重定向時(shí)會(huì)進(jìn)行調(diào)用)獲取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

獲取code后會(huì)攜帶code參數(shù)自動(dòng)重定向到登錄頁面,此時(shí)用code請(qǐng)求后端接口,后端用code換取用戶的openid,并返回至前端。



注意:測(cè)試環(huán)境和正式環(huán)境的appId和appSecret是不同的,前后端的測(cè)試及正式環(huán)境需要配置一致,才能拿到微信用戶信息。(前端在測(cè)試環(huán)境拿到code傳給后端,后端只能在appId和secret為測(cè)試的配置中換取openId,否則會(huì)報(bào)錯(cuò))

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

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

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