我目前正在尝试将 twitter 集成到我正在使用 OAuth 开发的 php 网络应用程序中。
我有一个 HTML 页面,它提供了指向 Twitter 应用程序身份验证 URL 的链接,该 URL 似乎工作正常并显示身份验证屏幕。
下面是调用函数的代码。
if (!isset($_GET['oauth_token']))
{
//include("phpHandler/twitterLib/secret.php");
getTwitterURL($consumer_key, $consumer_secret);
}
consumer_key 和 consumer_secret 包含在一个 php 文件中。
下面是获取推特授权url的代码。
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 返回的响应。
我在数组中打印出以下错误
Array ( [error] => Invalid / expired Token [request] => /account/verify_credentials.json )
我该如何解决这个错误。我不知道为什么它无效或过期,我关闭浏览器并重新启动但出现相同的错误。
感谢您提供的任何帮助。
最佳答案
如果用户从他们的设置中明确拒绝您的应用程序,或者如果 Twitter 管理员暂停您的应用程序,您的访问 token 将无效。如果您的申请被暂停,您的申请页面上会显示一条说明它已被暂停。
许多用户信任应用程序来读取他们的信息,但不一定会更改他们的姓名或发布新状态。通过 Twitter API 更新信息——无论是名称、位置还是添加新状态——都需要 HTTP POST。我们在实现时坚持同样的限制。任何需要 HTTP POST 的 API 方法都被视为写入方法并需要读写访问权限。
无论您的存储系统是什么,您都需要开始为应用程序的每个用户存储 oauth_token 和 oauth_token_secret(统称为“访问 token ”)。 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']);
}
关于php - 使用 Twitter OAuth API 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319546/