php实现第三方登录,百度第三方登录

  1. 配置说明
    1.1 php 版本5.3

1.2 IDE phpstorm9.0.2

  1. 实现过程
    2.1前期准备

建议先阅读 oAuth2.0的相关资料
http://developer.baidu.com/wiki/index.php?title=docs/oauth
然后再进行操作,极客学院的第三方登录视频也可以作为参考
http://www.jikexueyuan.com/course/1742.html
2.2具体实现
1,登录百度开发者中心http://developer.baidu.com/百度开发中心登录之后,点击【应用管理】,然后点击【创建工程】,填写好相应的资料。然后我们得到了应用的API KEY和SECRET KEY 如下图所示。应用示例接着,在【安全设置】中填写我们的的授权回调页的地址,下图是我做测试用的。授权回调页
2我没有用官方给的php-sdk ,所以自己写了一个。下面是项目的目录。
项目目录
建议还是先看一下官方的文档或者上面的视频,来具体操作一下,体会一下oAuth2.0的授权的过程。项目中涉及到的url都是官方文档里面的,我下面就不做详细的介绍了。
首先是config.php

$api_key = '78poqN1EjuFEMH5bH9i11NLQ';
$serect_key = '4HV51jiSg2OC0WXQnZ2Vqc0Gxu';
$redirect_url = 'http://localhost/phpfrom0913/baidulogin/callback.php';
$apibase_url = 'https://openapi.baidu.com/rest/2.0/';
$logout = 'http://www.baidu.com';//线上调试使用

这是用来填写应用所需要的一些值。包括secret-key,回调地址,百度应用接口调用的基本url信息,还有重定向用到的url。
下面是login.php 是登录的界面。

session_start();
require_once 'config.php';
$getcode_url = "http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=$api_key&redirect_uri=$redirect_url";
?>
<html>
<head>
   <meta charset="UTF-8">
   <title>login</title>
</head>
<body>
点我点我<a href="<?php echo $getcode_url ?>"><img src="baidu.jpg" alt="使用百度账号登录"></a>
</body>
</html>

当我们点击登录的图片的时候,我们将访问回调地址callback.php其代码如下:

/**
 * Created by PhpStorm.
 * User: tao
 * Date: 2016-09-13
 * Time: 20:50
 */

session_start();
require_once 'config.php';
require_once 'dohttps.php';
$code = $_GET['code'];
if($code){
    $getaccesstoken_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=$code&client_id=$api_key&client_secret=$serect_key&redirect_uri=$redirect_url";
    $httpsobj = new doHttps();
    $https_res = $httpsobj->getdata($getaccesstoken_url);
    $accesstoken = $https_res['access_token'];
    $userinfo_url = $apibase_url.'passport/users/getLoggedInUser'.'?access_token='.$accesstoken;
    $user_res = $httpsobj->getdata($userinfo_url);
    $smallpic = $user_res['portrait'];
    $nickname = $user_res['uname'];
    $_SESSION['accesstoken'] = $accesstoken;
    $_SESSION['nickname'] = $nickname;
    $_SESSION['smallpic'] = $smallpic;
}else{
    echo "<javascript>alert('授权失败')</javascript>";
}
header("Location: ".'index.php');

其中包含了一个dohttps.php的文件,,这是用来模拟访问url以用来获得对应的get参数,例如code和accesstoken。当程序正确获取到code的时候就可以完成第三方登录操作了,也可以获取到用户相关的第三方的参数值,具体的可以参看官方的文档。

  1. 运行截图
    登录:

登录界面
跳转到百度登录界面:
这里写图片描述
登录成功,获取到用户信息
这里写图片描述
退出登录界面
这里写图片描述
可以看出退出的时候出现了错误,这是因为config.php中我们写的重定url和我们创建的百度应用中的安全配置中的域名不对应。如果想要正确退出,我们需要在【安全设置】中配置正确的根域名,这个我在线下的时候没有测试成功,因为没有办法正确填写根域名。按照安装官方文档中的说明去做的话,线上的测试是没有问题的,可是唯一的问题,在线上测试的时候,当我们第一次用百度授权登陆之后,之后成功退出,再次登陆的时候,如果不清除浏览器数据的话,就会出现页面无法访问的错误,提示是请求回调地址太频繁。
至此,我还是没有解决为什么会出现我刚刚提到的问题,不知道是不是没有按照官方的sdk去使用,造成了某个环节记录无法彻底清除的错误,还是自己写的demo出错,决定回头再把sdk试用一遍,看看是否能正确的解决问题,假如有什么意见,记得戳我。
把整个demo放到百度云盘里面了,假如需要的话,自己下载一下咯,不要嫌弃:)http://pan.baidu.com/s/1o7ONgqm OR 链接:http://pan.baidu.com/s/1dFds6WT 密码:zpd8

添加新评论