PHP,Codebird 和 Twitter 为什么收到错误 401 无效请求令牌
PHP, Codebird and Twitter why am receiving error 401 Invalid Request Token
我正在尝试使用 codebird 从 Twitter 获取访问令牌,首先让用户授权使用我的应用程序,使用此代码可以完美地工作
require_once('lib/codebird.php');
\Codebird\Codebird::setConsumerKey("xxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
session_start();
// get the request token
$reply = $cb->oauth_requestToken(array(
'oauth_callback' => 'http://lifetanstic.co.ke/AppRegister'));
// store the token
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
$_SESSION['oauth_token'] = $reply->oauth_token;
$_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;
$_SESSION['oauth_verify'] = true;
// redirect to auth website
$auth_url = $cb->oauth_authorize();
?>
<script type="text/javascript">
window.location = "<?php echo $auth_url; ?>";
</script>
<?php
//header('Location: ' . $auth_url);
?>
这是我被重定向到这里的地方:
然后我被重定向到 window,我应该在那里获取访问令牌和访问令牌机密,这也有效。
这是使用 $_GET[] 我得到以下代码的地方 http://lifetanstic.co.ke/AppRegister?oauth_token=zzzzz&oauth_verifier=zzzz
现在在该页面中,当我 运行 以下代码时,它不起作用,但会产生以下错误:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
var_dump($reply);
当我转储回复时,它有以下错误:
object(stdClass)#1 (3) { ["message"]=> string(21) "Invalid request token" ["httpstatus"]=> int(401) ["rate"]=> NULL }
那么我应该如何获得 aouth_accessToken,这个 oauth_token=zzzzz&oauth_verifier=zzzz url 参数提供并且用户已授权使用我的申请?
所以让我回答我自己的问题,代码中不起作用的部分是:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
var_dump($reply);
我明白了为什么,在这里的 codebird 教程中 https://github.com/jublonet/codebird-php 有一些我认为不是必需的东西,但现在恢复它,它奇迹般地工作,这行代码
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
所以最终的代码会是这样的:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
/*$reply = $cb->oauth_requestToken(array(
'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
));*/
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
//var_dump($reply);
取消注释最后一行以更详细地显示结果
to confirm the results, i posted to twitter successfully using this code:
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
$params = array(
'status' => '1Auto Post on Twitter with PHP http://goo.gl/OZHaQD #php #twitter @Maina_Wycliffe'
);
$reply = $cb->statuses_update($params);
//var_dump($reply);
这是证据,推文 url-> https://twitter.com/Maina_Wycliffe/status/595995951132712960
并推文本身
希望这对你有所帮助
这真的很奇怪,因为
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
应该不行。第一个变量不是 OAuth 访问令牌。您需要从授权 URL 中获取此令牌 - 这就是发明此令牌的目的。也许其他用户可能想要使用您的应用程序。
即使我的脚本中有这行代码,我也无法发推文,因为我收到 "invalid token" 错误,所以对我来说,整个 codebird 库都是一团糟,没有适当的文档:(
我正在尝试使用 codebird 从 Twitter 获取访问令牌,首先让用户授权使用我的应用程序,使用此代码可以完美地工作
require_once('lib/codebird.php');
\Codebird\Codebird::setConsumerKey("xxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
session_start();
// get the request token
$reply = $cb->oauth_requestToken(array(
'oauth_callback' => 'http://lifetanstic.co.ke/AppRegister'));
// store the token
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
$_SESSION['oauth_token'] = $reply->oauth_token;
$_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;
$_SESSION['oauth_verify'] = true;
// redirect to auth website
$auth_url = $cb->oauth_authorize();
?>
<script type="text/javascript">
window.location = "<?php echo $auth_url; ?>";
</script>
<?php
//header('Location: ' . $auth_url);
?>
这是我被重定向到这里的地方:
然后我被重定向到 window,我应该在那里获取访问令牌和访问令牌机密,这也有效。
这是使用 $_GET[] 我得到以下代码的地方 http://lifetanstic.co.ke/AppRegister?oauth_token=zzzzz&oauth_verifier=zzzz
现在在该页面中,当我 运行 以下代码时,它不起作用,但会产生以下错误:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
var_dump($reply);
当我转储回复时,它有以下错误:
object(stdClass)#1 (3) { ["message"]=> string(21) "Invalid request token" ["httpstatus"]=> int(401) ["rate"]=> NULL }
那么我应该如何获得 aouth_accessToken,这个 oauth_token=zzzzz&oauth_verifier=zzzz url 参数提供并且用户已授权使用我的申请?
所以让我回答我自己的问题,代码中不起作用的部分是:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
var_dump($reply);
我明白了为什么,在这里的 codebird 教程中 https://github.com/jublonet/codebird-php 有一些我认为不是必需的东西,但现在恢复它,它奇迹般地工作,这行代码
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
所以最终的代码会是这样的:
require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
/*$reply = $cb->oauth_requestToken(array(
'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
));*/
$reply = $cb->oauth_accessToken(array(
'oauth_verifier' => $_GET['oauth_verifier']
));
//var_dump($reply);
取消注释最后一行以更详细地显示结果
to confirm the results, i posted to twitter successfully using this code:
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
$params = array(
'status' => '1Auto Post on Twitter with PHP http://goo.gl/OZHaQD #php #twitter @Maina_Wycliffe'
);
$reply = $cb->statuses_update($params);
//var_dump($reply);
这是证据,推文 url-> https://twitter.com/Maina_Wycliffe/status/595995951132712960
并推文本身
这真的很奇怪,因为
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
应该不行。第一个变量不是 OAuth 访问令牌。您需要从授权 URL 中获取此令牌 - 这就是发明此令牌的目的。也许其他用户可能想要使用您的应用程序。 即使我的脚本中有这行代码,我也无法发推文,因为我收到 "invalid token" 错误,所以对我来说,整个 codebird 库都是一团糟,没有适当的文档:(