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