使用Twitter OAuth API进行身份验证

时间:2012-02-16 21:43:51

标签: php twitter oauth

我目前正在尝试将twitter整合到我正在使用OAuth的php网络应用程序中。

我有一个HTML页面,它提供了一个指向twitter app身份验证网址的链接,该网址似乎正常运行,并显示了身份验证屏幕。

以下是调用该函数的代码。

if (!isset($_GET['oauth_token']))
{
    //include("phpHandler/twitterLib/secret.php");
    getTwitterURL($consumer_key, $consumer_secret);
}

consumer_key和consumer_secret包含在php文件中。

以下是获取Twitter授权网址的代码。

function getTwitterUrl($consumer_key, $consumer_secret)
{
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $url = $twitterObj->getAuthorizationUrl();
    echo '<a class="linkButtons" href="'.$url.'">Add Twitter</a>';
}

这个重定向回到页面很好,然后我调用身份验证方法来检索像twitter用户名的信息。以下是执行身份验证的功能

function authenticate($consumer_key, $consumer_secret)
{
    require ("twitterLib/EpiCurl.php");
    require ("twitterLib/EpiOAuth.php");
    require ("twitterLib/EpiTwitter.php");
    require ("twitterLib/secret.php");*/
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $twitterObj->setToken($_GET['oauth_token']);
    $token = $twitterObj->getAccessToken();
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
    $twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
    $token = $twitterObj->getAccessToken();
    $twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
    $_SESSION['ot'] = $token->oauth_token;
    $_SESSION['ots'] = $token->oauth_token_secret;
    $twitterInfo= $twitterObj->get_accountVerify_credentials();
    echo '<pre>';
    print_r($twitterInfo->response);
  }

echo和print_r用于显示来自twitter的响应返回。

我在数组中打印出以下错误

  

阵列(       [错误] =&gt;无效/过期令牌       [请求] =&gt; /account/verify_credentials.json)

如何修复此错误。我不知道为什么它无效或已过期,我已关闭浏览器并重新启动但出现同样的错误。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

如果用户明确拒绝您的设置或Twitter管理员暂停您的应用程序,您的访问令牌将无效。如果您的申请被暂停,您的申请页面上会有一条说明已被暂停的说明。

许多用户信任应用程序来阅读他们的信息,但不一定要更改他们的名字或发布新状态。通过Twitter API更新信息 - 无论是名称,位置还是添加新状态 - 都需要和HTTP POST。在实施时我们坚持使用相同的限制。任何需要HTTP POST的API方法都被认为是一种写入方法,需要阅读和阅读。写访问。

无论您的存储系统是什么,您都需要为应用程序的每个用户开始存储oauth_token和oauth_token_secret(统称为“访问令牌”)。应该安全地存储oauth_token_secret。请记住,您将为应用程序对Twitter API发出的每个经过身份验证的请求访问这些值,因此请以适合您的用户群的方式存储它们。当您使用OAuth时,您不应再为任何用户存储密码。

require '../tmhOAuth.php';

require '../tmhUtilities.php';

$tmhOAuth = new tmhOAuth(array(

  'consumer_key'    => 'YOUR_CONSUMER_KEY',

  'consumer_secret' => 'YOUR_CONSUMER_SECRET',

  'user_token'      => 'AN_ACCESS_TOKEN',

  'user_secret'     => 'AN_ACCESS_TOKEN_SECRET',

));



// we're using a hardcoded image path here. You can easily replace this with an uploaded image-see images.php example)

// 'image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}",



$image = "./dickvandyke.jpg';



$code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json',

  array(

    'media[]'  => "@{$image}",

    'status'   => "Don't slip up" // Don't give up..

  ),

  true, // use auth

  true  // multipart

);



if ($code == 200) {

  tmhUtilities::pr(json_decode($tmhOAuth->response['response']));

} else {

  tmhUtilities::pr($tmhOAuth->response['response']);

}

答案 1 :(得分:0)

我设法找到了问题。我总是在authenticate函数中创建两个新的EpiTwitter对象。

答案 2 :(得分:0)

我参与了新的Twitter API。使用以下代码,它对我来说很好。

<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$consumer_key = "XXXXXXX";
$consumer_secret = "XXXXXXX";

$connection = new TwitterOAuth($consumer_key, $consumer_secret);

 $request_token= $connection->oauth('oauth/request_token', array('oauth_callback' => "http://callbackurlhere.com/callback.php"));
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));

header('Location: '. $url);
?>

下面的callback.php代码获取永久oauthToken并将其保存在数据库中以供进一步使用:

<?php
require "vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

    // session_start();
    if(isset($_REQUEST['oauth_verifier'])){

    $oauth_access_token = $_REQUEST['oauth_token'];
    $oauth_access_token_secret = $_REQUEST['oauth_verifier'];
    $consumer_key = "XXXXXXXXXXXXXXXX";
    $consumer_secret = "XXXXXXXXXXXXXXX";
    $connection = new TwitterOAuth($consumer_key, $consumer_secret,$oauth_access_token , $oauth_access_token_secret );

    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $oauth_access_token_secret));
    var_dump($access_token); die("--success here--");// Obtain tokens and save it in database for further use.
    }

    ?>