【问题标题】:Abraham Williams Twitter oAuth PHP Callback Issue亚伯拉罕·威廉姆斯 Twitter oAuth PHP 回调问题
【发布时间】:2011-09-26 16:20:06
【问题描述】:

我正在使用 Abraham William 的 TwitterOAuth 包构建应用程序。该应用程序运行良好,但我遇到了一个问题。

大约 25% 的尝试安装该应用的用户无法安装。他们在 Twitter 页面上验证应用程序并单击“登录”(在 Twitter 的网站上)。当它们被返回到 Callback.php 页面时,它会给它们一个空白页面。我无法弄清楚出了什么问题,因为它适用于大多数用户。有什么想法吗?

这里是callback.php代码:

<?php

require_once("config_db.php");

session_start();
// Include class & create
require_once("consumer-keys.php");
require_once("twitteroauth/twitteroauth/twitteroauth.php");
// User has selected to DENY access
if(!empty($_GET["denied"])) {
  // could re-direct or display cancelled view/template
  // we're just echoing out a message
  echo "No deal! <a href='login.php'>Try again?</a>";
  die();
}

// User has selected to ALLOW access for given token
if($_GET["oauth_token"] == $_SESSION["oauth_token"]) {
  // Use generated request tokens (from session) to construct object
  $tOAuth = new TwitterOAuth($consumerKey, $consumerSecret, $_SESSION["oauth_token"], $_SESSION["oauth_token_secret"]);
  // Retrieve access token from Twitter
  $accessToken = $tOAuth->getAccessToken();

    //echo "RECEIVED TOKENS<br>";
  // Check we have valid response
  if(is_numeric($accessToken["user_id"]))  {
    // Save the access tokens to a DB (we're using a session)
    $_SESSION["access_token"] = $accessToken;

    //GET CREDENTIALS VIA API
    $credentials = $tOAuth->get('account/verify_credentials');

    //echo "HAS NUMERIC ID<br>";

    //ISAAC ADD DB INFO
    $query = "SELECT * FROM `t4i_app`.`users_twitter` WHERE user_id = '".$_SESSION["access_token"]["user_id"]."'";
    $rs = mysql_query($query);
    if(mysql_num_rows($rs)) {

        //update query
        //echo "user already exists..need to update";
        $query = "UPDATE  `t4i_app`.`users_twitter` SET  `token` =  '".$_SESSION["access_token"]["oauth_token"]."', `secret` =  '".$_SESSION["access_token"]["oauth_token_secret"]."', `screen_name` =  '".$credentials->screen_name."', `followers` = '".$credentials->followers_count."'  WHERE  `users_twitter`.`user_id` = '".$_SESSION["access_token"]["user_id"]."';";
        mysql_query($query);
    } else {

        $query = "INSERT INTO  `t4i_app`.`users_twitter` (`id` ,`screen_name` ,`token` ,`secret`, `user_id`, `followers`, `referer` ,`last_update` ,`date_registered`) VALUES (NULL, '".$credentials->screen_name."', '".$_SESSION["access_token"]["oauth_token"]."', '".$_SESSION["access_token"]["oauth_token_secret"]."', '".$_SESSION["access_token"]["user_id"]."', '".$credentials->followers_count."', '0', CURRENT_TIMESTAMP , CURRENT_TIMESTAMP);";
        mysql_query($query);

    }
    //echo $query;
    //echo mysql_error();
    //print_r($_SESSION["access_token"]);
    $message = array('status' => 'Test OAuth update. #testoauth');
    $test = $tOAuth->post('statuses/update', array('status' => 'I just added the new APPNAME Twitter Application http://bit.ly/sampleurl'));
    //echo "POSTED STATUS<br>";


    //END ISAAC




    // Remove request token session variables
    unset($_SESSION["oauth_token"]);
    unset($_SESSION["oauth_token_secret"]);
    // Redirect to main page
    header("location: http://www.mydomain.com/welcome.php");
  } else {
    //echo "TRYING TO REDIRECT <br>";

    header("location: http://www.mydomain.com");
  }
}
?>

【问题讨论】:

  • 为您的 php 应用启用 error logging。空白页是某处发生致命错误的标志。因此,如果您启用了错误日志记录,您会发现这些错误已记录在案。这将帮助您了解偶尔发生的情况。如果您还记录警告和通知,您甚至可能会发现更多错误,这些错误可以帮助您使脚本正常工作。
  • 感谢您的提示。我确实启用了错误日志记录,并且我一直在监视日志,但没有相关错误。还有其他想法吗?

标签: php twitter twitter-oauth


【解决方案1】:
if ($_GET["oauth_token"] == $_SESSION["oauth_token"])
  • 为此,您需要在 else 中添加一个 error_log,如果 get 和 session 中的 oauth_tokens 不匹配,您将失败且没有任何消息。可能是 Twitter 没有正确响应。

  • 另外,我会将标头调用中的 Location 大写。我不是 100% 每个浏览器都会在它不是位置时尊重它:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2013-08-09
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多