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

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['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);
这时候你就可以获取授权用户的信息了,我把他打印出来了;以上就结束了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值