QQ互聯第三方登陸 redirect uri is illegal(100010)


想必第一次大家接觸QQ第三方登陸都會遇到各種各樣的問題,備受折磨,因此,今天我把自己做QQ登陸的過程描述一下,希望給大家提供參考,少走彎路。

在開發之前,我們先了解下QQ登陸的流程

第一:查看熟悉 網站接入概述

第二:開發者注冊  網站接入流程

第三:前兩步熟悉以后,獲取到appid后,即可進行開發了。

本次只介紹PC網站接入QQ過程

  1. 登陸頁面放置QQ登陸按鈕
    <span id="qqLoginBtn" ></span>

    id可自定義修改,如果樣式不對,也可以自定義class,做一些樣式控制。

  2. 在登陸頁面引用QQ登陸js庫。
    <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="XXXX" data-redirecturi="http://www.51purse.com/qq_back.html" charset="utf-8" ></script>

    data-appid對應的XXXX需要替換為你自己的appid,上面您完成開發者注冊后,即可獲取到appid。
    data-redirecturi為回調地址,后面對應的值是我目前網站的回調頁面,大家也可以自己寫一個頁面。

  3. 新建空白頁面(回調頁面)
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
      <head>
          <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title>我愛管賬網</title>
        <meta http-equiv="pragma" content="no-cache" />
        <meta http-equiv="cache-control" content="no-cache" />
        <meta http-equiv="expires" content="0" />    
        <meta http-equiv="keywords" content="我愛錢包,錢包管家,我愛記賬,我愛管賬" />
        <meta http-equiv="description" content="我愛管賬網是一種給主要給用戶提供記賬理財的工具,幫助用戶更好更合理的管理自己的資金,幫助用戶分析和控制預算" />
        <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-callback="true" charset="utf-8" ></script>
      </head>
      
      <body>
      </body>
    </html>

    大家一定要切記:此處必須是空白頁面,就是什么內容都不放,值建一個空的HTML文件,引入sdk文件即可,大家完全可復制我的。

  4. 登陸頁面初始化相關參數,初始化QQ圖標,自定義尺寸,傳入id。
    if($("#qqLoginBtn").size()>0){
            QC.Login({
                btnId : "qqLoginBtn",//插入按鈕的html標簽id
                size : "A_M",//按鈕尺寸
                scope : "get_user_info",//展示授權,全部可用授權可填 all
                display : "pc"//應用場景,可選
            },function(reqData, opts){
                document.cookie="flag=2";
                window.location.href="welcome.html";
            });
        }

    此處代碼,引入到登陸頁面中,初始化的時候,就會加載QQ圖片到按鈕上去。function(reqData,opts){}方法,即為登陸成功后的回調,登陸成功以后,我這邊會手動讓他回到主頁面,因為我是JS開發者,做的是單頁面應用,所以只能自己手動回到主頁面,當然,大家其它語言的,可以直接通過action跳轉到主頁面。

  5. 在主頁面(welcome.html)同樣需要引用sdk文件庫,如果QQ按鈕和主頁面在同一個頁面的話,只需要引入一次即可,比如某些論壇。
    <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="XXXX" data-redirecturi="http://www.51purse.com/qq_back.html" charset="utf-8" ></script>

    此處代碼,同登陸頁面一樣,大家直接復制過去即可。

  6. 登陸成功后,大家需要調用QQ的API來獲取用戶的資料信息,方便在自己網站上展示,同時可將相關字段存入自己的數據庫,以維護用戶的數據。
    //判斷當前用戶是否登陸
    if(QC.Login.check()){//如果已登錄
         //用JS SDK調用OpenAPI,此處可獲得openId, accessToken
         QC.Login.getMe(function(openId, accessToken){
              //調用get_user_info接口,可得到用戶的資料信息,此處不需要傳入任何參數,因為QQapi會自動帶入參數            
              QC.api("get_user_info",{}).success(function(rep){
                 var nickName = rep.data.nickname;
                 var gender = rep.data.gender;
                 var figureurl = rep.data.figureurl;
                 $("#currentUserNickName").text(rep.data.nickname);
               });
         });
    }else{
         document.cookie="flag=1;expires="+new Date(0).toUTCString();
         window.location.href="login.html";
    }

    此代碼可以獲取用戶資料信息,同時也可以獲取到openId和accessToken。

  7. 到此基本QQ第三方登陸就結束了,另外一個非常重要的地方是,在您個人的管理中心中,申請appid的地方,需要將回調地址,改成和上面建的空白頁面的地址一樣即為:
    http://www.51purse.com/qq_back.html,切記,必須這么寫,否則,登陸會報錯(redirect uri is illegal(100010)),這一點我深有體會,官網的Demo是有問題的,我查閱了很多資料都無法解決,我總以后是登陸成功后的頁面,所以,我之前填的是主頁面,可是怎么弄都不想,必須是之前建的空白頁面。
  8. 以上7條基本可以實現完整的QQ登陸了。下面給大家補充一下get_user_info接口的返回數據,大家其實也可以去查看API文檔,我這邊稍微提一下。
    get_user_info接口
    
    ret    返回碼
    msg    如果ret<0,會有相應的錯誤信息提示,返回數據全部用UTF-8編碼。
    nickname    用戶在QQ空間的昵稱。
    figureurl    大小為30×30像素的QQ空間頭像URL。
    figureurl_1    大小為50×50像素的QQ空間頭像URL。
    figureurl_2    大小為100×100像素的QQ空間頭像URL。
    figureurl_qq_1    大小為40×40像素的QQ頭像URL。
    figureurl_qq_2    大小為100×100像素的QQ頭像URL。需要注意,不是所有的用戶都擁有QQ的100x100的頭像,但40x40像素則是一定會有。
    gender    性別。 如果獲取不到則默認返回"男"
    is_yellow_vip    標識用戶是否為黃鑽用戶(0:不是;1:是)。
    vip    標識用戶是否為黃鑽用戶(0:不是;1:是)
    yellow_vip_level    黃鑽等級
    level    黃鑽等級
    is_yellow_year_vip    標識是否為年費黃鑽用戶(0:不是; 1:是)
    
    
    {
     
    "ret":0,
     
    "msg":"",
     
    "nickname":"Peter",
     
    "figureurl":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/30",
     
    "figureurl_1":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/50",
     
    "figureurl_2":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100",
     
    "figureurl_qq_1":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/40",
     
    "figureurl_qq_2":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/100",
     
    "gender":"男",
     
    "is_yellow_vip":"1",
     
    "vip":"1",
     
    "yellow_vip_level":"7",
     
    "level":"7",
     
    "is_yellow_year_vip":"1"
     
    }

    。。

  9. 最好給大家提供幾個地址:
    sdk下載地址
    api文檔列表地址
  10. 給大家看下我的登陸效果

    這是登陸頁面渲染出來的QQ登陸圖標。

    這是點擊QQ登陸后,跳轉第三方QQ登陸窗口頁面。

    這是登陸成功后的主頁面。

    這是我再申請QQ登陸時的管理中心頁面,填寫自己的回調地址,此處非常重要,填錯,就無法進行跳轉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM