基于JSSDK的QQ第三方登錄

網(wǎng)站要集成QQ登錄首先要到QQ互聯(lián)申請開發(fā)賬號剑逃,審核通過后創(chuàng)建web項(xiàng)目或移動app項(xiàng)目潮改。本文使用web項(xiàng)目進(jìn)行QQ登錄集成热康。QQ互聯(lián)網(wǎng)址:https://connect.qq.com/

開發(fā)賬號審核通過后讯沈,在應(yīng)用管理里創(chuàng)建應(yīng)用凝果,可以創(chuàng)建網(wǎng)站應(yīng)用和移動應(yīng)用祝迂,本文選擇創(chuàng)建移動應(yīng)用:


首先需要填寫網(wǎng)站的類型,網(wǎng)站名稱器净,網(wǎng)站簡介型雳。


創(chuàng)建成功后需要補(bǔ)充應(yīng)用信息,主要補(bǔ)充的內(nèi)容有:網(wǎng)站地址和網(wǎng)站回調(diào)域山害,這個是開發(fā)和測試的時候需要使用的纠俭,要填寫正確,主辦方和網(wǎng)站備案號浪慌,如果是正式上線項(xiàng)目填寫真實(shí)信息冤荆,審核通過后可用。如果是測試這兩個誰便填寫权纤,但是審核不會通過钓简,審核不通過也會生成appid和密碼,可以進(jìn)行測試開發(fā)了汹想。

QQ第三方登錄提供多種方式外邓,使用JSSDK的方式集成網(wǎng)站應(yīng)用比較簡單。

可以參考:http://wiki.open.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91JS_SDK%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E#1._.E5.AE.9E.E7.8E.B0QQ.E7.99.BB.E5.BD.95.E5.8A.9F.E8.83.BD

1. 實(shí)現(xiàn)QQ登錄功能

開發(fā)者只需要按以下四個步驟粘貼代碼到網(wǎng)頁古掏,即可實(shí)現(xiàn)QQ登錄功能损话,過程非常簡單快速。現(xiàn)在就去體驗(yàn)槽唾。

1.1 引用JS SDK的JavaScript文件

1. 首先需要申請接入QQ登錄丧枪,并成功獲取到appid和appkey光涂。

2. 在html頁面適當(dāng)?shù)奈恢靡隞S腳本包(將下面代碼中的“APPID”替換為申請接入QQ登錄時獲得的appid;"REDIRECTURI"替換為申請接入QQ登錄時輸入的回調(diào)地址):

src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8">

1.2. 放置QQ登錄按鈕

在html頁面需要插入QQ登錄按鈕的位置豪诲,粘貼如下代碼:

? ? QC.Login({

? ? ? btnId:"qqLoginBtn" //插入按鈕的節(jié)點(diǎn)id

});

上述代碼中放置了一個html元素節(jié)點(diǎn)顶捷,并給該節(jié)點(diǎn)指定全頁面唯一的id,例如上面例子中的屎篱;開發(fā)者也可將其改成自定義的按鈕名稱蠢笋。

上述步驟正確執(zhí)行后突雪,頁面粘貼上述代碼處會出現(xiàn)如下按鈕:


點(diǎn)擊該按鈕郭宝,即可發(fā)起登錄請求蝇裤。

若需要對登錄按鈕進(jìn)行設(shè)置,請自定義登錄按鈕秦士。將修改后的代碼粘貼到頁面中放置登錄按鈕處缺厉。

JS SDK封裝了獲取Access Token以及OpenID的方法,因此開發(fā)者不需要再開發(fā)代碼進(jìn)行獲取隧土,直接調(diào)用QQ登錄OpenAPI即可提针。

1.3. 回傳Access Token和OpenID

該步驟的作用是回調(diào)地址將獲取到的Access Token和OpenID返回給調(diào)用頁面。

在回調(diào)地址頁面曹傀,即1.1節(jié)中回調(diào)地址“REDIRECTURI”指定的頁面辐脖,粘貼如下代碼:

src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" charset="utf-8" data-callback="true">

1.4. 調(diào)用QQ登錄OpenAPI

(1)調(diào)用方式說明

QQ互聯(lián)在JS SDK中封裝了所有的OpenAPI接口,開發(fā)者只需要傳遞OpenAPI名稱皆愉,以及OpenAPI需要的相關(guān)參數(shù)嗜价,就可以調(diào)用OpenAPI。

調(diào)用OpenAPI時幕庐,請統(tǒng)一遵循下述調(diào)用方式:

QC.api(api, paras, fmt, method):Request


QQ登錄JS SDK教程久锥,調(diào)用openapi接口

參考:http://justcoding.iteye.com/blog/2030743

QQ登錄將用戶信息存儲在cookie中,命名為__qc__k ,請不要占用 __qc__k :


1) :: 在頁面頂部引入JS SDK庫:

將“js?”后面的appid參數(shù)(示例代碼中的:100229030)替換成您自己的appid:

Js代碼?

??


2) :: HTML頁面中粘貼如下代碼异剥,插入QQ登錄按鈕

Js代碼?

??

??

????QC.Login({??

btnId:"qqLoginBtn"??//插入按鈕的節(jié)點(diǎn)id??

????});??



3) :: 調(diào)用openapi:

Js代碼?

??

var?paras?=?{};??


QC.api("get_user_info",?paras)??

.success(function(s){//成功回調(diào)??

alert("獲取用戶信息成功瑟由!當(dāng)前用戶昵稱為:"+s.data.nickname);??

????})??

.error(function(f){//失敗回調(diào)??

alert("獲取用戶信息失敗冤寿!");??

????})??

.complete(function(c){//完成請求回調(diào)??

alert("獲取用戶信息完成错妖!");??

????});??



返回 json格式的用戶信息;請指定接口訪問成功的接收參數(shù)疚沐,如demo中的success(function(s)),即指定將成功返回值傳遞到s中; 其中所有API的返回均為response對象潮模,包括:data, code, status等屬性亮蛔,分別表示數(shù)據(jù)、返回碼擎厢、請求的響應(yīng)狀態(tài)


3.2) ※ 調(diào)用openapi發(fā)分享 [相同url參數(shù)只能分享一次]:

Js代碼?

??

//從頁面收集openapi必要的參數(shù)??

var?paras?=?{??

images:"http://y.photo.qq.com/img?s=OnbP8BwOF&l=y.jpg",??

title:"#QQ互聯(lián)JSSDK測試#我是標(biāo)題啊標(biāo)題",??

url:"http://connect.qq.com/",??

comment:"我是評論:轉(zhuǎn)發(fā)原因",??

summary:"我是摘要:內(nèi)容說明"??

};??


//用jssdk調(diào)用openapi??

QC.api("add_share",?paras)??

.success(function(s){//請自行改寫成功回調(diào)??

alert("分享成功究流,請到空間內(nèi)查看辣吃!");??

????})??

.error(function(f){//請自行改寫失敗回調(diào)??

alert("分享失敗芬探!");??

????})??

.complete(function(c){//請自行改寫完成請求回調(diào)??

alert("分享完成神得!");??

????});??



3.3) ※ 調(diào)用openapi發(fā)微博:

Js代碼?

??

var?paras?=?{content?:?"#QQ互聯(lián)JSSDK測試#曾經(jīng)滄海難為水,除卻巫山不是云偷仿。"};??


QC.api("add_t",?paras)??

.success(function(s){//成功回調(diào)??

alert("發(fā)送微博成功哩簿,請到騰訊微博內(nèi)查看!");??

????})??

.error(function(f){//失敗回調(diào)??

alert("發(fā)送微博失斣途病节榜!");??

????})??

.complete(function(c){//完成請求回調(diào)??

alert("發(fā)送微博完成!");??

????});??



3) :: 獲取openId 與 accessToken

Js代碼?

??

if(QC.Login.check()){//如果已登錄??

QC.Login.getMe(function(openId,?accessToken){??

alert(["當(dāng)前登錄用戶的",?"openId為:"+openId,?"accessToken為:"+accessToken].join("\n"));??

????});??

//這里可以調(diào)用自己的保存接口??

//...??

}??



用戶通過“QQ登錄”登錄成功后别智,可以調(diào)用示例代碼將獲取到openId與accessToken

openid是用戶身份的唯一標(biāo)識宗苍,請保存在本地,以便用戶下次登錄時可對應(yīng)到其之前的身份信息薄榛,不需要重新授權(quán)讳窟。

accessToken:表示當(dāng)前用戶在此網(wǎng)站/應(yīng)用的登錄狀態(tài)與授權(quán)信息,也請保存在本地敞恋。

原文:http://qzonestyle.gtimg.cn/qzone/openapi/js-sdk-demo.html


完整實(shí)例:

Html代碼?

????

????

data-appid="101037443"?data-redirecturi="http://ikeepstudying.com/services/qq.php"?data-callback="true"?charset="utf-8">????


??

??

???//調(diào)用QC.Login方法丽啡,指定btnId參數(shù)將按鈕綁定在容器節(jié)點(diǎn)中??

???QC.Login({??

???????//btnId:插入按鈕的節(jié)點(diǎn)id,必選??

???????btnId:"qqLoginBtn",??????

???????//用戶需要確認(rèn)的scope授權(quán)項(xiàng)耳舅,可選碌上,默認(rèn)all??

???????scope:"all",??

???????//按鈕尺寸,可用值[A_XL|?A_L|?A_M|?A_S|??B_M|?B_S|?C_S]浦徊,可選馏予,默認(rèn)B_S??

???????size:?"A_XL"??

???},?function(reqData,?opts){//登錄成功??

????????//根據(jù)返回數(shù)據(jù),更換按鈕顯示狀態(tài)方法??

vardom?=?document.getElementById(opts['btnId']),??

_logoutTemplate=[??

????????????//頭像??

'',??

????????????//昵稱??

'{nickname}',??

????????????//退出??

'退出'??????

????????].join("");??

dom?&&?(dom.innerHTML?=?QC.String.format(_logoutTemplate,?{??

???????????nickname?:?QC.String.escHTML(reqData.nickname),?//做xss過濾??

???????????figureurl?:?reqData.figureurl??

????????}));??


?????//?????QC.Login.getMe(function(openId,?accessToken){????

?????//?????alert(["當(dāng)前登錄用戶的",?"openId為:"+openId,?"accessToken為:"+accessToken].join("\n"));????

????????//?});???


????????//這里可以調(diào)用自己的保存接口??

????????//...??


???},?function(opts){//注銷成功??

?????????alert('QQ登錄?注銷成功');??

???}??

);??



需要注意的是盔性,如果登錄地址和回調(diào)地址相同的話就要把?data-callback="true"?也加進(jìn)去霞丧,否則彈出窗口不會關(guān)閉。如:

Html代碼?

data-appid="101037443"?data-redirecturi="http://ikeepstudying.com/services/qq.php"?data-callback="true"?charset="utf-8">???


如果登錄地址和回調(diào)地址不是同意頁面的話就要分別寫冕香。

登錄頁面為

Html代碼?

data-appid="101037443"?data-redirecturi="http://ikeepstudying.com/services/qq.php"?charset="utf-8">???

回調(diào)地址為

Html代碼?

???

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛹尝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悉尾,更是在濱河造成了極大的恐慌突那,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构眯,死亡現(xiàn)場離奇詭異愕难,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門猫缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葱弟,“玉大人,你說我怎么就攤上這事猜丹≈ゼ樱” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵射窒,是天一觀的道長藏杖。 經(jīng)常有香客問我,道長轮洋,這世上最難降的妖魔是什么制市? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮弊予,結(jié)果婚禮上祥楣,老公的妹妹穿的比我還像新娘。我一直安慰自己汉柒,他們只是感情好误褪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碾褂,像睡著了一般兽间。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上正塌,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天嘀略,我揣著相機(jī)與錄音,去河邊找鬼乓诽。 笑死帜羊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸠天。 我是一名探鬼主播讼育,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稠集!你這毒婦竟也來了奶段?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤剥纷,失蹤者是張志新(化名)和其女友劉穎痹籍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晦鞋,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡词裤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年刺洒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吼砂。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鼎文,靈堂內(nèi)的尸體忽然破棺而出渔肩,到底是詐尸還是另有隱情,我是刑警寧澤拇惋,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布周偎,位于F島的核電站,受9級特大地震影響撑帖,放射性物質(zhì)發(fā)生泄漏蓉坎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一胡嘿、第九天 我趴在偏房一處隱蔽的房頂上張望蛉艾。 院中可真熱鬧,春花似錦衷敌、人聲如沸勿侯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽助琐。三九已至,卻和暖如春面氓,著一層夾襖步出監(jiān)牢的瞬間兵钮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工舌界, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掘譬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓禀横,卻偏偏與公主長得像屁药,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柏锄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 最近網(wǎng)站更新了一些需求酿箭,做了第三方登錄,總結(jié)了一些趾娃,也是第一次做缭嫡,有不足的地方歡迎指正!L啤妇蛀! 申請過程就不說了耕突,下...
    yi條咸魚閱讀 3,735評論 0 1
  • 對于自己最近在做QQ第三方登錄的過程過個簡單的總結(jié)和筆記。方便自己以后的記憶也希望可以幫到有需要的朋友评架。 首先眷茁,需...
    浩3108閱讀 1,550評論 0 1
  • QQ互聯(lián) JS-SDK 對于自己最近在做QQ第三方登錄的過程過個簡單的總結(jié)和筆記。方便自己以后的記憶也希望可以幫...
    浩3108閱讀 7,765評論 8 11
  • 注意:代碼自己動手寫纵诞,不要復(fù)制上祈! GitHub 一、接入微信第三方登錄準(zhǔn)備工作浙芙。 移動應(yīng)用微信登錄是基于OAuth...
    大沖哥閱讀 15,072評論 0 7
  • 1.前期準(zhǔn)備: 1)先去QQ互聯(lián)申請APPID和APPkey 官方網(wǎng)站:https://connect.qq.co...
    Hoe王666閱讀 1,564評論 0 0