Чирикать несколько учетных записей, используя OAuth в Twitter, используя PHP? - PullRequest
1 голос
/ 24 декабря 2011

Мне нужно приложение, в котором у меня есть текстовое поле для твита, и когда пользователь нажимает кнопку отправки, твит будет опубликован в нескольких учетных записях Twitter.

Я уже сделал это работающим, но только на одной учетной записи.Используя этот пример: https://dev.twitter.com/docs/auth/oauth/single-user-with-examples

У меня также есть этот код:

function getConnectionWithAccessToken($oauth_token, $oauth_token_secret) {
  $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $oauth_token, $oauth_token_secret);
  return $connection;
}

$connection = getConnectionWithAccessToken('myAuthTokenInAppDetail', 'myAuthTokenSecretInAppDetail');
$content = $connection->post('statuses/update', array('status'=>'hello world') );

Этот код работает, когда значения $ oauth_token и $ oauth_token_secret находятся в подробностях моего приложения.(https://dev.twitter.com/apps/1482596/show), но когда я использую другую учетную запись Twitter, она переходит на страницу авторизации, затем перенаправляет обратно в мое приложение и говорит:

stdClass Object
(
    [error] => Could not authenticate you.
    [request] => /1/statuses/update.json
)

Это мой код, когда это происходитЯ просто получаю $_SESSION, который был сгенерирован, как только он вернулся в мое приложение:

function getConnectionWithAccessToken($oauth_token, $oauth_token_secret) {
  $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $oauth_token, $oauth_token_secret);
  return $connection;
}

$oauth_token = $_SESSION['oauth_token'];
$oauth_token_secret = $_SESSION['oauth_token_secret'];

$connection = getConnectionWithAccessToken($oauth_token, $oauth_token_secret);
$content = $connection->get("statuses/home_timeline");
$content = $connection->post('statuses/update', array('status'=>'hello world') );

Я не знаю, почему это происходит.Пожалуйста, поделитесь некоторой идеей, как реализовать то приложение, которое я хотел.Любая идея будет высоко оценена и вознаграждена!Спасибо!:)

Ответы [ 2 ]

1 голос
/ 19 апреля 2016

просто нужно упомянуть oauth_token и oauth_token_secret в деталях приложения, которые называются TokenKey и Tokensecret, а для новых пользователей вы должны получить обратно $oauth_token и $oauth_token_secret из Twitter API после того, как они нажмут на ссылку авторизации

if ( empty($_GET["oauth_token"]) && empty($_SESSION['oauth_token'])    ) 
//you could add another conditions here using cookies or using DB .
 { 
    $request_token = $connection->oauth('oauth/request_token', 
            array('oauth_callback' => OAUTH_CALLBACK));
    $url = $connection->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token']));
    echo " <br/><a href='$url'>Sign-in</a> <br/>";
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];  
    }

else {

$oauth_verifier =  $_SESSION['oauth_token']   ;  
$oauth_token = $_SESSION['oauth_token_secret'] ;
// return user details 
$request_token2 = $connection->oauth('oauth/access_token',    
 array(  'oauth_verifier' => $oauth_verifier  , 'oauth_token' => $oauth_token  )  )  ;
$connection2=new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, 
$request_token2[oauth_token] , $request_token2[oauth_token_secret] );

// send out other user new status .
$statues = $connection2->post("statuses/update",  ["status" => "hello world"]  );
}

конечно, вы можете улучшить этот код, используя другие функции, и добавить таблицу БД для каждого нового авторизованного пользователя,
но имейте в виду, что при запросе нового request_token каждый раз генерируются новые ключи oauth_token & oauth_token_secret. Последнее, что больше всего смутило меня, когда публикует статус другого пользователя CONSUMER_KEY, CONSUMER_SECRET Твиттер использует один и тот же ключ для авторизации основного приложения и авторизации других пользователей, я знаю, что некоторые люди все еще попадают в это.

1 голос
/ 24 декабря 2011

Если это @Obraham's TwitterOAuth и вы используете callback.php по умолчанию, вам нужно изменить строки сеанса на:

$oauth_token = $_SESSION['access_token']['oauth_token'];
$oauth_token_secret = $_SESSION['access_token']['oauth_token_secret'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...