接入qq第三方登錄比(bi)較麻煩,主要是因為(wei)前期的準備工作較麻煩,需要進行域名備案(an),備案(an)通過(guo)后(hou)才能在qq互聯(lian)平(ping)臺上(shang)通過(guo)應(ying)用審核。
成為開發者
首先需要,完成(cheng)用戶開發者(zhe)信息(xi)的驗(yan)證。
審核通(tong)過后,需要(yao)在(zai)qq互聯上創建應用,并進(jin)行(xing)審核。沒有通(tong)過備(bei)案的(de)域名是(shi)不能通(tong)過審核的(de),所以需要(yao)先進(jin)行(xing)域名備(bei)案。
創建應用
審核通(tong)過后就(jiu)可以獲得應用的appid和appkey,申請時填寫的回調地址(zhi),這個很重(zhong)要!
放置QQ登錄按鈕
其實就是給你要實現QQ登錄的地方綁定一個onclick點擊事件
如:給如圖示(shi)圖標綁定一個(ge)onclick點擊事件(jian),在對應函(han)數里寫一個(ge)http請(qing)求去(qu)服(fu)務器端處理QQ登錄(lu)(安全考慮)
獲取Authorization Code值
1、請求網址
url = "//graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + appid + "&redirect_uri=" + redirectURI + "&state=" + state
2、參數及其對應值
response_type的值固(gu)定為code;
client_id的值為申請的appid;
redirect_uri的(de)值為申請時填寫的(de)回調地址;(注意:需要將url進行編碼(ma)!!!)
state值是用來(lai)防止CSRF攻擊的,自(zi)己隨機產生一段字符串此值
3、將此(ci)url地址(zhi)返回到前臺,利用window.open在新(xin)窗口打開(kai)此(ci)網址(zhi)。若發(fa)現未打開(kai),很有可能是被(bei)攔(lan)截(jie)了(le)。
4、請求成功:請求成功后,會打開QQ登錄界面,如圖示:
5、返回:當用戶成功授權登錄后,會跳轉到上述指定的回調地址里,并攜帶參數code和state值。如:redirect_uri?code=&state=
code值即為你要獲取(qu)到的Authorization Code值
state值即為上述你(ni)隨機產生的字符串
獲取Access Token值
1、獲取判斷:此時已經走到了回調地(di)址里(li)
獲取code值(zhi),state值(zhi)
判斷(duan)攜帶的state參數值(zhi)和你隨(sui)機(ji)產生(sheng)的字符串(chuan)是否相(xiang)等,相(xiang)等才能往(wang)下走!
2、請求網址:
url = " //graph.qq.com/oauth2.0/token? grant_type=authorization_code
&client_id=" + appid + "&client_secret="+ appkey + "&redirect_uri=" + redirectURI + "&code=" + code
3、參數及其(qi)對應值:
grant_type的值(zhi)固定為authorization_code;
client_id的(de)值(zhi)為申請的(de)appid;
client_secret的(de)值(zhi)為申請的(de)appkey;
redirect_uri的(de)值為申請時(shi)填寫的(de)回調地址;(注意:需要將url進行編碼!!!)
code值為(wei)獲取到(dao)的Authorization Code值
4、這個直接在后臺請求就可以(yi)了。
5、請求成功后,返回包如下:(可以手動請求一下該網址,看看返回的是什么)
“access_token= &expires_in=&refresh_token=***”
access_token即為我們(men)要獲取到access_token值
expires_in即為access_token值的有效(xiao)期
refresh_token,忽(hu)略。
獲取OpenID值:
1、獲取(qu)access_token值
2、請求網址:
url = “//graph.qq.com/oauth2.0/me?access_token=” + access_token
3、參數及(ji)其對(dui)應值:
access_token值(zhi)為獲取到(dao)的Access Token值(zhi)
4、這個也是直接在后(hou)臺請求就可以了。
5、請求(qiu)成功后,返回包如下:
callbackc ( {“client_id”: “", “openid”: "”} )
client_id即為(wei)appid
openid即為我們要獲取到的openid值
獲取該QQ用戶的相關信息
1、獲取(qu)openid值:此值與用(yong)戶QQ號(hao)一(yi)一(yi)對(dui)應,不(bu)會改變。因此,可(ke)以(yi)將此值存入數(shu)據庫,與網(wang)站賬(zhang)號(hao)進(jin)行(xing)綁定。一(yi)般來(lai)說,若QQ用(yong)戶第(di)一(yi)次授(shou)權(quan)登錄,應讓他先(xian)進(jin)行(xing)自(zi)己網(wang)站的賬(zhang)號(hao)注冊,注冊成功以(yi)后就可(ke)以(yi)直(zhi)接通過QQ進(jin)行(xing)登錄。
2、請求網址:
url = " //graph.qq.com/user/get_user_info?access_token=" + access_token
+ "&oauth_consumer_key=" + appid + "&openid=" + openid
3、參數及其對(dui)應值:
access_token值(zhi)為上述獲取到的access_token值(zhi)
oauth_consumer_key值為申請的appid
openid值(zhi)為獲(huo)取(qu)到的openid值(zhi)
4、這個還是直接在后臺請求就(jiu)可以了(le)。
5、請求成功后,返回包(json數據)如下:
nickname為用戶的昵稱
figureurl_qq_1為用戶不同尺寸的QQ頭像url
gender為用戶性別
…
6、拿(na)到這些數據(ju)后,就可以去前臺(tai)展示了。至此(ci),QQ登錄完成!