我正在尝试使用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);
?>
这是我在这里重定向的地方:
然后我被重定向到我应该获得访问令牌和访问令牌秘密的窗口,这也有效。
以下是使用$ _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&amp; oauth_verifier = zzzz url参数提供并且用户已经授权使用我的应用程序?
答案 0 :(得分:0)
所以让我回答一下我自己的问题,代码中没有用的部分是:
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);
这是证据,推文网址 - > https://twitter.com/Maina_Wycliffe/status/595995951132712960
并发推文 希望这会对你有所帮助
答案 1 :(得分:0)
这真的很奇怪,因为
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
不应该工作。第一个变量不是OAuth访问令牌。您需要从授权URL获取此令牌 - 这就是本发明的目的。也许其他用户可能想要使用您的应用。 即使我在我的脚本中有这行代码,我也无法发推,因为我收到了“无效令牌”错误,所以对我来说整个codebird库是一个没有适当文档的混乱:(