PHP版QQ互联OAuth示例代码分享
发布时间:2020-12-13 02:44:06 所属栏目:PHP教程 来源:网络整理
导读:《PHP版QQ互联OAuth示例代码分享》要点: 本文介绍了PHP版QQ互联OAuth示例代码分享,希望对您有用。如果有疑问,可以联系我们。 由于国内QQ用户的普遍性,所以现在各大网站都尽可能的提供QQ登陆口,下面我们来看看php版,给大家参考下 PHP应用 /** * QQ互联 oau
《PHP版QQ互联OAuth示例代码分享》要点: 由于国内QQ用户的普遍性,所以现在各大网站都尽可能的提供QQ登陆口,下面我们来看看php版,给大家参考下PHP应用 /** * QQ互联 oauth * @author dyllen * */ class Oauth { //取Authorization Code Url const PC_CODE_URL = 'https://graph.qq.com/oauth2.0/authorize'; //取Access Token Url const PC_ACCESS_TOKEN_URL = 'https://graph.qq.com/oauth2.0/token'; //取用户 Open Id Url const OPEN_ID_URL = 'https://graph.qq.com/oauth2.0/me'; //用户授权之后的回调地址 public $redirectUri = null; // App Id public $appid = null; //App Key public $appKey = null; //授权列表 //字符串,多个用逗号隔开 public $scope = null; //授权code public $code = null; //续期access token的凭证 public $refreshToken = null; //access token public $accessToken = null; //access token 有效期,单位秒 public $expiresIn = null; //state public $state = null; public $openid = null; //construct public function __construct($config=[]) { foreach($config as $key => $value) { $this->$key = $value; } } /** * 得到获取Code的url * @throws InvalidArgumentException * @return string */ public function codeUrl() { if (!$this->redirectUri) { throw new Exception('parameter $redirectUri must be set.'); } $query = [ 'response_type' => 'code','client_id' => $this->appid,'redirect_uri' => $this->redirectUri,'state' => $this->getState(),'scope' => $this->scope,]; return self::PC_CODE_URL . '?' . http_build_query($query); } /** * 取access token * @throws Exception * @return boolean */ public function getAccessToken() { $params = [ 'grant_type' => 'authorization_code','client_secret' => $this->appKey,'code' => $this->code,]; $url = self::PC_ACCESS_TOKEN_URL . '?' . http_build_query($params); $content = $this->getUrl($url); parse_str($content,$res); if ( !isset($res['access_token']) ) { $this->thrwoError($content); } $this->accessToken = $res['access_token']; $this->expiresIn = $res['expires_in']; $this->refreshToken = $res['refresh_token']; return true; } /** * 刷新access token * @throws Exception * @return boolean */ public function refreshToken() { $params = [ 'grant_type' => 'refresh_token','refresh_token' => $this->refreshToken,$res); if ( !isset($res['access_token']) ) { $this->thrwoError($content); } $this->accessToken = $res['access_token']; $this->expiresIn = $res['expires_in']; $this->refreshToken = $res['refresh_token']; return true; } /** * 取用户open id * @return string */ public function getOpenid() { $params = [ 'access_token' => $this->accessToken,]; $url = self::OPEN_ID_URL . '?' . http_build_query($params); $this->openid = $this->parSEOpenid( $this->getUrl($url) ); return $this->openid; } /** * get方式取url内容 * @param string $url * @return mixed */ public function getUrl($url) { $ch = curl_init(); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_URL,$url); $response = curl_exec($ch); curl_close($ch); return $response; } /** * post方式取url内容 * @param string $url * @param array $keysArr * @param number $flag * @return mixed */ public function postUrl($url,$keysArr,$flag = 0) { $ch = curl_init(); if(! $flag) curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,$keysArr); curl_setopt($ch,$url); $ret = curl_exec($ch); curl_close($ch); return $ret; } /** * 取state * @return string */ protected function getState() { $this->state = md5(uniqid(rand(),true)); //state暂存在缓存里面 //本身定义 //......... return $this->state; } /** * 验证state * @return boolean */ protected function verifyState() { //....... } /** * 抛出异常 * @param string $error * @throws Exception */ protected function thrwoError($error) { $subError = substr($error,strpos($error,"{")); $subError = strstr($subError,"}",true) . "}"; $error = json_decode($subError,true); throw new Exception($error['error_description'],(int)$error['error']); } /** * 从获取openid接口的返回数据中解析出openid * @param string $str * @return string */ protected function parSEOpenid($str) { $subStr = substr($str,strpos($str,"{")); $subStr = strstr($subStr,true) . "}"; $strArr = json_decode($subStr,true); if(!isset($strArr['openid'])) { $this->thrwoError($str); } return $strArr['openid']; } } 以上所述就是本文的全部内容了,希望大家能够喜欢. 编程之家培训学院每天发布《PHP版QQ互联OAuth示例代码分享》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |