第三方登录之微博登录
第三方登录之百度登录
一、首先,前提条件
(1)你得有个熊账号,关于熊掌号申请请移步:熊掌号申请方法;
(2)有自己的服务器
(3)有百度站长平台
二、登录百度站长平台,在左侧点击“原创保护”,进入百度资源搜索平台-移动专区。
三、在搜索平台-移动专区,左侧栏目内找到“开发->开发设置”进入,设置“网页授权域名”。
四、设置服务器配置信息。
五、在左侧列表中,“开发->接口权限”,进入选择“百度帐号网页授权”,查看接口文档。
六、代码
(1)流程
第一步:引导用户完成授权获取code
第二步:获取网页授权access_token
第三步:获取授权用户信息
第四步:按需刷新access_token
(2)服务器配置接口代码(此处需要验证)
/**
* 用sha1算法生成安全签名
* @param string $strToken 票据
* @param string $intTimeStamp 时间戳
* @param string $strNonce 随机字符串
* @param string $strEncryptMsg 密文消息
* @return string
*/
function getSHA1($strToken, $intTimeStamp, $strNonce, $strEncryptMsg = '')
{
$arrParams = [
$strToken,
$intTimeStamp,
$strNonce,
];
if (!empty($strEncryptMsg)) {
array_unshift($arrParams, $strEncryptMsg);
}
sort($arrParams, SORT_STRING);
$strParam = implode($arrParams);
return sha1($strParam);
}
/**
*百度开发验证
*/
public function baidu()
{
//你的token
$TOKEN = 'a';
$strSignature = $this->getSHA1($TOKEN, $_GET['timestamp'], $_GET['nonce']);
if ($strSignature == $_GET['signature']) {
echo $_GET['echostr'];
} else {
//校验失败
echo 'failed';
}
}
(3)登录代码
/**
* 百度登录请求
*/
public function bdsend()
{
$APPID = "1qEjVd0IiisiYkjsWekYktO2dX****";
$REDIRECT_URI = "http://www.shenlin.ink/Open/baiduback";
$SCOPE = "snsapi_userinfo"; //此处需写此参数
$url = "https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=$APPID&redirect_uri=$REDIRECT_URI&scope=$SCOPE&state=STATE";
header("Location: $url");
}
/**
* 百度登录token获取
* @return mixed
*/
public function baiduToken($code)
{
$CLIENT_ID = "1qEjVd0IiisiYkjsWekYktO2****";
$APPSECRET = "Ajt0FmFSH4gOyYmaXUDxZQGRA*****";
$REDIRECT_URI = "http://www.shenlin.ink/Open/baiduback";
$url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=$code&client_id=$CLIENT_ID&client_secret=$APPSECRET&redirect_uri=$REDIRECT_URI";
$data = $this->httpsRequest($url);
return json_decode($data, true);
}
/**
* 第三方登录之百度登录
* @return \think\response\Json
*/
public function baiduback()
{
$code = input('get.code');
$data = $this->baiduToken($code);
$ACCESS_TOKEN = $data['access_token'];
$OPENID = $data['openid'];
$url = "https://openapi.baidu.com/rest/2.0/cambrian/sns/userinfo?access_token=$ACCESS_TOKEN&openid=$OPENID";
$userInfo = $this->httpsRequest($url);
return json(['code' => 200, 'msg' => '获取成功', 'data' => $userInfo]);
//后续请自行开发
}
(3)curl请求
/**
* httpsRequest
* @param $post_url
* @return mixed
*/
public function httpsRequest($post_url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);//要访问的地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//执行结果是否被返回,0是返回,1是不返回
curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置超时
$res = curl_exec($ch);//执行并获取数据
curl_close($ch);
return $res;
}
七、后续开发请自行扩展。