QQ第三方登錄 JS-SDK

QQ互聯(lián) JS-SDK

對于自己最近在做QQ第三方登錄的過程過個簡單的總結(jié)和筆記读存。方便自己以后的記憶也希望可以幫到有需要的朋友春叫。

1. 首先,需要申請接入QQ登錄量蕊,并成功獲取到 appid 和 appkey起暮。另外還要拿到之前在QQ互聯(lián)申請接入時候填的回調(diào)地址卖氨。
2. 設(shè)置2個頁面:QQ登錄頁面和回調(diào)地址頁面。

(注:如果QQ登錄頁面與回調(diào)地址頁面是同一個頁面, 則只需要引用一次腳本文件双泪。)

回調(diào)地址頁面(因為回調(diào)地址頁面比較簡單)

只要添加一下的代碼可以:

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

QQ登錄頁面

?
引入JS SDK的JS文件

    <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" 
    data-appid="[APPID]" data-redirecturi="[回調(diào)地址]" charset="utf-8"></script>

設(shè)置QQ登錄按鈕

 <span id="qqLoginBtn"></span>
 <script type="text/javascript">
//調(diào)用QC.Login方法持搜,指定btnId參數(shù)將按鈕綁定在容器節(jié)點中
QC.Login({
    //btnId:插入按鈕的節(jié)點id密似,必選
    btnId:"qqLoginBtn",    
    //用戶需要確認(rèn)的scope授權(quán)項焙矛,可選,默認(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"
})
</script>

如果正確的話會出現(xiàn)這個按鈕:


image

這個時候點擊按鈕的時候抛猫,就會跳轉(zhuǎn)到QQ用戶的登錄授權(quán)頁面蟆盹。

【鏈接是由你的appid,回調(diào)地址闺金,授權(quán)信息和一些設(shè)置得到的逾滥。用戶確認(rèn)授權(quán)之后,跳轉(zhuǎn)到回調(diào)頁面并得到code和state參數(shù)之后败匹,在去獲取Access Token寨昙,等到這個Token之后結(jié)合appid去拿到每個QQ用戶唯一的OpenID,之后就可以調(diào)用用戶的數(shù)據(jù)和權(quán)限等掀亩,OAuth的具體詳情有興趣可以參考我另一篇文章舔哪。】

授權(quán)成功返回數(shù)據(jù)

只要授權(quán)和登錄成功后捉蚤,就可以獲取用戶數(shù)據(jù)和調(diào)用接口了,JS的SDK不會很復(fù)雜缆巧,只要掌握好對應(yīng)的幾個公開方法既可操作。

 QC.Login(
 /*設(shè)置按鈕的樣式*/
 {
     btnId: "qqLoginBtn",
     scope: "all",
     size: "B_M"
 },
 /*
 @登錄成之后的回調(diào)方法
 @oInfo object 返回用基本信息
 @oOpts object 按鈕的基本情況陕悬,多個按鈕時可用來區(qū)分
 */
 function(oInfo, oOpts){
     console.log(oInfo);
     console.log(oOpts);
 }
 );

就可以根據(jù)登錄成功的回調(diào)函數(shù)獲取到基本信息去設(shè)置用戶登錄的狀態(tài)了。

image

JS SDK公開方法介紹:

  1. QC.Login.showPopup(oOpts)【直接打開QQ登錄彈窗】

    參數(shù)說明:

    oOpts:需要指定appId墩莫,回調(diào)地址redirect_URI逞敷。

    參數(shù)示例如下:

    QC.Login.showPopup({
       appId:"[appId]",
       redirectURI:"[回調(diào)地址]"
    });
    

    注意:

    oOpts參數(shù)不需必傳狂秦,不傳此參數(shù)時,登錄成功后會跳回登錄按鈕所在頁面推捐。
    如果已使用QC.Login方法裂问,則不需再使用此方法。

  2. QC.Login.signOut()【注銷當(dāng)前登錄用戶】

  3. QC.Login.check()【檢測當(dāng)前登錄狀態(tài)】

    返回值說明:

    true:說明登錄成功。
    false:說明登錄失敗堪簿。

  4. QC.Login.getMe(function(openId, accessToken){})【獲取當(dāng)前登錄用戶的Access Token以及OpenID】

參數(shù)說明:
這里的參數(shù)為回調(diào)函數(shù)痊乾,通過回調(diào)函數(shù)獲取openId和accessToken。
openId:用戶身份的唯一標(biāo)識椭更。建議保存在本地哪审,以便用戶下次登錄時可對應(yīng)到其之前的身份信息,不需要重新授權(quán)虑瀑。
accessToken:表示當(dāng)前用戶在此網(wǎng)站/應(yīng)用的登錄狀態(tài)與授權(quán)信息湿滓,建議保存在本地。

參數(shù)示例如下:

      QC.Login.getMe(function(openId, accessToken){
          console.log("當(dāng)前登錄用戶的accessToken為:"+accessToken);
          console.log("當(dāng)前登錄用戶的openId為:"+openId);
      });

注意:
getMe方法只能在用戶登錄授權(quán)后調(diào)用舌狗,建議總是在使用check方法并返回true的條件下叽奥,調(diào)用getMe方法。


調(diào)用QQ登錄OpenAPI接口

QQ互聯(lián)在JS SDK中封裝了所有的OpenAPI接口痛侍,開發(fā)者只需要傳遞OpenAPI名稱朝氓,以及OpenAPI需要的相關(guān)參數(shù),就可以調(diào)用OpenAPI主届。
QC.api(api, paras, fmt, method)【OpenAPI統(tǒng)一調(diào)用方式】

參數(shù)說明:

參 數(shù) 名 稱 是 否 必 須 描 述
api 必 須 指定要調(diào)用的OpenAPI名稱赵哲。例如:調(diào)用add_t時,OpenAPI名稱為“add_t”岂膳。各OpenAPI的名稱具體請參見API列表誓竿。
paras 必須 指定要調(diào)用的OpenAPI對應(yīng)的參數(shù)。各參數(shù)使用JSON的鍵值對格式列出谈截。OpenAPI對應(yīng)的參數(shù)具體請參見API列表中各OpenAPI的參數(shù)說明筷屡。注意:此處參數(shù)不需要自行傳遞access_token與openid
fmt 可選 指定OpenAPI的返回格式,可用值為“json”或“xml”簸喂。默認(rèn)為“json”毙死。 注意:json、xml為小寫喻鳄,否則將不識別扼倘。
method 可選 指定OpenAPI調(diào)用請求的發(fā)起方式,可用值為“GET”或“POST”除呵。根據(jù)配置再菊,默認(rèn)發(fā)送數(shù)據(jù)為“POST”,獲取數(shù)據(jù)為“GET”颜曾。

直接上代碼最靠譜了纠拔。
可以直接用個function包含起來,然后通過一個按鈕的事件去觸發(fā)而獲取到用戶信息

   <script type="text/javascript">
        //從頁面收集OpenAPI必要的參數(shù)泛豪。get_user_info不需要輸入?yún)?shù)侦鹏,因此paras中沒有參數(shù)
        var paras = {};  
        //用JS SDK調(diào)用OpenAPI
        QC.api("get_user_info", paras)
            //指定接口訪問成功的接收函數(shù)略水,s為成功返回Response對象
            .success(function(s){
                //成功回調(diào)渊涝,通過s.data獲取OpenAPI的返回數(shù)據(jù)
                alert("獲取用戶信息成功驶赏!當(dāng)前用戶昵稱為:"+s.data.nickname);
            })
            //指定接口訪問失敗的接收函數(shù),f為失敗返回Response對象
            .error(function(f){
                //失敗回調(diào)
                alert("獲取用戶信息失敻俏摹!");
            })
            //指定接口完成請求后的接收函數(shù)洒敏,c為完成請求返回Response對象
            .complete(function(c){
                //完成請求回調(diào)
                alert("獲取用戶信息完成凶伙!");
            });
     </script>

這個可以add_t接口也是可以用個function包含起來函荣,然后通過一個按鈕的事件去觸發(fā)用戶發(fā)布微博傻挂。

   <script type="text/javascript">
        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ā)送微博完成底洗!");
            });
     </script>

而我們需要的只是更改API調(diào)用的接口名亥揖。如果沒有參數(shù)就為空圣勒,如果有圣贸,則為JSON的鍵值對形式填寫。
具體的眾多參數(shù)請訪問API列表滑负。

Request與Response內(nèi)置對象

  1. Request
JS SDK在初始化時會根據(jù)瀏覽器環(huán)境創(chuàng)建不同的請求代理矮慕,QC.api的每次調(diào)用都是一個Request對象啄骇。
 
Request對象的公開方法如下:  
success(resp): 請求完成并且返回碼為0的回調(diào)。  
error(resp): 請求完成并且返回碼不為0的回調(diào)痪寻。  
complete(resp): 請求完成后的回調(diào)槽华。
 
調(diào)用時序為success/error -> complete趟妥,每個方法都可以調(diào)用多次,每次調(diào)用返回Request本身亲雪,支持鏈?zhǔn)秸{(diào)用疚膊。  
resp參數(shù)為回調(diào)函數(shù)寓盗,回調(diào)函數(shù)參數(shù)為Response對象璧函。
  1. Response
Response為Request對象綁定的回調(diào)函數(shù)的返回參數(shù)蘸吓,每次QC.api調(diào)用的異步響應(yīng)都會返回一個Response對象库继,該對象在Request對象的success/error -> complete調(diào)用流程中傳遞窜醉。
 
Response的公開方法如下:  
stringifyData:返回該Response對象包含的數(shù)據(jù)體的文本串榨惰。
 
Response的公開屬性如下:  
status:響應(yīng)狀態(tài),-1:代表未知;404:響應(yīng)錯誤杰捂;200:響應(yīng)成功棋蚌。  
fmt:響應(yīng)數(shù)據(jù)格式,json/xml蒿往。  
code/ret:響應(yīng)返回碼瓤漏,0為成功颊埃,其他為失敗班利。  
data:響應(yīng)數(shù)據(jù)實體,json對象/xml對象庸队。  
seq:響應(yīng)序號彻消,從1000開始編號。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末如输,一起剝皮案震驚了整個濱河市不见,隨后出現(xiàn)的幾起案子崔步,更是在濱河造成了極大的恐慌井濒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酪惭,死亡現(xiàn)場離奇詭異者甲,居然都是意外死亡虏缸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門窥岩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颂翼,“玉大人疚鲤,你說我怎么就攤上這事集歇』逵睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵鹅心,是天一觀的道長旭愧。 經(jīng)常有香客問我输枯,道長占贫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮螟深,結(jié)果婚禮上血崭,老公的妹妹穿的比我還像新娘厘灼。我一直安慰自己设凹,他們只是感情好茅姜,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布奋姿。 她就那樣靜靜地躺著,像睡著了一般素标。 火紅的嫁衣襯著肌膚如雪头遭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天撕予,我揣著相機與錄音,去河邊找鬼蜈首。 笑死实抡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欢策。 我是一名探鬼主播吆寨,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猬腰!你這毒婦竟也來了鸟废?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姑荷,失蹤者是張志新(化名)和其女友劉穎盒延,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鼠冕,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡添寺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年票罐,在試婚紗的時候發(fā)現(xiàn)自己被綠了阵谚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奠蹬。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡金度,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跟伏,到底是詐尸還是另有隱情兔跌,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一忽匈、第九天 我趴在偏房一處隱蔽的房頂上張望袋倔。 院中可真熱鬧宾娜,春花似錦承冰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膊升,卻和暖如春非区,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓凄鼻,卻偏偏與公主長得像峭范,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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

  • 對于自己最近在做QQ第三方登錄的過程過個簡單的總結(jié)和筆記佳吞。方便自己以后的記憶也希望可以幫到有需要的朋友鹊汛。 首先,需...
    浩3108閱讀 1,552評論 0 1
  • 最近網(wǎng)站更新了一些需求镊叁,做了第三方登錄敛腌,總結(jié)了一些卧土,也是第一次做夸溶,有不足的地方歡迎指正=莅蟆W撤浴鸭叙! 申請過程就不說了学歧,下...
    yi條咸魚閱讀 3,749評論 0 1
  • 什么是OAuth? OAuth(Open Authorization伪嫁,開放授權(quán))是為用戶資源的授權(quán)定義了一個安全领炫、...
    PHPer_閱讀 3,704評論 1 6
  • 一. 首先需要下載騰訊qq登錄所需的庫,下載地址是http://open.qq.com/ 张咳。需要用到的有Tence...
    LambZhou閱讀 3,559評論 1 0
  • 1.前期準(zhǔn)備: 1)先去QQ互聯(lián)申請APPID和APPkey 官方網(wǎng)站:https://connect.qq.co...
    Hoe王666閱讀 1,566評論 0 0