Я работаю над проектом PHP, в котором я хочу иметь возможность автоматически публиковать сообщения в твиттере.
Из моей PHP-программы я авторизовал свое приложение для твиттера и сохранил oauth_token и верификатор в базе данных mysql.
Когда пользователь отправляет форму, он должен публиковать данные в твиттере.Для этого я извлекаю oauth_token из базы данных, чтобы опубликовать сообщение, но когда я просматриваю ответ перед разделом кода, который выполняет актуальное обновление статуса, я получаю сообщение об ошибке
'недействительно / истеклотокен '
Ниже приведен код, который я использую
function postToTwitter($twitterMsg)
{
require ("../../social/phpHandler/twitterLib/EpiCurl.php");
require ("../../social/phpHandler/twitterLib/EpiOAuth.php");
require ("../../social/phpHandler/twitterLib/EpiTwitter.php");
require ("../../social/phpHandler/twitterLib/secret.php");
$query = "SELECT * FROM social_sites";
$result = mysql_query($query);
if ($result)
{
//session_start();
//$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
while ($myrow = mysql_fetch_array($result))
{
$oauth_token = $myrow['token'];
$verifier = $myrow['verifier'];
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($oauth_token);
//echo 'OAuth Token: ' . $_GET['oauth_token'];
$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();
$twitterInfo->response;
//echo '<pre>';
print_r($twitterInfo->response);
}
}
Обновление
Я экспортировал переменную $twitterInfo
и записал ее в файл ивыход ниже.Не уверен, поможет ли это вообще.
EpiTwitterJson :: __ set_state (array ('resp' =>
EpiCurlManager :: __ set_state (array ('key' => 'Resource id # 12'), 'epiCurl' => EpiCurl :: __ set_state (массив ('mc' => NULL, 'msgs' => NULL, 'выполняется' => NULL, 'запросы' => массив ('Resource id # 11' => NULL), 'Resource id # 12' => NULL,), 'response' => array ('Resource id # 11' => array ('data' => 'Неверный / просроченный токен
/ oauth / access_token', 'code '=> 401,' time '=> 0.39,' length '=> 136,' type '=>' text / html; charset = utf-8 ',),' Resource id # 12 '=> array ('data '=>' {"error": "Invalid \ / expired Token", "request": "\ / account \ /verify_credentials.json"} ',' code '=> 401,' time '=> 0.156,'length '=> 83,' type '=>' application / json; charset = utf-8 ',),),' properties '=> array (' code '=> 2097154,' time '=> 3145731,' length'=> 3145743,' type '=> 1048594,),)),)),' responseText '=>' {"error": "неверный \ / просроченный токен", "запрос": "\ / account \ / verify_credentials.json "} ',
' response '=> array ('error' => 'Invalid / expired Token', 'request' => '/account/verify_credentials.json',), 'error' => 'Invalid / expired Token', 'request' => '/account / verify_credentials.json ',))
Update 2
Я попытался сохранить токен доступа, сериализовав объект и сохранив его в базе данных, используя код ниже
function authenticate($consumer_key, $consumer_secret)
{
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($_GET['oauth_token']);
//echo 'OAuth Token: ' . $_GET['oauth_token'];
$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();
$twitterInfo->response;
//echo '<pre>';
//print_r($twitterInfo->response);
//var_dump($twitterInfo);
$username = $twitterInfo->screen_name;
$profilePic = $twitterInfo->profile_image_url;
addToDatabase($username, $profilePic, $_GET['oauth_token'], $_GET['oauth_verifier']);
}
function addToDatabase($username, $profilePic, $token, $verifier)
{
$token_serialised = serialize($token);
$query = "INSERT INTO social_sites (social_name, token, verifier, username, profilePicture) VALUES ('Twitter', '$token_serialised', '$verifier', "
. "'$username', '$profilePic')";
Позже я пытаюсь опубликовать в Твиттере, не загружая страницу авторизации приложения Twitter, получив значение из сохраненной ранее базы данных, и отключив сериализацию для отправки в Твиттер, используя следующий код:
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
while ($myrow = mysql_fetch_array($result))
{
//$access_token = unserialize($myrow['token']);
//$twitterObj->setToken($access_token);
//$token = $twitterObj->getAccessToken();
$token = unserialize($myrow['token']);
$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();
$myFile = "log.txt";
$fh = fopen($myFile, 'w') or die("Error");
fwrite($fh, var_export($twitterInfo->response, true));
fclose($fh);
// $twitterMsg = $_REQUEST['tweet'];
$update_status = $twitterObj->post_statusesUpdate(array('status' => $twitterMsg));
$tem = $update_status->response;
fwrite($fh, var_export($tem, true));
fclose($fh);
}
Запись файла журнала - это то, где записывается ответ в Твиттере, где говорится, что токен недействителен или истек.
Обновление 3
I 'Мы также заметили, что при десериализации возникает ошибка php:
Примечание: unserialize ();ошибка по смещению 2555 из 2987 байт
, и когда я пытаюсь экспортировать переменную, она кажется пустой