一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - QQ登錄 PHP OAuth示例代碼

QQ登錄 PHP OAuth示例代碼

2019-12-07 15:32PHP教程網 PHP教程

申請是立即通過的 目前騰訊僅開放獲取昵稱和頭像的API,以后會陸續推出其他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)){ 
//保存,一般發給用戶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("獲取頭像昵稱時發生錯誤".$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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠躁夜夜躁人人爽天天miya | 王雨纯羞羞 | 国产探花视频在线观看 | 91porny.首页 | 五月婷婷丁香在线视频 | 女人狂吮男人命根gif视频 | www.四虎在线| nxgx国产 | 成人国产在线视频 | 国产精品一区二区久久 | 国内视频一区二区三区 | 国产香蕉97碰碰久久人人 | 成年人免费在线看 | 99久久成人 | 99热在线获取最新地址 | 免费午夜影片在线观看影院 | 操娇妻| 成人国产精品一区二区不卡 | 国产成人综合亚洲亚洲欧美 | 免费一级片在线 | 香蕉成人国产精品免费看网站 | 香艳69xxxxx有声小说 | 国产麻豆91欧美一区二区 | 视频一区二区在线 | 极品在线| 天天做天天玩天天爽天天 | 久久精品国产在热亚洲完整版 | 欧美一级欧美三级 | 国产农村一一级特黄毛片 | 免费人成网址在线观看国内 | 久草在在线免视频在线观看 | 东京道一本热大交乱 | 欧美日韩国产成人综合在线影院 | 午夜国产在线 | 亚州精品视频 | 精品欧美一区二区三区四区 | 国产免费看黄的私人影院 | 沉沦艳妇杨幂肉体小说 | 久久re热在线视频精99 | 国产在线步兵一区二区三区 | 无人区大片免费播放器 |