//第三方登入 ----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