我目前正在尝试将twitter整合到我正在使用OAuth的php网络应用程序中。
我有一个HTML页面,它提供了一个指向twitter app身份验证网址的链接,该网址似乎正常运行,并显示了身份验证屏幕。
以下是调用该函数的代码。
if (!isset($_GET['oauth_token']))
{
//include("phpHandler/twitterLib/secret.php");
getTwitterURL($consumer_key, $consumer_secret);
}
consumer_key和consumer_secret包含在php文件中。
以下是获取Twitter授权网址的代码。
function getTwitterUrl($consumer_key, $consumer_secret)
{
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$url = $twitterObj->getAuthorizationUrl();
echo '<a class="linkButtons" href="'.$url.'">Add Twitter</a>';
}
这个重定向回到页面很好,然后我调用身份验证方法来检索像twitter用户名的信息。以下是执行身份验证的功能
function authenticate($consumer_key, $consumer_secret)
{
require ("twitterLib/EpiCurl.php");
require ("twitterLib/EpiOAuth.php");
require ("twitterLib/EpiTwitter.php");
require ("twitterLib/secret.php");*/
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($_GET['oauth_token']);
$token = $twitterObj->getAccessToken();
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
echo '<pre>';
print_r($twitterInfo->response);
}
echo和print_r用于显示来自twitter的响应返回。
我在数组中打印出以下错误
阵列( [错误] =&gt;无效/过期令牌 [请求] =&gt; /account/verify_credentials.json)
如何修复此错误。我不知道为什么它无效或已过期,我已关闭浏览器并重新启动但出现同样的错误。
感谢您提供的任何帮助。
答案 0 :(得分:1)
如果用户明确拒绝您的设置或Twitter管理员暂停您的应用程序,您的访问令牌将无效。如果您的申请被暂停,您的申请页面上会有一条说明已被暂停的说明。
许多用户信任应用程序来阅读他们的信息,但不一定要更改他们的名字或发布新状态。通过Twitter API更新信息 - 无论是名称,位置还是添加新状态 - 都需要和HTTP POST。在实施时我们坚持使用相同的限制。任何需要HTTP POST的API方法都被认为是一种写入方法,需要阅读和阅读。写访问。
无论您的存储系统是什么,您都需要为应用程序的每个用户开始存储oauth_token和oauth_token_secret(统称为“访问令牌”)。应该安全地存储oauth_token_secret。请记住,您将为应用程序对Twitter API发出的每个经过身份验证的请求访问这些值,因此请以适合您的用户群的方式存储它们。当您使用OAuth时,您不应再为任何用户存储密码。
require '../tmhOAuth.php';
require '../tmhUtilities.php';
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => 'YOUR_CONSUMER_KEY',
'consumer_secret' => 'YOUR_CONSUMER_SECRET',
'user_token' => 'AN_ACCESS_TOKEN',
'user_secret' => 'AN_ACCESS_TOKEN_SECRET',
));
// we're using a hardcoded image path here. You can easily replace this with an uploaded image-see images.php example)
// 'image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}",
$image = "./dickvandyke.jpg';
$code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json',
array(
'media[]' => "@{$image}",
'status' => "Don't slip up" // Don't give up..
),
true, // use auth
true // multipart
);
if ($code == 200) {
tmhUtilities::pr(json_decode($tmhOAuth->response['response']));
} else {
tmhUtilities::pr($tmhOAuth->response['response']);
}
答案 1 :(得分:0)
我设法找到了问题。我总是在authenticate函数中创建两个新的EpiTwitter对象。
答案 2 :(得分:0)
我参与了新的Twitter API。使用以下代码,它对我来说很好。
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$consumer_key = "XXXXXXX";
$consumer_secret = "XXXXXXX";
$connection = new TwitterOAuth($consumer_key, $consumer_secret);
$request_token= $connection->oauth('oauth/request_token', array('oauth_callback' => "http://callbackurlhere.com/callback.php"));
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
header('Location: '. $url);
?>
下面的callback.php代码获取永久oauthToken并将其保存在数据库中以供进一步使用:
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
// session_start();
if(isset($_REQUEST['oauth_verifier'])){
$oauth_access_token = $_REQUEST['oauth_token'];
$oauth_access_token_secret = $_REQUEST['oauth_verifier'];
$consumer_key = "XXXXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXXXXX";
$connection = new TwitterOAuth($consumer_key, $consumer_secret,$oauth_access_token , $oauth_access_token_secret );
$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $oauth_access_token_secret));
var_dump($access_token); die("--success here--");// Obtain tokens and save it in database for further use.
}
?>