Сложность запроса токена доступа с OAuth? Ошибка: нет токена или token_secret - PullRequest
0 голосов
/ 02 февраля 2011

Я надеюсь, что кто-то сможет ответить.Я работал над этим много часов и не могу найти решение.Я также изучал HTTP_OAUTH документацию снова и снова, а также некоторые учебные пособия.Я застрял, используя это, потому что мой хост не поддерживает нормальный OAuth.Это в стороне, это не так плохо.Это то, что я до сих пор.Я могу:

  1. Получить токен доступа (URL_PATH_GOES_HERE? oauth_token = XXXXXXXXXXXXX )
  2. Перенаправить пользователя, чтобы получить его разрешение
  3. Перенаправить обратно на мой URL-адрес обратного вызова с токеном доступа и oauth_verifier (URL_PATH_GOES_HERE? oauth_token = XXXXXXXXXXXXX? Oauth_verifier = XXXXXXXXXX )

Однако, когда я получаюсложность запроса токена доступа, чтобы я мог оттуда делать запросы от имени пользователя.

Я получаю сообщение об ошибке:

Нет токена или token_secret

Есть идеи?Буду вечно благодарен !!

##############################
## FILNENAME: msconfig.php ###
##############################

<?php
    define('OAUTH_CONSUMER_KEY',CONSUMER KEY GOES HERE);
    define('OAUTH_CONSUMER_SECRET',CONSUMER SECRET GOES HERE);
    define('OAUTH_REQUEST_TOKEN_API', 'http://gomiso.com/oauth/request_token');
    define('OAUTH_AUTHORIZE_API', 'http://gomiso.com/oauth/authorize'); 
    define('OAUTH_ACCESS_TOKEN_API', 'http://gomiso.com/oauth/access_token');
    define('CALLBACK_URL', 'URL_PATH_GOES_HERE/callback.php');
    define('MISO_USER_AGENT', 'youruseragent');
?>

###############################
### FILNENAME: index.php ######
###############################

<?php

    //##########################################################################
    // START A SESSION SO WE CAN SHARE VARIABLES WITH OUR CALLBACK HANDLER #####
    //##########################################################################
    session_start();

    //############################
    // IMPORT CONFIGURATION FLE ##
    //############################
    require_once("misoconfig.php");

    //##########################    
    //#IMPORT EXTERNAL CLASSES #
    //##########################
    require_once("HTTP/OAuth/Consumer.php");

    //########################
    //# FETCH REQUEST TOKEN ##
    //########################
    try { 
        $consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);
        $consumer->getRequestToken(OAUTH_REQUEST_TOKEN_API,CALLBACK_URL);
        $_SESSION['request_token'] = $consumer->getToken();
    }catch (Exception $e) {     
        echo 'Fetching Request Token Exception: ',  $e->getMessage(), "\n"; 
    } 

    //#############################################     
    // REDIRECT THE USER TO THE AUTHORIZATION URL #
    //#############################################
    try { 
        $url = $consumer->getAuthorizeUrl(OAUTH_AUTHORIZE_API);
        header("Location: $url");
    }catch (Exception $e) {     
        echo 'Authorization URL Redirection Exception: ',  $e->getMessage(), "\n"; 
    } 

?>

##############################
## FILNENAME: callback.php ###
##############################

<?php

    // START A SESSION SO WE CAN ACCESS VARIABLES SHARED WITH US BY INDEX.PHP 
    session_start();

    // IMPORT CONFIGURATION FLE 
    require_once("misoconfig.php");

    // IMPORT EXTERNAL CLASSES
    require_once("HTTP/OAuth/Consumer.php");

     // Store these tokens (at least for now)
        $_SESSION['oauth_verifier']   = $_GET['oauth_verifier'];

    // BY REACHING THIS FAR, WE'VE BEEN AUTHENTICATED. LET'S GRAB THE ACCESS TOKEN AND SECRET AND SAVE THEM <SOMEWHRE>. 
    try { 
        $consumer = new HTTP_OAuth_Consumer($_SESSION['request_token'], $_SESSION['oauth_verifier']);
        $consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API,$_SESSION['oauth_verifier'],array(),'GET');
    }catch (Exception $e) { 
        echo 'Access Token Exception: ',  $e->getMessage(), "\n"; 
    } 

?>

Ответы [ 2 ]

0 голосов
/ 03 февраля 2011

Я просто немного изменил файл callback.php в соответствии с примером, и теперь он, похоже, работает.Дайте мне знать, если это работает для вас, но для меня я получаю правильный ответ.

<?php

// START A SESSION SO WE CAN ACCESS VARIABLES SHARED WITH US BY INDEX.PHP
session_start();

// IMPORT CONFIGURATION FLE
require_once("misoconfig.php");

// IMPORT EXTERNAL CLASSES
require_once("HTTP/OAuth/Consumer.php");

 // Store these tokens (at least for now)
    $_SESSION['oauth_verifier']   = $_GET['oauth_verifier'];

try {
    // !!!CHANGED ARGUMENTS TO MATCH EXAMPLE
    $consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $_SESSION['request_token'], $_SESSION['oauth_verifier']);
    $consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API, $_SESSION['oauth_verifier'],array(),'POST');
}catch (Exception $e) {
    echo 'Access Token Exception: ',  $e->getMessage(), "\n";
}

?>

Кстати, я знаю, что это много работы, но вы можете создать репозиторий Github для образцапосле того, как это работает.Я хотел бы иметь возможность ссылки на пример для дальнейшего использования другим пользователем.Если нет, это нормально.

0 голосов
/ 03 февраля 2011

В вашем файле index.php:

$_SESSION['request_token']        = $consumer->getToken();
$_SESSION['request_token_secret'] = $consumer->getTokenSecret();

В файле callback.php:

$consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $_SESSION['request_token'], $_SESSION['request_token_secret']);
$consumer->getAccessToken(OAUTH_ACCESS_TOKEN_API,$_SESSION['oauth_verifier'],array(),'GET');
# and save the new tokens after
$_SESSION['request_token']        = $consumer->getToken();
$_SESSION['request_token_secret'] = $consumer->getTokenSecret();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...