演示地址:http://jiesc.net/oauth/login
shiny 写于 2011, April 20, 8:19 PM. 微风日志
- 申请是立即通过的
- 目前腾讯仅开放获取昵称和头像的API,以后会陆续推出其他API
- 头像是QQ空间的,官方文档都是写QQ空间登录
- 根据官方文档编写
PHP代码
- <?php
-
-
-
-
- session_start();
-
$qq_oauth_config = array(
-
'oauth_consumer_key'=>'*******',
-
'oauth_consumer_secret'=>'******************',
-
'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){
-
-
case 'login':
-
$token = $qq->oauth_request_token();
-
$_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];
-
$qq->authorize($token['oauth_token']);
-
break;
-
-
case 'reg':
-
$qq->register_user();
-
$access_token = $qq->request_access_token();
-
if($token = $qq->save_access_token($access_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;
- }
-
-
-
-
-
-
function C($name){
-
return isset($this->config[$name]) ? $this->config[$name] : FALSE;
- }
-
-
-
-
-
-
-
-
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);
- }
-
-
-
-
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);
-
-
-
-
-
-
if(isset($error_code)) exit($error_code);
-
return array(
-
'oauth_token'=>$oauth_token,
-
'oauth_token_secret'=>$oauth_token_secret
- );
- }
-
-
-
-
-
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);
- }
-
-
-
-
-
function register_user(){
-
-
-
-
-
-
-
-
-
-
-
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');
- }
-
-
-
-
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);
- }
-
-
-
-
-
-
-
-
-
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;
- }
- }
-
-
-
-
-
-
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);
- }
- }
本文转载自http://dev.meettea.com/show-95-1.html
|
请发表评论