PHP使用Yii2实现Twitter(Api)授权登录并获取信息Demo

  •   
  • 7923
  • PHP
  • 35
  • super_dodo
  • 2016/11/08

在已经安装好相关的扩展的情况下(若未安装Yii2的扩展请移步参考底部的安转的相关文章),注册开发者账号,配置开发者相关的信息。初步的配置信息如下所示。

twitter_set

twitter_key

之后直接上代码:TwitterController.php

<?php
/**
 * User: Dodobook
 * Date: 2016/11/1 08:08:08
 */

namespace app\controllers;

use Yii;
use yii\httpclient\Client;
use yii\web\Controller;
use yii\authclient\OAuthToken;
use yii\authclient\clients\Twitter;

//使用Yii的扩展yii\authclient
//1:生成授权的地址
//2:回调地址得到相关的用户token等信息
//https://api.twitter.com/oauth/authenticate?oauth_token=f9__j******************zA
//https://apps.twitter.com/app/*****************/settings
//https://dev.twitter.com/web/overview
//https://dev.twitter.com/rest/tools/console
//https://dev.twitter.com/web/sign-in/implementing
//http://www.yiiframework.com/doc-2.0/yii-authclient-clients-twitter.html


class TwitterController extends Controller{

    CONST consumerKey = 't*******************O';                                    //Consumer Key
    CONST consumerSecret = 'h*******************************************q';         //Consumer Secret
    

	//授权地址
	public function actionAuthUrl(){

		$client = new Twitter(&#91;
			'consumerKey' => self::consumerKey,
			'consumerSecret' => self::consumerSecret
		]);

        $param = ['oauth_callback'=>'http://sns.*********.com/twitter/call-back'];		//配置回调地址--尽量和后台设置的保持相近
        $requestToken = $client->fetchRequestToken($param);             //得到相应的oauth_token
        $requestToken->setToken($requestToken->token);                  //保存下来--回调的地方要验证--设置之后--回调的token也是这个
        $url = $client->buildAuthUrl($requestToken);                    //组装成新的URL地址
        $url .= '&force_login=true';                                    //强制用户登录--用户授权过也会需要用户登录一下
        return Yii::$app->getResponse()->redirect($url);                //跳转到授权的页面
	}


	//回调地址---授权成功之后
	public function actionCallBack(){
		$oauth_token = Yii::$app->request->get('oauth_token');              //得到oauth_token
		$oauth_verifier = Yii::$app->request->get('oauth_verifier');        //得到oauth_verifier

		$client = new Twitter([
            'consumerKey' => self::consumerKey,
            'consumerSecret' => self::consumerSecret
		]);

		//得到requestToken
		$requestToken = $client->fetchRequestToken();
		$requestToken->setToken($oauth_token);                  //设置一下requsetToken

		//通过参数去得到用户的oauth_token以及oauth_token_secret
		$accessToken = $client->fetchAccessToken($oauth_token,$requestToken,$oauth_verifier);

     //   var_dump($accessToken);			//打印一下,方便调试

		$user_token = $accessToken->getToken();                    //得到access_token的值
		$user_token_secret = $accessToken->getTokenSecret();       //得到access_token_secret的值
		$user_id = $accessToken->getParam('user_id');               //用户ID
        $user_screen_name = $accessToken->getParam('screen_name');  //用户账号
        $x_auth_expires = $accessToken->getParam('x_auth_expires');  //过期时间 0

        echo $user_id.'<hr>';
		echo $user_token.'<hr>';
		echo $user_token_secret.'<hr>';
		echo $user_screen_name.'<hr>';
		//建立一张表--存储该内容---你自己决定

        Yii::$app->end();
	}



	//得到单个用户的时间线
	public function actionHomeLine(){
		$access_token = '7******************************************5';			//某个用户的access_token
		$access_token_secret = 'N****************************************s';	//某个用户的access_token_secret
		
		// create your OAuthToken
		$token = new OAuthToken([
			'token' => $access_token,
			'tokenSecret' => $access_token_secret
		]);

		$client = new Twitter([
			'accessToken' => $token,
            'consumerKey' => self::consumerKey,
            'consumerSecret' => self::consumerSecret
		]);

		$timeLine =  $client->api('statuses/home_timeline.json', 'GET');		//得到该用户的feed流也就是动态
		var_dump($timeLine);
	}


	//得到授权了该应用的所有用户的Feed流动态等
    public function actionHomeLineAll(){
        $client = new Twitter([
            'consumerKey' => self::consumerKey,
            'consumerSecret' => self::consumerSecret
        ]);
        $timeLine =  $client->api('statuses/home_timeline.json', 'GET');
        var_dump($timeLine);
    }
	
}

至此,你已经大功告成,Twitter还提供了更多的接口,也对一些接口有一定的限制,这就需要你更详细的去研究和使用了。

吐槽一下:dodo在调试的时候遇到的几个大坑,调试这个花了好多周折,弄得周末都加班诚惶诚恐。

第一:是Twitter的文档是英文的,阅读文档请细致仔细。

第二:twitter的接口说明是http请求还包含了头部以及一些签名的信息,加密方式HMAC-SHA1需要自己模拟去实现。

第三:需要curl的相关参数header头等信息设置Authorization等的组合。

第四:回调地址部分域名在Twitter后台设置不成功,提示非法网址。之后我就留空了回调地址。之后走了一个另外的流程生成了一个数字码,call_back只接受参数oob(奇葩了大半天),后来果断放弃。

第五:强烈建议使用Yii2的框架,坚定思路,而不是一下子考虑原生写法,一下子去找其他demo,一下子又组合,劳民伤财。

第六:记得翻墙~~浏览器翻墙和整个电脑翻墙是不一样的。如果你在本地localhost的话。需要整个电脑翻墙。

Yii2安装加载AuthClient来实现第三方的授权登录

PHP使用Yii2实现Twitter授权登录并获取信息Demo

PHP使用Yii2实现Facebook授权登录并获取信息Demo

PHP使用Yii2实现LinkedIn授权登录并获取信息Demo