2011-02-02 39 views
0

我希望有人能够回答。我一直在为此工作很多小时,并找不到解决方案。我还一遍又一遍地研究了HTTP_OAUTH documentation以及一些教程。我坚持使用它,因为我的主机不支持正常的OAuth。除此之外,它并没有那么糟糕。这是我迄今为止所拥有的。我能:使用OAuth请求访问令牌有困难吗?错误:没有令牌或token_secret

  1. 获取访问令牌(URL_PATH_GOES_HERE 组oauth_token = XXXXXXXXXXXXX?)
  2. 将用户重定向到让他们有一个访问令牌和oauth_verifier许可
  3. 重定向回我的回调URL (URL_PATH_GOES_HERE?的oauth_token = XXXXXXXXXXXXX?oauth_verifier = XXXXXXXXXX

当我到达那里,不过,我有困难请求访问令牌所以我可以从那里代表用户提出请求。

我不断收到错误:

No token or 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"; 
    } 

?> 
+0

我冒昧地编辑了你的标题,因为这个建议对于这个问题并不是非常具有描述性,而且过于笼统,随意以任何你喜欢的方式来改进我的版本,但我会建议尽可能具体的标题。 – Trufa 2011-02-02 20:30:48

+0

@Trufa:非常感谢!实际上看起来好多了! – 2011-02-02 20:38:35

+0

没问题,但你的问题不知道,但祝你好运! – Trufa 2011-02-02 20:45:31

回答

0

在您的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(); 
0

我只是改变了callback.php文件1位匹配例子,现在它似乎工作。请让我知道它是否适用于您,但对我而言,我正在回复正确的回应。

<?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回购样品后,它的工作。我希望能够链接到其他用户未来参考的示例。如果不是那样的话。