欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QQ登錄 PHP OAuth示例代碼

 更新時間:2011年07月20日 23:45:38   作者:  
申請是立即通過的 目前騰訊僅開放獲取昵稱和頭像的API,以后會陸續(xù)推出其他API 頭像是QQ空間的,官方文檔都是寫QQ空間登錄
根據官方文檔編寫
復制代碼 代碼如下:

<?php
/**
* 申請http://connect.opensns.qq.com/apply
* 列表http://connect.opensns.qq.com/my
*/
session_start();
$qq_oauth_config = array(
'oauth_consumer_key'=>'*******',//APP ID
'oauth_consumer_secret'=>'******************',//APP KEY
'oauth_callback'=>"http://www.955.cc/qq.php?action=reg",//這里修改為當前腳本,但是要保留?action=reg
'oauth_request_token_url'=>"http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token",
'oauth_authorize_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize',
'oauth_request_access_token_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token',
'user_info_url' => 'http://openapi.qzone.qq.com/user/get_user_info',
);
$action = isset($_GET['action']) ? $_GET['action'] : '';
$qq = new qq_oauth($qq_oauth_config);
switch($action){
//用戶登錄 Step1:請求臨時token
case 'login':
$token = $qq->oauth_request_token();
$_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];
$qq->authorize($token['oauth_token']);
break;
//Step4:Qzone引導用戶跳轉到第三方應用
case 'reg':
$qq->register_user();
$access_token = $qq->request_access_token();
if($token = $qq->save_access_token($access_token)){
//保存,一般發(fā)給用戶cookie,以及用戶入庫
//var_dump($token);
$_SESSION['oauth_token'] = $token['oauth_token'];
$_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];
$_SESSION['openid'] = $token['openid'];
header('Content-Type: text/html; charset=utf-8');
$user_info = json_decode($qq->get_user_info());
if($user_info->ret!=0){
exit("獲取頭像昵稱時發(fā)生錯誤".$user_info->msg);
} else {
echo 'QQ昵稱:',$user_info->nickname,
'<img src="',$user_info->figureurl,'" />',
'<img src="',$user_info->figureurl_1,'" />',
'<img src="',$user_info->figureurl_2,'" />';
}
}
break;
default :
}
class qq_oauth{
private $config;
function __construct($config){
$this->config = $config;
}
/**
* 返回配置
* @param string $name
*
*/
function C($name){
return isset($this->config[$name]) ? $this->config[$name] : FALSE;
}
/**
* 構建請求URL
* @param string $url
* @param array $params
* @param string $oauth_token_secret
*
*/
function build_request_uri($url,$params=array(),$oauth_token_secret=''){
$oauth_consumer_key = $this->C('oauth_consumer_key');
$oauth_consumer_secret = $this->C('oauth_consumer_secret');
$params = array_merge(array(
'oauth_version'=>'1.0',
'oauth_signature_method'=>'HMAC-SHA1',
'oauth_timestamp'=>time(),
'oauth_nonce'=>rand(1000,99999999),
'oauth_consumer_key'=>$oauth_consumer_key,
),$params);
$encode_params = $params;
ksort($encode_params);
$oauth_signature = 'GET&'.urlencode($url).'&'.urlencode(http_build_query($encode_params));
$oauth_signature = base64_encode(hash_hmac('sha1',$oauth_signature,$oauth_consumer_secret.'&'.$oauth_token_secret,true));
$params['oauth_signature'] = $oauth_signature;
return $url.'?'.http_build_query($params);
}
/**
* 校驗回調是否返回約定的參數
*/
function check_callback(){
if(isset($_GET['oauth_token']))
if(isset($_GET['openid']))
if(isset($_GET['oauth_signature']))
if(isset($_GET['timestamp']))
if(isset($_GET['oauth_vericode']))
return true;
return false;
}
function get_contents($url){
$curl = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_URL,$url);
return curl_exec($curl);
}
/**
* Step1:請求臨時token、Step2:生成未授權的臨時token
*/
function oauth_request_token(){
$url = $this->build_request_uri($this->C('oauth_request_token_url'));
$tmp_oauth_token = $this->get_contents($url);
parse_str($tmp_oauth_token);
/*
oauth_token 未授權的臨時token
oauth_token_secret token的密鑰,該密鑰僅限于臨時token
error_code 錯誤碼
*/
if(isset($error_code)) exit($error_code);
return array(
'oauth_token'=>$oauth_token,
'oauth_token_secret'=>$oauth_token_secret
);
}
/**
* Step3:引導用戶到Qzone的登錄頁
* @param string $oauth_token 未授權的臨時token
*/
function authorize($oauth_token){
$str = "HTTP/1.1 302 Found";
header($str);
$url = $this->C('oauth_authorize_url');
$query_strings = http_build_query(array(
'oauth_consumer_key'=>$this->C('oauth_consumer_key'),
'oauth_token'=>$oauth_token,
'oauth_callback'=>$this->C('oauth_callback'),
));
header('Location: '.$url.'?'.$query_strings);
}
/**
* Step4:Qzone引導用戶跳轉到第三方應用
* @return bool 驗證是否有效
*/
function register_user(){
/*
* oauth_token 已授權的臨時token
* openid 騰訊用戶對外的統一ID,該OpenID與用戶QQ號碼一一對應
* oauth_signature 簽名值,方便第三方來驗證openid以及來源的可靠性。
* 使用HMAC-SHA1算法:
* 源串:openid+timestamp(串中間不要添加'+'符號)
* 密鑰:oauth_consumer_secret
* timestamp openid的時間戳
* oauth_vericode 授權驗證碼。
*/
if($this->check_callback()){
//校驗簽名
$signature = base64_encode(hash_hmac('sha1',$_GET['openid'].$_GET['timestamp'],$this->C('oauth_consumer_secret'),true));
if(!emptyempty($_GET['oauth_signature']) && $signature==$_GET['oauth_signature']){
$_SESSION['oauth_token'] = $_GET['oauth_token'];
$_SESSION['oauth_vericode'] = $_GET['oauth_vericode'];
return;
}
}
//校驗未通過
exit('UNKNOW REQUEST');
}
/**
* Step5:請求access token
*/
function request_access_token(){
$url = $this->build_request_uri($this->C('oauth_request_access_token_url'),array(
'oauth_token'=>$_SESSION['oauth_token'],
'oauth_vericode'=>$_SESSION['oauth_vericode']
),$_SESSION['oauth_token_secret']);
return $this->get_contents($url);
}
/**
* Step6:生成access token (保存access token)
*
* 關于access_token
* 目前access_token(及其secret)是長期有效的,和某一個openid對應,目前可以支持線下獲取該openid的信息。
* 當然,用戶有權限在Qzone這邊刪除對第三方的授權,此時該access_token會失效,需要重新走整個流程讓用戶授權。
* 以后會逐步豐富access_token的有效性,長期有效、短期有效、用戶登錄時才有效等。
*/
function save_access_token($access_token_str){
parse_str($access_token_str,$access_token_arr);
if(isset($access_token_arr['error_code'])){
return FALSE;
} else {
return $access_token_arr;
}
}
/**
* 目前騰訊僅開放該API
* 獲取登錄用戶信息,目前可獲取用戶昵稱及頭像信息。
* http://openapi.qzone.qq.com/user/get_user_info
*/
function get_user_info(){
$url = $this->build_request_uri($this->C('user_info_url'),array(
'oauth_token'=>$_SESSION['oauth_token'],
'openid'=>$_SESSION['openid'],
),$_SESSION['oauth_token_secret']);
return $this->get_contents($url);
}
}

文件打包下載 qq_php.rar
轉自: http://dev.meettea.com

相關文章

  • php分頁代碼學習示例分享

    php分頁代碼學習示例分享

    這篇文章主要介紹了一個簡單的php分頁代碼,提供給大家學習一下了,代碼中有注釋,也可以直接使用
    2014-02-02
  • Yii2 輸出xml格式數據的方法

    Yii2 輸出xml格式數據的方法

    這篇文章主要介紹了Yii2 輸出xml格式數據的方法的相關資料,小編感覺非常具有參考價值,特此分享到腳本之家平臺,供大家參考
    2016-05-05
  • 20個2014年最優(yōu)秀的PHP框架回顧

    20個2014年最優(yōu)秀的PHP框架回顧

    這篇文章主要介紹了20個2014年最優(yōu)秀的PHP框架回顧,簡單分析了目前比較主流的優(yōu)秀框架供大家參考,需要的朋友可以參考下
    2014-10-10
  • Laravel5.5 手動分頁和自定義分頁樣式的簡單實現

    Laravel5.5 手動分頁和自定義分頁樣式的簡單實現

    今天小編就為大家分享一篇Laravel5.5 手動分頁和自定義分頁樣式的簡單實現,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 學習php分頁代碼實例

    學習php分頁代碼實例

    學習PHP,一定會遇到操作MYSQL數據庫,而且會對數據庫里的數據做分頁顯示出來的問題,下面寫一個小例子學習一下PHP分頁的方法。
    2013-10-10
  • 如何優(yōu)雅的使用 laravel 的 validator驗證方法

    如何優(yōu)雅的使用 laravel 的 validator驗證方法

    web 開發(fā)過程中經常會需要進行參數驗證,這篇文章主要介紹了如何優(yōu)雅的使用 laravel 的 validator驗證方法,非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • ThinkPHP查詢中的魔術方法簡述

    ThinkPHP查詢中的魔術方法簡述

    這篇文章主要介紹了ThinkPHP查詢中的魔術方法,非常的簡單實用!需要的朋友可以參考下
    2014-06-06
  • laravel日志優(yōu)化實例講解

    laravel日志優(yōu)化實例講解

    這篇文章主要介紹了laravel日志優(yōu)化實例講解,日志是查找代碼問題的重要的文件,有感興趣的同學可以學習下
    2021-03-03
  • ThinkPHP實現ajax仿官網搜索功能實例

    ThinkPHP實現ajax仿官網搜索功能實例

    這篇文章主要介紹了ThinkPHP實現ajax仿官網搜索功能的方法,實例演示了后臺查詢功能與前臺Ajax提交搜索數據的方法,是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • 函數中使用require_once問題深入探討 優(yōu)雅的配置文件定義方法推薦

    函數中使用require_once問題深入探討 優(yōu)雅的配置文件定義方法推薦

    這篇文章主要介紹了函數中使用require_once問題深入探討,優(yōu)雅的配置文件定義方法推薦,最終用一個靜態(tài)類來定義配置文件獲勝,完美解決函數中使用require_once的問題,需要的朋友可以參考下
    2014-07-07

最新評論