2012-02-16 22 views
3

私は現在、OAuthで作業しているPHP WebアプリケーションにTwitterを統合しようとしています。Twitterで認証するOAuth API

私は、正常に動作しているように見え、認証画面を表示しているTwitterアプリ認証URLへのリンクを提供するHTMLページを持っています。

以下は、この関数を呼び出すコードです。

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

consumer_keyとconsumer_secretは、phpファイルに含まれています。

以下は、Twitterの承認URLを取得するコードです。

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からの返信を表示するためのものです。

Iが配列

アレイ( [エラー] =>無効/有効期限が切れたトークン [要求] => /account/verify_credentials.json)

にプリントアウトし、次のエラーを取得してい

このエラーを修正する方法を教えてください。私はその無効または期限が切れた理由を知らない、私はブラウザを閉じて、再び開始したが、同じエラーが表示されます。

ご協力いただきありがとうございます。

+1

ダブルあなたの '$のcomsumer_key'と私は彼らをチェックした' $ consumer_secret' – Erik

+0

をチェックOKであると思われます – Boardy

+0

なぜ '//include("phpHandler/twitterLib/secret.php"); 'がコメントアウトされましたか?あなたは '$ consumer_key'と' $ consumer_secret'をどこから得るのでしょうか? – Erik

答えて

0

私は問題を見つけることができました。私は常にauthenticate関数で2つの新しい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を作成しました。私がやったコードではうまくいきます。永久oauthTokenを取得し、さらに使用するためにデータベースに保存する

<?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コードに:

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

    ?> 
関連する問題