www.gusucode.com > Carbon Forum PHP轻论坛系统 v3.6.5源码程序 > Carbon-Forum-3.6.5/includes/Oauth.QQ.class.php
<?php require(__DIR__ . '/URL.class.php'); class Oauth { const VERSION = "2.0"; const GET_AUTH_CODE_URL = "https://graph.qq.com/oauth2.0/authorize"; const GET_ACCESS_TOKEN_URL = "https://graph.qq.com/oauth2.0/token"; const GET_OPENID_URL = "https://graph.qq.com/oauth2.0/me"; const GET_USER_INFO_URL = "https://graph.qq.com/user/get_user_info"; private $AppKey; public $AccessToken = null; public $OpenID = null; public $NickName = null; public $AvatarURL = null; function __construct($AppKey) { $this->AppKey = $AppKey; //$this->GetAccessToken(); //$this->GetOpenID(); } public static function AuthorizeURL($WebsitePath, $AppID, $AppKey, $SendState) { //http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token $RequestParameter = array( 'response_type' => 'code', 'client_id' => $AppKey, 'redirect_uri' => $WebsitePath . '/oauth-' . $AppID, 'state' => $SendState, 'scope' => 'get_user_info,get_info' ); return self::GET_AUTH_CODE_URL . '?' . http_build_query($RequestParameter); } public function GetAccessToken($WebsitePath, $AppID, $AppSecret, $Code) { // 请求参数列表 $RequestParameter = array( "grant_type" => "authorization_code", "client_id" => $this->AppKey, "redirect_uri" => $WebsitePath . '/oauth-' . $AppID, "client_secret" => $AppSecret, "code" => $Code ); // 构造请求access_token的url $TokenURL = self::GET_ACCESS_TOKEN_URL . '?' . http_build_query($RequestParameter); $Response = URL::Get($TokenURL); // Example: // access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14 // 检测错误是否发生 if (strpos($Response, "callback") !== false) { $LeftBracketPosition = strpos($Response, "("); $RightBracketPosition = strrpos($Response, ")"); $Response = substr($Response, $LeftBracketPosition + 1, $RightBracketPosition - $LeftBracketPosition - 1); $Msg = json_decode($Response, true); //记录错误,这里没写Error Log模块 $this->AccessToken = null; return false; } else { $Params = array(); parse_str($Response, $Params); $this->AccessToken = $Params["access_token"]; return true; } } public function GetOpenID() { // 请求参数列表 $RequestParameter = array( "access_token" => $this->AccessToken ); $GraphURL = self::GET_OPENID_URL . '?' . http_build_query($RequestParameter); $Response = URL::Get($GraphURL); // 检测错误是否发生 if (strpos($Response, "callback") !== false) { $LeftBracketPosition = strpos($Response, "("); $RightBracketPosition = strrpos($Response, ")"); $Response = substr($Response, $LeftBracketPosition + 1, $RightBracketPosition - $LeftBracketPosition - 1); } // http://wiki.connect.qq.com/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7openid_oauth2-0 // Example: // callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} ); $UserInfo = json_decode($Response, true); if (isset($UserInfo['error'])) { //记录错误,这里没写Error Log模块 // 记录openid $this->OpenID = null; return null; } else { // 记录openid $this->OpenID = $UserInfo['openid']; return $UserInfo['openid']; } } public function GetUserInfo() { // 请求参数列表 $RequestParameter = array( "access_token" => $this->AccessToken, "oauth_consumer_key" => $this->AppKey, "openid" => $this->OpenID, "format" => "json" ); $GraphURL = self::GET_USER_INFO_URL . '?' . http_build_query($RequestParameter); $Response = URL::Get($GraphURL); // http://wiki.connect.qq.com/get_user_info $UserInfo = json_decode($Response, true); if ($UserInfo['ret'] != 0) { //记录错误,这里没写Error Log模块 return false; } else { // 储存昵称 $this->NickName = $UserInfo['nickname']; // 储存头像 $this->AvatarURL = $UserInfo['figureurl_qq_2']; return true; } } }