天天看點

PHP第三方登入--QQ登入

//第三方登入 ----QQ号碼登入
// 1> 前置條件: QQ号碼 + 公網通過域名可以通路的web伺服器(網站根目錄具有讀寫權限)  伺服器運作環境
// 2> 申請AppID 與 APPKey      QQ互聯 :http://connect.qq.com
// 3> 建立注冊 : 網站位址:公網可通路的域名  回調位址: 網站首頁  -> 複制 meta标簽
// 4> 開始驗證->建立應用 App ID: dfhshdfjkvj12123   App Key : njdfhjdgfgjkhdjkgh453sd4f54d5gdr

//1 callback.php
<?php
// echo $_GET['code'];
  $oauth = new Oauth();
  $accessToken = $oauth -> qq_callback();
  $openId = $oauth->get_openid();


setcookie('qq_caaessToken',$accessToken,time()+86400);
setcookie('qq_openid',$openId,time()+86400);
header('Location: index.php');

?>
// 2. 引入官方SDK 從開方平台的文檔中心下載下傳SDK qqConnect_Server_SDK-php_v2.1.zip
// SDK解讀: 文檔資料 -> oauth開發指引 -> 開發攻略 _Server_side (服務端)
// SDK 核心類與方法 :
// 登入授權的三個主要類 *.class.php
//  Recorder.class.php[配置讀寫與SESSION存取]
 ~  __construct()
  $incFileContents = file(ROOT,'comm/inc.php');讀入配置檔案json字元串
  $incFileContents = $incFileCotents[1];
  $this->inc = json_decode($incFileContents); 解析成php對象
 ~  readInc($name)
   return $this->inc->$name;
   ->readInc('appid') 讀取配置檔案中的AppID
//  URL.class.php [基于curl庫的get與POST請求]
  ~ conbineURL($baseURL,$keysArr);
     $conbined = $baseURL. '?'; 拼接?
     foreach($keysArr as $key=>$val) $valueArr[] = '$key=$val';拼接參數
     $keyStr = implode("&",$valueArr); 使用&拼接參數鍵值對
  生成形如:http:// xxx.com?a=b&c=d...的連結
    get($url,$keyArr) ; 發送get請求
   post($url,$keyArr,$flag = 0);發送POST請求
//  Oauth.class.php [Oauth相關的URL動态拼接與token請求]
    qq_login ; 拼接QQ登入頁面URl
    $appid = $this->record->readInc('appid'); 讀取AppID
    $callback = $this->record->readInc('callback'); 讀取回調位址
    $scope = $this->record->readInc('scope'); 讀取授權清單
    // ..........生成唯一随機字元串防CSRF攻擊
  $state = MD5(uniqid(rand(),TURE)); 原樣傳回參數
  $this->recorrd->write('state',$state); state寫入SESSION中
 $ketArr = array(
     'response_type' => 'code',
     'client_id' => $appid,
     'redirect_url' => $callback,
     'scope' => $scope,
     'state' => $state,
   );

// index.php