您的位置:首页 > 编程语言 > PHP开发

关于PHP获取QQ授权后的用户信息

2017-06-28 10:54 597 查看
1.首先在我们网页中给一个QQ授权的按钮,比如一个a标签,然后要连的链接是:

https://graph.qq.com/oauth/show?which=Login&display=pc&response_type=code&client_id=******&redirect_uri=****

其中需要传入的两个参数是client_id和redirect_uri;这两个参数,在开发者中心能获取到;

点击的时候他会跳转到授权的页面,当点击授权的QQ时,这时我们就需要在redirect_uri那个回调地址里面写我们的php代码了;

我的代码比如我的redirect_uri的地址是http://www.baidu.com/demo/index.php

那我的php代码就是写在index.php里面;我的代码如下:

<?php
/* +--------------------------------------------
* | QQ授权登录 [ WE CAN DO IT JUST THINK IT ]
* +---------------- --------------------—------
*/
header("Content-type: text/html; charset=utf-8");
class Oauth{

//注册成功得到的ID
public $appid = null ;
//注册成功得到的密钥
public $appkey = null ;
//回调网址
public $redirectUrl = null ;
//授权code
public $code = null ;
//通过code获取的零时token
public $accessToken = null ;
//通过token得到用户的唯一标识openid
public $openid = null ;

public function __construct($AccessToken = null,$Openid = null){

$this->appid       = ****;
$this->appkey      = '****';
$this->redirectUrl = 'http://www.baidu.com/demo/index.php';
$this->code        = $_GET[[b]'code'];
$this->accessToken = $AccessToken;
$this->openid      = $Openid;
}

/*
* 获取accesstoken
*/
public function getAccessToken(){

$url = 'https://graph.qq.com/oauth2.0/token';
$data = array(
'grant_type'    => 'authorization_code',
'client_id'     => $this->appid,
'client_secret' => $this->appkey,
'code'          => $this->code,
'redirect_uri'  => $this->redirectUrl,
) ;
$result = $this->getUrl($url,$data);
$info   = $this->get_url_info($result);
return $info;
}

/*
* 获取openid
* @param $accessToken string
*/
public function getOpenid($accessToken = null){
if(empty($accessToken)){
die('accesstoken不能为空!');
}
$url = 'https://graph.qq.com/oauth2.0/me';
$data = array(
'access_token'    => $accessToken
) ;
$result = $this->getUrl($url,$data);
$result = substr($result,9,strlen($result)-12);
$info   = json_decode($result);
return $info;

}
/*
* 获取用户基本信息
* @param $accessToken string
* @param $openid string
* @return array
*/
public function getUserInfo($accessToken = null,$openid = null){
if(empty($accessToken) && empty($openid)){
die('accesstoke,openid不能为空!');
}
$url = 'https://graph.qq.com/user/get_user_info';
$data = array(
'access_token'       => $accessToken,
'oauth_consumer_key' => $this->appid,
'openid'             => $openid
) ;
$result = $this->getUrl($url,$data);
$obj = json_decode($result);
return $obj;

}

/*
* get方法获取url参数
* @param string $url
* $param array $data
* return array $response
*/
public function getUrl($url,$data)
{
$url = $this->create_new_url($url,$data);
$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;
}

/*
* 生成待参数的url
* @param @url string
* @param @$data string
* @return $string
*/
public function create_new_url($url,$data){
$str = null;
foreach ($data as $key=>$value){
$str = $str.$key.'='.$value.'&';
}
return $url.'?'.substr($str,0,-1);
}

/*
* 获取url中数据
* @param @str string
* @return $array
*/
public function get_url_info($str){

$params = explode('&', $str);
$list = array();
foreach ($params as $k=>$v){
$arr = explode('=', $v);
$list[$arr[0]] = $arr[1];
}
return $list;
}
}

$oauth = new Oauth();
//获取token
$resulta = $oauth->getAccessToken();
session_start();
if(isset($_SESSION['access_token'])){
unset($_SESSION['access_token']);
}
$_SESSION['access_token'] = $resulta['access_token'];
//获取openid
$ret = $oauth->getOpenid($resulta['access_token']);
if(isset($_SESSION['openid'])){
unset($_SESSION['openid']);
}
$_SESSION['openid'] = $ret->openid;
//获取用户信息
$result = $oauth->getUserInfo($_SESSION['access_token'],$_SESSION['openid']);

var_dump($result);

这时候你就可以获取授权用户的信息了,我把他打印出来了;以上就结束了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP qq 授权