微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP版QQ互联OAuth示例代码分享

由于国内QQ用户的普遍性,所以现在各大网站都尽可能的提供QQ登陆口,下面我们来看看PHP版,给大家参考下

//取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($p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>ms);
$content = $this->getUrl($url);
parse_str($content,$res);
if ( !isset($res['access_token']) ) {
  $this->thr<a href="https://www.jb51.cc/tag/woe/" target="_blank" class="keywords">woe</a>rror($content);
}

$this->acce<a href="https://www.jb51.cc/tag/sst/" target="_blank" class="keywords">sst</a>oken = $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->acce<a href="https://www.jb51.cc/tag/sst/" target="_blank" class="keywords">sst</a>oken = $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($p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>ms);

$this->openid = $this->par<a href="https://www.jb51.cc/tag/SEO/" title="SEO">SEO</a>penid( $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'];

}
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐