在网站的开发功能中,我们很多时间需要做第三方登录,比如说QQ,百度账号,新浪微博等可以登录自己的网站。
百度账号登录。
<button οnclick="baidu()" class="u-btn btn-bd">使用百度帐号登录</button>
function baidu(){
window.location.href = "<{$web_url}>/index.php/login/baidu";
}
public function baidu(){
//client_id 这个需要在百度开发者平台申请
//redirect_uri 这个就是 申请账号的写的回调地址
//
$url = "http://openapi.baidu.com/social/oauth/2.0/authorize?media_type=baidu&client_id=*********&state=&response_type=code&redirect_uri=http%3A%2F%2
F*****&display=page&client_type=web";
header("location:".$url);
}
这个就是百度验证请求的信息 ,要是正确的话 会返回一个code到你的回调地址,这个code也就是相当于一个钥匙,有了这个钥匙,你就可以去寻找百度账号的有关信
返回的code格式
http://www.****/?code=226d900af50345e49513bc4f320f6007&state=
然后就是:
$accesstoken=$this->requestAccessToken($code);
$userinfo=$this->requestUserInfo($accesstoken['access_token']); //返回第三方用户信息
/**
* 获取AccessToKen
*/
private function requestAccessToken($code){
$url = 'https://openapi.baidu.com/social/oauth/2.0/token';
$client_id = '*********';//这个需要百度申请
$client_secret = '*************************';//这个需要百度申请
$redirect_uri='**********';//这个需要跟申请时候写的回调地址一样 格式;http://www.***.com
$params = array(
'grant_type' => 'authorization_code',
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'code' => $code,
);
$ch = curl_init();
$curl_opts = array(
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT => 5,
CURLOPT_USERAGENT => 'baidu-apiclient-php-2.0',
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => false,
);
if (stripos($url, 'https://') === 0) {
$curl_opts[CURLOPT_SSL_VERIFYPEER] = false;
}
$query = http_build_query($params, '', '&');
$delimiter = strpos($url, '?') === false ? '?' : '&';
$curl_opts[CURLOPT_URL] = $url . $delimiter . $query;
$curl_opts[CURLOPT_POST] = false;
curl_setopt_array($ch, $curl_opts);
$result = curl_exec($ch);
if ($result === false) {
curl_close($ch);
return false;
} elseif (empty($result)) {
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200) {
curl_close($ch);
return false;
}
}
curl_close($ch);
return json_decode($result, true);
}
/**
* 返回第三方用户信息
* @param $access_token
*/
private function requestUserInfo($access_token){
$url="https://openapi.baidu.com/social/api/2.0/user/info?access_token={$access_token}";
$result=file_get_contents($url);
$result =json_decode($result,true);
return $result;
}
var_dump($userinfo) 就可以显示出百度接口