社会化登录在现在大多数的网站中都会存在的,比较火的有 新浪、人人、QQ、 如果挨个对这些平台做开发的话,会花费开发者很长的时间来开发和测试。当然了,百度社会化服务解决了这个问题。
直接代码:
<?php
/**
* WebApp - 团购第三方登录model
*/
class WeboauthModel{
/**
* 第三方登录
*/
public function loginAppUser(){
$accesstoken=$this->requestAccessToken($_GET['code']);
if($accesstoken==false){
return false;
}
$userinfo=$this->requestUserInfo($accesstoken['access_token']); //返回第三方用户信息
var_dump($userinfo);
}
public function loginUser($phone,$password){
$passport=model('Passport');
$result=$passport->loginLocal(phone,$password);
if(!$result){
$status = 0;
$info = $passport->getError();
$data = 0;
}else{
$status = 1;
$info = $passport->getSuccess();
$data = ($GLOBALS['ts']['site']['home_url'])?$GLOBALS['ts']['site']['home_url']:0;
}
return array('status'=>$status,'info'=>$info,'data'=>$data);
}
/**
* 获取AccessToKen
*/
private function requestAccessToken($code){
$url = 'https://openapi.baidu.com/social/oauth/2.0/token';
$client_id = 'API Key';
$client_secret = 'Secret Key';
$redirect_uri='回调地址、与应用中回掉地址相同';
$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;
}
}//end class
//回调文件
<?php
// 第三方登录回调方法
include('./social/WeboauthModel.class.php');
$token = $_GET['code'];
$Weboauth = new WeboauthModel();
$Weboauth->loginAppUser($token);
?>
//返回值为json、做了json_decode();
array(16) {
["username"]=>
string(6) "真名、"
["sex"]=>
string(1) "1"
["birthday"]=>
string(4) "1991"
["tinyurl"]=>
string(75) "http://hdn.xnimg.cn/photos/hdn321/20120101/1950/tiny_t6Jq_119344n019117.jpg"
["headurl"]=>
string(80) "http://hdn.xnimg.cn/photos/hdn121/20120101/1950/h_head_KXXQ_7a90000220ec2f75.jpg"
["mainurl"]=>
string(80) "http://hdn.xnimg.cn/photos/hdn121/20120101/1950/h_main_eBB8_7a90000220ec2f75.jpg"
["hometown_location"]=>
array(2) {
["province"]=>
string(6) "河北"
["city"]=>
string(9) "沧州市"
}
["work_history"]=>
array(1) {
[0]=>
array(4) {
["name"]=>
string(18) "北京一起新游"
["time"]=>
string(0) ""
["industry"]=>
NULL
["job"]=>
NULL
}
}
["university_history"]=>
string(24) "注释"
["hs_history"]=>
array(0) {
}
["province"]=>
string(0) ""
["city"]=>
string(0) ""
["is_verified"]=>
string(1) "1"
["media_uid"]=>
string(9) "-------"
["media_type"]=>
string(6) "renren"
["social_uid"]=>
int(------)
}
百度社会化服务参考、api地址
http://developer.baidu.com/dev#/appinfo/1728015/soc_login_select // 创建样式
下面我们提供一段简单的PHP示例代码,来介绍应该如何实现"社会化服务回调地址"这个接口。
http://developer.baidu.com/wiki/index.php?title=docs/social/guide/web_login/web_login5
http://developer.baidu.com/wiki/index.php?title=docs/social/api/list //api列表
注意回调地址应与应用地址相同 |