網站實現QQ第三方登入詳細步驟
一、準備工作:申請appid,appkey,回撥地址(申請時填寫的回撥地址,重要!)
二、放置QQ登入按鈕:其實就是給你要實現QQ登入的地方繫結一個onclick點選事件
如:給如圖示圖示繫結一個onclick點選事件,在對應函式裡寫一個http請求去伺服器端處理QQ登入(安全考慮)
三、獲取Authorization Code值:
- 請求網址:
url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + appid + "&redirect_uri=" + redirectURI
2. 引數及其對應值:
response_type的值固定為code;
client_id的值為申請的appid;
redirect_uri的值為申請時填寫的回撥地址;(注意:需要將url進行編碼!!!)
state值是用來防止CSRF攻擊的,自己隨機產生一段字串此值
3. 將此url地址返回到前臺,利用window.open在新視窗開啟此網址。若發現未開啟,很有可能是被攔截了。
4. 請求成功:請求成功後,會開啟QQ登入介面,如圖示:
5. 返回:當用戶成功授權登入後,會跳轉到上述指定的回撥地址裡,並攜帶引數code和state值。如:redirect_uri?code=**********&state=**********
code值即為你要獲取到的Authorization Code值
state值即為上述你隨機產生的字串
四、獲取Access Token值:
- 獲取判斷:此時已經走到了回撥地址裡
獲取code值,state值
判斷攜帶的state引數值和你隨機產生的字串是否相等,相等才能往下走!
2.請求網址:
url = " https://graph.qq.com/oauth2.0/token? grant_type=authorization_code
&client_id=" + appid + "&client_secret="+ appkey
3.引數及其對應值:
grant_type的值固定為authorization_code;
client_id的值為申請的appid;
client_secret的值為申請的appkey;
redirect_uri的值為申請時填寫的回撥地址;(注意:需要將url進行編碼!!!)
code值為獲取到的Authorization Code值
4.這個直接在後臺請求就可以了。
5.請求成功後,返回包如下:(可以手動請求一下該網址,看看返回的是什麼)
"access_token= **********&expires_in=***&refresh_token=**********"
access_token即為我們要獲取到access_token值
expires_in即為access_token值的有效期
refresh_token,忽略。
五、獲取OpenID值:
- 獲取access_token值
- 請求網址:
3.引數及其對應值:
access_token值為獲取到的Access Token值
4.這個也是直接在後臺請求就可以了。
5.請求成功後,返回包如下:
callbackc ( {"client_id": "**********", "openid": "**********"} )
client_id即為appid
openid即為我們要獲取到的openid值
六、獲取該QQ使用者的相關資訊:
- 獲取openid值:此值與使用者QQ號一一對應,不會改變。因此,可以將此值存入資料庫,與網站賬號進行繫結。一般來說,若QQ使用者第一次授權登入,應讓他先進行自己網站的賬號註冊,註冊成功以後就可以直接通過QQ進行登入。
- 請求網址:
url = " https://graph.qq.com/user/get_user_info?access_token=" + access_token
+ "&oauth_consumer_key=" + appid + "&openid=" + openid
3.引數及其對應值:
access_token值為上述獲取到的access_token值
oauth_consumer_key值為申請的appid
openid值為獲取到的openid值
4.這個還是直接在後臺請求就可以了。
5.請求成功後,返回包(json資料)如下:
nickname為使用者的暱稱
figureurl_qq_1為使用者不同尺寸的QQ頭像url
gender為使用者性別
……
6.拿到這些資料後,就可以去前臺展示了。至此,QQ登入完成!