首先第三方應用要跟微信賬號合做,而後按照下面的方法操做:php
目前,百度OAuth2.0支持五種獲取Access Token的流程和一種刷新獲取AccessToken方式,第三方可根據需求選取合適的方式:web
百度受權的Access Token是有有效期的,這樣會影響用戶的體驗和增長開發者的工做。因此平臺提供了一種方式能夠保證受權有效期爲永久。sql
第一步:註冊百度直達號應用。api
能夠經過百度的開放平臺去註冊一個應用。以後你會獲得一個App Key和一個App Secret。擁有它們,你才能夠申請權限。微信
假設你的App Key是「1234567890」,App Secret是「abcdefghijklmnopqrstuvwxyz"app
第二步:寫代碼。dom
將獲取到的OAuth的php版本的SDK加入你的project中。將你申請到的Key和Secret作爲兩個變量定義並賦值。函數
對於OAuth來講,不少細節不須要咱們去關注的,只要知道幾個重要的步驟便可:網站
1. 第三方發起百度受權登陸請求,百度用戶容許受權第三方應用後,百度會拉起應用或重定向到第三方網站,而且帶上受權臨時票據code參數;ui
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等等,這裏的暱稱是指用戶顯示在百度上的名字,而不是用戶的登陸名)。
實例代碼:
一、調用受權頁面: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); } }
二、回調程序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; }
三、PHP-SDK-1.0.rar 包解壓的核心文件,注意路徑問題。