Java微信授權(quán)登陸的實(shí)現(xiàn)示例
前提:
微信公眾平臺(tái):注冊(cè)微信認(rèn)證的公眾號(hào)也就是服務(wù)號(hào) ,擁有跟高級(jí)權(quán)限的微信接口。(注冊(cè)服務(wù)號(hào)需要一些企業(yè)信息,需自己或者公司解決)
注: 2018年12月起 訂閱號(hào)不能認(rèn)證升級(jí)為服務(wù)號(hào)。但可以將你的訂閱號(hào)遷移至另一個(gè)公眾號(hào),需300元費(fèi)用。
準(zhǔn)備公眾號(hào)的:APPID 與 APPSECRET
二、服務(wù)號(hào)注冊(cè)成功后,如果項(xiàng)目也有服務(wù)號(hào)的公眾號(hào)平臺(tái),跟項(xiàng)目負(fù)責(zé)人溝通將你個(gè)人的微信號(hào)添加為服務(wù)號(hào)的管理
找到左邊導(dǎo)航欄最下面的 基本配置 進(jìn)去, 記住公眾號(hào)的 AppId 與 AppSevrect , 如果AppServret忘記了重置重新記住。
配置IP白名單,項(xiàng)目所處的IP配置進(jìn)去,如拿自己的本機(jī)ip用于臨時(shí)的配置上去,等項(xiàng)目上線重新配置IP。
然后微信登陸需要微信網(wǎng)頁(yè)授權(quán),在公眾中網(wǎng)頁(yè)授權(quán)需要配置一個(gè)域名,準(zhǔn)備一個(gè)備案的域名,域名備案好大概需要20個(gè)工作日,如果沒有可以下載 花生殼軟件 新手注冊(cè) 會(huì)送一個(gè)免費(fèi)域名 可以用來(lái)做測(cè)試,如果有備案好的域名當(dāng)然更好。
沒有備案的域名情況,用花生殼 內(nèi)網(wǎng)穿透測(cè)試
自己注冊(cè) 會(huì)送個(gè)免費(fèi)的域名 然后花6塊永久的內(nèi)網(wǎng)穿透體驗(yàn)版 注冊(cè)好后,內(nèi)網(wǎng)穿透配置
配置好后可以診斷測(cè)試,確保配置的端口 在運(yùn)行中,如果是項(xiàng)目的端口項(xiàng)目要處于運(yùn)行中狀態(tài),不然會(huì)連接失敗
這些都沒問題后回到 在公眾號(hào)內(nèi)的左邊導(dǎo)航找到 公眾號(hào)設(shè)置 ----- 功能設(shè)置 --- 網(wǎng)頁(yè)授權(quán)域名 進(jìn)行域名授權(quán)配置。
一、域名授權(quán)需要你下載一個(gè)文件放置你的域名根目錄下,也就就是你域名訪問的項(xiàng)目的根目錄下,然后在通過瀏覽器 域名/文件名.txt 可以訪問到文件中的內(nèi)容,這個(gè)是重點(diǎn),一定要可以訪問的到文件內(nèi)容,然后在去網(wǎng)頁(yè)授權(quán)域名綁定域名保存就好。配置以后此域名下面的頁(yè)面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進(jìn)行OAuth2.0鑒權(quán)。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無(wú)法進(jìn)行OAuth2.0鑒權(quán)
如果公眾號(hào)登錄授權(quán)給了第三方開發(fā)者來(lái)進(jìn)行管理,則不必做任何設(shè)置,由第三方代替公眾號(hào)實(shí)現(xiàn)網(wǎng)頁(yè)授權(quán)即可
二、記住是域名,不是URL。不需要帶http。
文件放置項(xiàng)目的根目錄或者webapp下,可以通過瀏覽器 域名/文件名.txt 訪問文件內(nèi)容,也可放置項(xiàng)目的目錄下,訪問時(shí) 域名/目錄名/文件名
這里你可能會(huì)遇見配置失敗 報(bào) 找不到這個(gè)文件或時(shí)文件內(nèi)容不匹配
注意看你是否放置根目錄下,位置沒錯(cuò)。項(xiàng)目是否有攔截器攔截了導(dǎo)致訪問不到該文件
以上都都弄好了開始我們重點(diǎn)編碼。
微信授權(quán)登陸流程:
登陸授權(quán)作用域分為兩種:
一 、靜默登陸 scope參數(shù)值為 snsapi_base;只能獲取到用戶openid。好處是靜默認(rèn)證,無(wú)需用戶手動(dòng)點(diǎn)擊認(rèn)證按鈕,感覺上像是直接進(jìn)入網(wǎng)站一樣。
二、 授權(quán)登陸 scope參數(shù)值為 snsapi_userinfo;可以獲取到openid、昵稱、頭像、所在地等信息。需要用戶手動(dòng)點(diǎn)擊認(rèn)證按鈕
授權(quán)登陸步驟:
1、引導(dǎo)用戶進(jìn)入授權(quán)頁(yè)面同意授權(quán),獲取code
2、通過code換取網(wǎng)頁(yè)授權(quán)access_token(與基礎(chǔ)支持中的access_token不同)和openid
3、通過網(wǎng)頁(yè)授權(quán)access_token和openid獲取用戶基本信息
一、 微信登陸觸發(fā)按鈕或圖片鏈接
在首頁(yè)準(zhǔn)備一個(gè)按鈕或者一個(gè)鏈接用來(lái)發(fā)起請(qǐng)求。
這里我們用一個(gè)鏈接做示例
1.通過微信接口獲取code
微信獲取code接口: https://open.weixin.qq.com/connect/oauth2/authorize?
參數(shù)下表:
參數(shù) |
是否必須 |
說(shuō)明 |
appid |
是 |
公眾號(hào)的唯一標(biāo)識(shí) |
redirect_uri |
是 |
授權(quán)后重定向的回調(diào)鏈接地址,請(qǐng)使用urlencode對(duì)鏈接進(jìn)行處理 |
response_type |
是 |
返回類型,請(qǐng)?zhí)顚慶ode |
scope |
是 |
應(yīng)用授權(quán)作用域,snsapi_base (不彈出授權(quán)頁(yè)面,直接跳轉(zhuǎn),只能獲取用戶openid),snsapi_userinfo (彈出授權(quán)頁(yè)面,可通過openid拿到昵稱、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息) |
state |
否 |
重定向后會(huì)帶上state參數(shù),開發(fā)者可以填寫a-zA-Z0-9的參數(shù)值,最多128字節(jié) |
#wechat_redirect |
是 |
無(wú)論直接打開還是做頁(yè)面302重定向時(shí)候,必須帶此參數(shù) |
code作為換取access_token的票據(jù),每次用戶授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過期。
Controller控制器:
微信用戶授權(quán)確認(rèn)登陸
- 第一步登錄鏈接拼好后,在手機(jī)微信中打開,微信便會(huì)跳轉(zhuǎn)到確認(rèn)授權(quán)頁(yè)面,點(diǎn)擊確認(rèn)授權(quán)即可。(這一步,不用開發(fā)者做處理?。?/li>
- 用戶同意授權(quán),頁(yè)面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。
二、獲取 openid
請(qǐng)求與帶攜帶參數(shù)
返回的數(shù)據(jù)字段
代碼
三、獲取用戶信息
請(qǐng)求與參數(shù)
返回的JSON數(shù)據(jù)及字段解釋
代碼:
最后的 回調(diào)請(qǐng)求 回授權(quán)成功頁(yè)面
獲取到用戶信息可進(jìn)一步進(jìn)行業(yè)務(wù)處理,
成功頁(yè)面
結(jié)果圖
首頁(yè):
用戶授權(quán)確定登陸:
授權(quán)成功:
詳情也可去看官方文檔:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140842&t=0.2934098934066318#2
到此這篇關(guān)于Java微信授權(quán)登陸的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Java微信授權(quán)登陸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入解析Java的Hibernate框架中的持久對(duì)象
Hibernate的持久對(duì)象在數(shù)據(jù)庫(kù)數(shù)據(jù)操作中有著重要作用,這里我們就來(lái)深入解析Java的Hibernate框架中的持久對(duì)象,首先必須從理解持久化對(duì)象的生命周期開始:2016-07-07java實(shí)現(xiàn)文件復(fù)制、剪切文件和刪除示例
這篇文章主要介紹了java實(shí)現(xiàn)文件復(fù)制、剪切文件和刪除示例,需要的朋友可以參考下2014-04-04SpringBoot整合Mysql和Redis的詳細(xì)過程
這篇文章主要介紹了SpringBoot整合Mysql和Redis的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02關(guān)于Prometheus + Spring Boot 應(yīng)用監(jiān)控的問題
這篇文章主要介紹了關(guān)于Prometheus + Spring Boot 應(yīng)用監(jiān)控的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java設(shè)計(jì)模式之橋接模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之橋接模式,結(jié)合實(shí)例形式詳細(xì)分析了橋接模式的概念、功能、Java實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09Springboot maven plugin插件原理及作用
這篇文章主要介紹了Springboot maven plugin插件原理及作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10