摘要:關(guān)于接入微博登錄的代碼實(shí)現(xiàn)今天嘗試使用了微博登錄的接口,也是即將使用接入微信登錄,登錄,手機(jī)號(hào)登錄用戶名登錄等支持多種操作的問題微博的接口特別簡(jiǎn)單明了,文檔也挺清晰的。
關(guān)于接入微博登錄的代碼實(shí)現(xiàn)
今天嘗試使用了微博登錄的接口,也是即將使用接入微信登錄,QQ登錄,手機(jī)號(hào)登錄、用戶名登錄等支持多種操作的問題
微博的接口特別簡(jiǎn)單明了,文檔也挺清晰的。
采用了OAuth2.0 的方式
請(qǐng)求授權(quán) - 獲取code - 使用token獲取access_token+uid - 使用access_token+uid 獲取用戶的信息
操作流程如下:
1) 申請(qǐng)網(wǎng)站接入
http://open.weibo.com/connect - 立即創(chuàng)建 - 應(yīng)用地址填寫你的本地測(cè)試的地址即可,其他都是正常操作
2) 使用文檔操作
http://open.weibo.com/wiki/%E... - 文檔中心
http://open.weibo.com/wiki/Co... - 微博登錄詳情
http://open.weibo.com/wiki/2/... - 獲取用戶信息接口
3) 代碼實(shí)現(xiàn)
我這里沒有使用自帶的微博 phpsdk
使用了https://github.com/guzzle/guzzle 來模擬請(qǐng)求
為了可擴(kuò)展性接入其他支付,我公用了一個(gè)配置文件
return [ "log" => [ "file" =>storage_path("logs/login/".date("Y-m-d") . ".php") ], "weibo" => [ // 微博登錄相關(guān)key "w_key" => ENV("W_KEY",""), "w_secret" => ENV("W_SECRET",""), "w_get_code_url" => "https://api.weibo.com/oauth2/authorize?client_id=%d&response_type=code&redirect_uri=%s", "w_get_access_token_url" => "https://api.weibo.com/oauth2/access_token?client_id=%d&client_secret=%s&grant_type=authorization_code&redirect_uri=%s&code=%s", "w_user_url" => "https://api.weibo.com/2/users/show.json" ] ];
相關(guān)配置url 采用sprintf的方式進(jìn)行拼接
核心代碼如下:
控制器代碼 -
namespace AppHttpControllersAuth; use AppHttpTraitsLoginWeiboHandler; use IlluminateHttpRequest; class LoginWeiboController extends BaseController { use LoginWeiboHandler; /** * 微博登錄 * 調(diào)起微博登錄 - 獲取code - 攜帶code請(qǐng)求accessToken - 攜帶token獲取用戶信息 */ public function login(Request $request) { $code = $request->code; if (!$code) { return $this->getCode(); } $result = $this->setGetWbAccessToken($code); $access_token = $result["access_token"]; $uid = $result["uid"]; return $this->user($access_token,$uid); // 獲取用戶信息 } public function user($access_token,$uid) { $userInfo = $this->getUserInfo($access_token,$uid); // 執(zhí)行登錄操作 $this->store($uid,"weibo",$userInfo); } }
實(shí)現(xiàn)類代碼 -
namespace AppHttpTraits; use GuzzleHttpClient; use GuzzleHttpExceptionClientException; use AppExceptionsLoginException; /** * 處理微博登錄邏輯 * Class LoginWeiboHandler * @package AppHttpTraits */ trait LoginWeiboHandler { private $key; private $secret; private $getCodeUrl; private $getAccessTokenUrl; private $host; private $client; public function __construct() { $this->client = new Client(); $this->key = config("login.weibo.w_key"); $this->secret = config("login.weibo.w_secret"); $this->getCodeUrl = config("login.weibo.w_get_code_url"); $this->getAccessTokenUrl = config("login.weibo.w_get_access_token_url"); $this->host = route("login.weibo"); } /** * 設(shè)置 獲取 code的url * @return string */ public function setWbCodeUrl() { $url = sprintf($this->getCodeUrl,$this->key,$this->host); return $url; } /** * @param $code string 授權(quán)后取得的code值 */ public function setGetWbAccessToken($code) { if( !$code ) { throw new LoginException([ "message" => "CODE不存在" ]); } $url = sprintf($this->getAccessTokenUrl,$this->key,$this->secret,$this->host,$code); try{ $res = $this->client->request("POST",$url)->getBody(); }catch (ClientException $e){ // 處理錯(cuò)誤 throw new LoginException([ "message" => "CODE已經(jīng)失效" ]); } return json_decode($res,true); } /** * 獲取code * @return IlluminateHttpRedirectResponse */ public function getCode() { $getCodeUrl = $this->setWbCodeUrl(); return redirect()->away($getCodeUrl); } /** * 獲取用戶信息接口 * @param $access_token * @param $uid * @return mixed * @throws LoginException * @throws GuzzleHttpExceptionGuzzleException */ public function getUserInfo($access_token,$uid) { $arr = [ "access_token" => $access_token, "uid" => $uid ]; $url = config("login.weibo.w_user_url") . "?" .http_build_query($arr); $res = $this->client->request("GET",$url); try{ $res = $this->client->request("GET",$url)->getBody(); }catch (ClientException $e){ // 處理錯(cuò)誤 throw new LoginException([ "message" => "請(qǐng)求微博客戶端出現(xiàn)問題,請(qǐng)選擇更換登錄方式" ]); } return json_decode($res,true); } }
4) 代碼分析
控制器代碼中,方法 getCode 用來調(diào)去微博登錄,他會(huì)進(jìn)入到請(qǐng)求授權(quán)的界面,當(dāng)你授權(quán)第一次后或者保持登錄后,會(huì)直接忽略授權(quán)頁面,直接返回code。
代碼中有個(gè)邏輯,一個(gè)是喚起登錄;一個(gè)是處理code,再次調(diào)用獲取access_token + uid
當(dāng)code不存在時(shí),表明當(dāng)前需要請(qǐng)求授權(quán),使用getCode方法,這個(gè)方法采用的是GET請(qǐng)求,會(huì)自動(dòng)返回一個(gè)string信息,通過你傳遞的 redirect_uri 來決定返回到哪個(gè)頁面(redirect_uri再我的應(yīng)用-應(yīng)用信息-高級(jí)信息中可以看到) ,
所以需要使用重定向的方式來獲取數(shù)據(jù)
code存在時(shí),使用 setGetWbAccessToken 方法獲取 access_token + uid的值,setGetWbAccessToken 方法采用post請(qǐng)求,返回的是一個(gè)json參數(shù),需要自己轉(zhuǎn)義,不會(huì)自動(dòng)重定向,直接返回?cái)?shù)據(jù)
access_token 、code 是動(dòng)態(tài)的 uid是唯一的
獲取 access_token 請(qǐng)求用戶信息接口,getUserInfo,使用GET方法傳遞兩個(gè)值即可,如果請(qǐng)求報(bào)錯(cuò),容易出現(xiàn)錯(cuò)誤,期待使用錯(cuò)誤捕獲
關(guān)于用戶表的設(shè)計(jì),以及多字段登錄的方式和方法我會(huì)再明天發(fā)出來
轉(zhuǎn)載請(qǐng)聯(lián)系本人,唯一原創(chuàng)
來自于: http://surest.cn/article/46
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29592.html
摘要:本人長(zhǎng)期出售超大量微博數(shù)據(jù)旅游網(wǎng)站評(píng)論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務(wù),。如果用戶傳入偽造的,則新浪微博會(huì)返回一個(gè)錯(cuò)誤。 PS:(本人長(zhǎng)期出售超大量微博數(shù)據(jù)、旅游網(wǎng)站評(píng)論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務(wù),Message to [email protected]。由于微博接口更新后限制增大,這個(gè)代碼已經(jīng)不能用來爬數(shù)據(jù)了。如果只是為了收集數(shù)據(jù)可以咨詢我的郵箱,如果是為了學(xué)習(xí)爬蟲,...
摘要:本人長(zhǎng)期出售超大量微博數(shù)據(jù)旅游網(wǎng)站評(píng)論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務(wù),。如果用戶傳入偽造的,則新浪微博會(huì)返回一個(gè)錯(cuò)誤。 PS:(本人長(zhǎng)期出售超大量微博數(shù)據(jù)、旅游網(wǎng)站評(píng)論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務(wù),Message to [email protected]。由于微博接口更新后限制增大,這個(gè)代碼已經(jīng)不能用來爬數(shù)據(jù)了。如果只是為了收集數(shù)據(jù)可以咨詢我的郵箱,如果是為了學(xué)習(xí)爬蟲,...
摘要:微博登錄是最常用的第三方賬號(hào)登錄之一。當(dāng)前狀態(tài)是未提交審核,待你開發(fā)完了上線后,提交微博審核,審核通過后即可正常使用。集成微博登錄首先簡(jiǎn)介一下,第三方登錄開發(fā)的流程。文件是首頁,其實(shí)他的唯一作用就是產(chǎn)生一個(gè)微博登錄跳轉(zhuǎn)鏈接。 微博登錄是最常用的第三方賬號(hào)登錄之一。由于其網(wǎng)站用戶量大,可操作接口功能多,所以受到很多開發(fā)者的青睞。 既然是第三方,如果想使用它們的賬號(hào)進(jìn)行登錄,那么第一步就應(yīng)...
閱讀 1177·2021-11-11 16:55
閱讀 3062·2021-08-16 11:00
閱讀 2910·2019-08-30 15:56
閱讀 3447·2019-08-30 11:24
閱讀 3427·2019-08-30 11:05
閱讀 3544·2019-08-29 15:15
閱讀 2627·2019-08-26 13:57
閱讀 2588·2019-08-23 18:17