2012-02-16 143 views
3

我目前正在嘗試將twitter整合到一個我正在使用OAuth開發的php web應用程序中。使用Twitter OAuth API進行身份驗證

我有一個HTML頁面,它提供了一個鏈接到Twitter應用驗證網址,它似乎工作正常,並顯示身份驗證屏幕。

下面是調用函數的代碼。

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的響應返回值。

我正在陣列

陣列( [錯誤] =>無效/過期令牌 [請求] => /account/verify_credentials.json)

在打印出以下錯誤

我該如何解決這個錯誤。我不知道爲什麼它的無效或過期,我已關閉瀏覽器,並重新開始,但得到相同的錯誤出現。

感謝您提供的任何幫助。

+1

仔細檢查'$ comsumer_key'和'$ consumer_secret' – Erik 2012-02-16 21:47:19

+0

我檢查了他們似乎是好的 – Boardy 2012-02-16 22:02:25

+0

爲什麼'//include("phpHandler/twitterLib/secret.php「);'註釋掉了?是不是你從哪裏得到'$ consumer_key'和'$ consumer_secret'? – Erik 2012-02-16 23:35:34

回答

0

我設法找到了問題。我總是在驗證功能中創建兩個新的EpiTwitter對象。

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']); 

} 
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. 
    } 

    ?> 
相關問題