首先第三方应用要跟微信帐号合作,然后按照下面的方法操作:
目前,百度OAuth2.0支持五种获取Access Token的流程和一种刷新获取AccessToken方式,第三方可根据需求选取合适的方式:
百度授权的Access Token是有有效期的,这样会影响用户的体验和增加开发者的工作。所以平台提供了一种方式可以保证授权有效期为永久。
- 实现方式:返回给第三方一个月有效期的Access Token + 十年有效期的Refresh Token。
- 实现原理:Refresh Token的作用就是在Token有效期截止前,刷新以获取新的Access Token。
第一步:注册百度直达号应用。
可以通过百度的开放平台去注册一个应用。之后你会得到一个App Key和一个App Secret。拥有它们,你才可以申请权限。
假设你的App Key是“1234567890”,App Secret是“abcdefghijklmnopqrstuvwxyz"
第二步:写代码。
将获取到的OAuth的php版本的SDK加入你的project中。将你申请到的Key和Secret做为两个变量定义并赋值。
对于OAuth来说,很多细节不需要我们去关注的,只要知道几个重要的步骤即可:
1. 第三方发起百度授权登录请求,百度用户允许授权第三方应用后,百度会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. Access Token:用户身份验证和授权的凭证。第三方应用在调用百度开放API之前,首先需要获取Access Token。
3. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
4. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
4. 获得未授权的access_token这个获得未授权的 access_token就相当于放行条,也就是百度允许你开始获取用户的权限。
5. 根据这个access_token的内容,获得一个url地址,这个地址页面就是想登录你应用的用户输入用户名和密码的地方。注意的是,这个url是属于百度为你的这个应用创建的回调地址。
6. 用户在上述登录界面输入自己的用户名和密码,成功登录之后,你可以获得已授权的 Access KEY。这个Access Key就包含了用户多登录信息(包括昵称、用户openID等等,这里的昵称是指用户显示在百度上的名字,而不是用户的登录名)。
实例代码:
1、调用授权页面:login.php
//百度第三方登录函数 function baidu(){require_once('u/baidu/Baidu.php');$clientId = '1234567890';$clientSecret = 'abcdefghijklmnopqrstuvwxyz';$redirectUri = 'http://www.bookask.com:8080/?a=login&b=callback&c=baidu';$domain = '.book.com';$baidu = new Baidu($clientId, $clientSecret, $redirectUri, new BaiduCookieStore($clientId));// 获取用户id和用户名$user = $baidu->getLoggedInUser();// 百度第三方登录url地址和退出url地址if ($user) {$logoutUrl = $baidu->getLogoutUrl('http://robin928.sinaapp.com/demos/website/logout_callback.php?u=' . urlencode(BaiduUtils::getCurrentUrl())); header("Location:".$logoutUrl); } else {$loginUrl = $baidu->getLoginUrl('', 'popup');header("Location:".$loginUrl);}}
2、回调程序callback.php
// 百度第三方回调函数 function baidu(){require_once('u/baidu/baiduapi.inc.php');if ($user) {$apiClient = $baidu->getBaiduApiClientService();$profile = $apiClient->api('/rest/2.0/passport/users/getInfo', array('fields' => 'userid,username,sex,birthday'));var_dump($profile); // 第三方登陆数据处理开始 $userid =$profile['userid'];$sql = "select * from `ub01` where ub01004 = '$userid'";$chek = _selectone($sql) ? _selectone($sql) : array();if(!empty($chek)){$_SESSION['uid']=$res['ua01001'];echo '授权成功';// header("Location:?"); }else{echo '授权失败';}}else{echo "授权失败";}exit; }
3、PHP-SDK-1.0.rar 包解压的核心文件,注意路径问题。