第三方登陸SDK

          緊接着上次的第三方登陸文檔,這一波又來了。php

       1、使用qq登陸https://connect.qq.com/html

            首次登陸的話會跳轉到應用開發者註冊,本身測試的話選擇我的。下面的各項本身按真實狀況填寫。java

             

        註冊後添加應用,網址必定要是外網能訪問的你的網站,不能隨便填寫的。點擊驗證會出現一部分代碼,將代碼複製粘貼在你網站首頁或者一級目錄下HTML代碼的head標籤中。完成代碼粘貼      後點擊彈出成的開始驗證。驗證成功會提示網站驗證成功,下一步建立應用。 json

        建立成功後自動跳轉到應用,頁面上會顯示上一個博文中的APPIDAPPKEY了。          安全

        配置本地的項目的域名,將域名指向127.0.0.1;沒有虛擬機的可使用localhost來配置,在本身的域名所指位置或者localhost建立一個接收返回值的php文件,如:code.php。在其中           接收$_GET[「code」]。並將其也配置在你添加的應用回調地址中(http://localhost/code.php)。(多個回調地址中間用英文分號隔開)cookie

           QQ互聯每修改一次配置都有驗證一下網址才能夠保存。session

      2、引入官方SDKapp

            從開放平臺的文檔資料下載SDKide

         

            

 

                找個合適的版本,由於我作的是PHP,就下載PHP的,作java的小夥伴能夠下載java的對應類型。函數

                下載解壓後會有一個connect2.1的文件夾,放在項目的根目錄,API文件夾中放置了配置文件和接入類,開發中主要用的就是這個文件夾,doc文件夾是開發幫助文檔,example中是一

     些功能示例。Install文件夾是幫助配置的一個文件。

              訪問connect2.1文件夾,會顯示下圖的樣子,按照提示填寫配置,請求受權不建議選擇太多,按照本身的需求選擇就能夠,由於選擇的受權都會在用戶登陸的OAuth頁面顯示給用戶的,

     給用戶不安全感。配置以後除了API文件夾其餘均可以刪掉啦。

              

             若是沒有看上一篇博文的話要提早看一下,方便理解啊。

             QQ互聯http://wiki.connect.qq.com/這個頁面中OAuth協議介紹中有開發攻略,  Server_side  Client_side分別指的服務端語言和客戶端語言分別是怎麼接入的,php語言是服務端語言,因此使用

    的是Server_side

      3、SDK核心類和重要方法 

登陸受權相關的三個主要類(Connect2.1/class/*.class.php

  (1)、Recorder.class.php[配置讀寫與SESSION存取]

        __construct方法中:

          $incFileContents = file(ROOT."comm/inc.php");//讀取配置文件jsoninc.php是自動             生成的一個文件,裏面包含有appidappkey,callback

          $incFileContents = $incFileContents[1];

          $this->inc = json_decode($incFileContents);//解析成PHP對象

        readInc($name)方法中:

          return $this->inc->$name;//->readInc("appid")即讀取配置文件的appid

 

 (2)、URL.classphp[基於CURL庫的getpost請求]

  public function combineURL($baseURL,$keysArr){

        $combined = $baseURL."?";//拼接?

        $valueArr = array();
 
        foreach($keysArr as $key => $val){
$valueArr[] = "$key=$val";//拼接參數 } $keyStr = implode("&",$valueArr);//使用&拼接參數鍵值對 $combined .= ($keyStr); return $combined; }

            (3)、Oauth.class.php[Oauth相關URL動態拼接與token操做]

public function qq_login(){//拼接qq登陸頁面URL
        $appid = $this->recorder->readInc("appid");//讀取appid
        $callback = $this->recorder->readInc("callback");//讀取回調地址
        $scope = $this->recorder->readInc("scope");//讀取受權列表

        //-------生成惟一隨機串防CSRF攻擊
        $state = md5(uniqid(rand(), TRUE));//原樣返回參數
        $this->recorder->write('state',$state);//state寫入session中

        //-------構造請求參數列表
        $keysArr = array(
            "response_type" => "code",
            "client_id" => $appid,
            "redirect_uri" => $callback,
            "state" => $state,
            "scope" => $scope
        );

        $login_url =  $this->urlUtils->combineURL(self::GET_AUTH_CODE_URL, $keysArr);

        header("Location:$login_url");
    }

                

      4、SDK優化

             SDK太長時間也沒有新的版本,因此有的東西老了,要調整一下文件及目錄。SDK中可能有常量名稱太普通,與你本地的項目中常量名稱重複了;因此能夠批量替換SDK中的常量名稱爲不常見

    的名稱。能夠將代碼少的文件直接寫在包含該文件的頁面中,省去包含。而後能夠將不用的文件刪除。

      下面呢有一個調試函數,能夠新建一個php文件放進去,我這就放到了debug.php中了;在項目中引入這個文件用來調試。

function  debug($val,$dump=false,$exit=true){
    if($dump){
        $zz = 'var_dump';
    } else {
        $zz = (is_array($val)|| is_object($val))?'print_r':'printf';
    }
    //輸出到html、
    header("Content-type:text/html;charst=utf-8");
    echo '<pre>debug output:<hr/>';
    $zz($val);
    echo '</pre>';
    if($exit)exit;
}

 

     

qqlogin.php頁面

  require_once 'debug.php';

  require_once 'Connect2.1/qqConnectAPI.php';

  //訪問QQ登陸頁面

  $oauth = new Oauth();

  $oauth->qq_login();

     5、獲取openId

       QQ用戶在第三方站點的惟一標識,同一個QQ用戶在不一樣站點登陸使用QQ登陸openID是同樣的。能夠直接判斷openID是否是第一次登陸就能夠知道用戶是否是第一次登陸,能夠作一些限制什  麼的。

 

  獲取openID

  Callback.php頁面

     require_once 'debug.php';

    require_once 'Connect2.1/qqConnectAPI.php';

    //請求accesstoken

    $oauth = new Oauth();

    $accesstoken=$oauth->aa_callback();

    $openid=$oauth->get_openid();

  最後能夠將$accesstoken$openid存在cookie裏,退出qq登陸時候也就是將cookie中存的數據刪除掉。

   

 

            在使用過程當中須要注意如下三點:

                  APPid申請以後3個月未申請上線將被回收。

                  申請上線須要使用官網提供的QQ登陸按鈕素材。

                  站點裏不能有違國家法律的東西。

     接下來的開發能夠參照官方給的流程:在這裏-->http://wiki.connect.qq.com/

     這個暫時告一段落了,後面還要繼續新的方向......加油!

相關文章
相關標籤/搜索