原文連接:網站接入QQ登陸功能前端
先登陸QQ互聯官網,登陸時所用的QQ號會和相關信息綁定,這一點要注意。git
登陸以後點擊頂部導航欄右側本身的QQ頭像,進入開發者的註冊/認證界面。github
這裏能夠選擇以「公司」或「我的」的身份註冊爲開發者。本身最開始用的是公司的相關資料來註冊的,但老是提示審覈失敗,卻又不說爲何失敗,最後乾脆用我的信息註冊,很快就成功了。web
PS:不知道用我的信息註冊爲開發者的話,權限方面會不會有什麼限制。微信公衆平臺對我的開發者是有限制的,我的身份註冊的公衆號沒法認證,公衆平臺的部分權限也沒法調用。api
要想讓網站可以使用QQ登陸功能,就必須先在QQ互聯中建立網站應用。服務器
在QQ互聯網站頂部導航欄上,點擊應用管理。點擊頁面中的網站應用這個標籤,再點擊建立應用,按照要求填寫相關的信息便可。微信
注意這裏須要填寫兩個 URL,一個是網站地址,也就是須要讓用戶可以經過QQ登陸的網站。另外一個是網站回調域,則是用戶發起QQ登陸請求以後,負責與騰訊服務器通信,實現QQ登陸功能的URL,這兩個URL要注意區分。app
所建立的網站應用審覈經過以後,點擊查看按鈕,在網站應用的詳情界面,能看到爲這個網站分配的APP ID和APP Key,後面實現QQ登陸功能的時候要用到。微信公衆平臺
另外,還能看到審覈經過的網站應用,有兩個可用的應用接口,第一個登陸默認是開啓的,第二個unionid須要手動開啓,這裏先把它開啓了,後面說不定就用上了。ide
接下來就須要編寫代碼,實現QQ登陸功能了。這裏先簡要說明一下總體流程:
在本身編寫的登陸頁面,點擊QQ圖標以後,請求下面的地址:
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=${appId}&redirect_uri=${redirectUrl}&state=${state}&scope=${scope}
上面的地址中,appId爲網站應用的APP ID,redirectUrl爲網站應用的網站回調域,state爲用戶自定義的字符串,scope爲向用戶所請求的受權列表。
scope以外的參數均爲必填項,scope若是不寫,則默認只請求對接口get_user_info進行受權,獲取用戶最基本的幾項信息:QQ暱稱、QQ頭像、性別。
發起請求以後,會將用戶導向到QQ官方的登陸頁面,用戶在這個頁面上選擇須要登陸的QQ號,點擊「登陸」,網站回調域 就會收到的騰訊服務器所發起的回調。
好比以前所填寫的 網站回調域 爲 a.com/api/getauthcode
的話,騰訊服務器就會向 網站回調域 發送以下請求:
GET /getauthcode?code=F91C6110********
在上面接收到的這個請求中,URL查詢字符串裏,code=
後面的字符串,就是騰訊服務器發來的Authorization Code。
拿到Authorization Code,結合其它數據,請求以下地址:
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=${appId}&client_secret=${appKey}&code=${authCode}&state=${state}&redirect_uri=${redirectUrl}
網站回調域 會收到以下響應:
access_token=FF3A****&expires_in=7776000&refresh_token=2516****
其中就包含了Access Token,而且這個Access Token有90天的有效期,但並不會按照官方文檔所說的,用戶再次登陸時自動刷新,而是短期(一天內)連續屢次登陸都不會刷新。
對於這個Access Token,官網建議開發者將其進行保存,以便後續調用OpenAPI訪問和修改用戶信息時使用。
有了Access Token以後,就能夠用它來獲取當前所登陸QQ帳號的OpenID了。請求以下地址:
https://graph.qq.com/oauth2.0/me?access_token=${accessToken}
網站回調域 會收到以下響應:
callback( {"client_id":"appId","openid":"openId"} );
上面的響應中包含了 APP ID 和 OpenID,APP ID 可用來確認是否爲合法的網站請求,OpenID 天然就是所登陸QQ帳號的 OpenID 了。
有了第二步獲取到的獲取Access Token,和第三步獲取到的OpenID,就能夠拿來訪問QQ的接口,獲取用戶的相關信息了。
好比如下面的方式請求 get_user_info
接口,就可以獲取到用戶暱稱、QQ頭像等信息。
https://graph.qq.com/user/get_user_info?access_token=${accessToken}&oauth_consumer_key=${appId}&openid=${openId}