ホームページ >php教程 >php手册 >QQ ログイン PHP OAuth サンプル コード

QQ ログイン PHP OAuth サンプル コード

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:07:16817ブラウズ

公式ドキュメントに従って記述

コードをコピー コードは次のとおりです:


/**
* 適用 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['アクション'] : '';
$qq = 新しい qq_oauth($qq_oauth_config);
switch($action){
//用户登录 ステップ 1:请要求時トークン
case 'login':
$token = $qq->oauth_request_token();
$_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];
$qq->authorize($token['oauth_token']);
休憩;
//ステップ 4: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->ニックネーム,
'',
'',
'' ;
}
}
休憩;
デフォルト :
}
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' ]))
true を返します。
false を返します。
}
function get_contents($url){
$curl =curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_URL,$url);
returncurl_exec($curl);
}
/**
* ステップ 1: 一時トークンを要求、ステップ 2: 未承認の一時トークンを生成
*/
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 未許可の一時トークン
oauth_token_secret トークンの秘密、この秘密は一時トークンに限定されます
error_code 错误码
*/
if(isset($error_code )) exit($error_code);
return array(
'oauth_token'=>$oauth_token,
'oauth_token_secret'=>$oauth_token_secret
);
}
/**
* ステップ 3: ユーザーを Qzone ログイン ページに案内します
* @param string $oauth_token 不正な一時トークン
*/
function authorize($oauth_token){
$str = "HTTP/1.1 302 が見つかりました"
header($str); $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);
}
/**
* ステップ 4: Qzone は、ユーザーがサードパーティのアプリケーションにジャンプするようにガイドします
* @return bool 有効かどうかを確認します
*/
function register_user(){
/*
* oauth_token 承認された一時トークン
* openid Tencent ユーザーの外部統一 ID、 OpenID はユーザーの QQ 番号
* oauth_signature 署名値と 1 対 1 に対応しており、これにより第三者が openid とソースの信頼性を検証することが容易になります。
* HMAC-SHA1 アルゴリズムを使用します:
* ソース文字列: openid タイムスタンプ (文字列の途中に「 」記号を追加しないでください)
* キー: oauth_consumer_secret
* タイムスタンプ openid タイムスタンプ
* oauth_vericode 認証確認コード。
*/
if($this->check_callback()){
//署名を検証
$signature =base64_encode(hash_hmac('sha1',$_GET['openid']. $ _GET['タイムスタンプ'],$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')
}
/**
* ステップ 5: アクセス トークンをリクエスト
*/
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);
/**
* ステップ 6: アクセス トークンの生成 (アクセス トークンの保存)
*
* access_token について
* 現在、access_token (およびそのシークレット) は長期間有効であり、特定の openid に対応できます。現在オンラインでサポートされています。 以下の openid 情報を取得します。
* もちろん、ユーザーは Qzone 上で第三者への認可を削除する権限を持っています。このとき、access_token は無効になり、プロセス全体がユーザーによって再認可される必要があります。
* 今後、access_token の有効期限は長期有効、短期有効、ユーザーログイン時のみ有効など徐々に充実していきます。
*/
関数 save_access_token($access_token_str){
parse_str($access_token_str,$access_token_arr);
if(isset($access_token_arr['error_code'])){
return
} else {
return $access_token_arr;
}
}
/**
* 現在、Tencent はこの 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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。