Ответ 1
$access_token = $twitteroauth->getAccessToken($data['oauth_verifier']);
var_dump($access_token);
Откуда происходило $data
? У вас есть переменная $oauth_verifier
, но помните, что вам это не нужно, если это ваш зарегистрированный URL обратного вызова.
Поскольку вы использовали недопустимую переменную внутри getAccessToken
, она вернет неверное значение.
Правильный способ использования TwitterOAuth:
if (!isset($_GET["oauth_token"])) {
// set these values in a config file somewhere.
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
// append a ?. This is your callback URL if you specify something.
$credentials = $twitter->getRequestToken("http://example.com/test.php?");
// try and be a bit more elegant with the URL... This is a minimal example
$url = $twitter->getAuthorizeUrl($credentials);
echo $url;
// these are temporary tokens that must be used to fetch the new,
// permanent access tokens. store these in some way,
// session is a decent choice.
$_SESSION["token"] = $credentials["oauth_token"];
$_SESSION["secret"] = $credentials["oauth_token_secret"];
} else {
// use the user previously stored temporary credentials here
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,
$_SESSION["token"], $_SESSION["secret"]);
// uses the oauth_token (from the request) already.
// you store these credentials in your database (see below).
$credentials = $twitter->getAccessToken($_GET["oauth_verifier"]);
// just a printout of credentials. store these, don't display them.
echo "<pre>";
var_dump($credentials);
// valid credentials, provided you give the app access to them.
echo "</pre>";
}
Я просто использую один script для обратных вызовов для удобства использования; вы можете разделить соответствующие разделы на несколько сценариев, если вам нравится (и вы, вероятно, должны).
Удобно для вашей базы данных, учетные данные включают в себя имя пользователя Twitter. Изменить: В настоящее время Twitter выделяет 64-битные целые числа для идентификаторов пользователей. Вы должны сохранить это как строку, чтобы убедиться, что у вас не закончились искаженные идентификаторы пользователей и конфликты, если вы не можете обрабатывать 64-битные целые числа в каждой части вашего приложения.
array(4) {
["oauth_token"]=>
string(50) "7041...wYupkS"
["oauth_token_secret"]=>
string(42) "O9ENq...21B2fk"
["user_id"]=> // user ID. always the same, never changes (store this as ID)
string(9) "..."
["screen_name"]=> // username. can change.
string(11) "..."
}
Итак, если вы хотите регистрировать пользователей через twitter, без явного указания им входа на ваш сайт, вы можете использовать $_SESSION
(я использую базы данных для своих логинов, что рекомендуется, если вы хотите сохранить это состояние)
В приведенном выше script вы добавили бы это в конец блока else
:
$_SESSION["token"] = $credentials["oauth_token"];
$_SESSION["secret"] = $credentials["oauth_secret"];
$_SESSION["username"] = $credentials["screen_name"];
Вы также можете получить имя пользователя и больше от GET account/verify_credentials
, если вы хотите дать им страницу пользователя (если вы используете javascript, возьмите их userid через id_str
здесь):
$user_array = $twitter->get("account/verify_credentials");