공식 문서에 따라 작성
코드 복사 코드는 다음과 같습니다
/**
* 신청 http://connect.opensns.qq.com/apply
* 목록 http://connect.opensns.qq.com/my
*/
session_start();
$qq_oauth_config = 배열(
'oauth_consumer_key'=>'********',//앱 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 = 새로운 qq_oauth($qq_oauth_config);
switch($action){
//용户登录 1단계:请求临时token
case 'login':
$token = $qq->oauth_request_token();
$_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];
$qq->authorize($token['oauth_token']);
휴식; $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('콘텐츠 유형: 텍스트/html; charset=utf-8');
$user_info = json_decode($qq->get_user_info());
if($user_info->ret!=0){
exit("获取头image昵称时发生错误".$user_info->msg);
} else {
echo 'QQ昵称:',$user_info->nickname,
'',
'',
'' ;
}
}
휴식;
기본값 :
}
class qq_oauth{
private $config;
함수 __construct($config){
$this->config = $config;
}
/**
* 반환 구성
* @param string $name
*
*/
function C($name){
return isset($this->config[$name]) ? $this->config[$name] : 거짓;
}
/**
* 빌드 요청 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를 반환합니다.
거짓을 반환합니다.
}
function get_contents($url){
$curl = 컬_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_URL,$url);
curl_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 토큰적密钥,该密钥仅限于临时token
error_code 错误码
*/ (isset($error_code )) 종료($error_code);
반환 배열(
'oauth_token'=>$oauth_token,
'oauth_token_secret'=>$oauth_token_secret
);
}
/**
* 3단계: 사용자를 Qzone 로그인 페이지로 안내
* @param string $oauth_token 승인되지 않은 임시 토큰
*/
함수 승인($oauth_token){
$str = "HTTP/1.1 302 발견"
헤더($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('위치: '.$url.'?'.$ query_strings);
}
/**
* 4단계: Qzone은 사용자에게 타사 애플리케이션으로 이동하도록 안내합니다.
* @return bool 유효한지 확인하세요
*/
functionregister_user(){
/*
* oauth_token 승인 임시 토큰
* openid Tencent 사용자 외부 통합 ID, OpenID는 사용자의 QQ 번호
* oauth_signature 서명 값과 일대일로 대응하므로 제3자가 openid와 소스의 신뢰성을 쉽게 확인할 수 있습니다.
* HMAC-SHA1 알고리즘 사용:
* 소스 문자열: openid 타임스탬프(문자열 중간에 ' ' 기호를 추가하지 마세요)
* 키: oauth_consumer_secret
* 타임스탬프 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']
반환;
}
//확인 실패
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에서 제3자에 대한 인증을 삭제할 수 있는 권한을 가지고 있습니다. 이때 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;
$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