Twitter OAUTH - возвращает код ответа «0» - PullRequest
5 голосов
/ 29 января 2012

Я пытался использовать библиотеку Мэтта Харриса Twitter OAUTH (https://github.com/themattharris/tmhOAuth), заменяя данные по умолчанию моими ключами и токенами, но по какой-то причине я не могу получить действительный код ответа.

URL, с которым я тестирую, заканчивается портом (8888), но я не уверен, что это связано с ним. Я хожу по логу PHP и ошибок нет.

$tweet_text = 'Hello world!';
print "Posting...\n";
$result = post_tweet($tweet_text);
print "Response code: " . $result . "\n";

function post_tweet($tweet_text) {

  require_once('tmhOAuth.php');

  $connection = new tmhOAuth(array(
    'consumer_key'    => '(hidden)',
    'consumer_secret' => '(hidden)',
    'user_token'      => '(hidden)',
    'user_secret'     => '(hidden)',
  )); 

  $connection->request('POST', 
    $connection->url('1/statuses/update'), 
    array('status' => $tweet_text));

  return $connection->response['code'];
}

У кого-нибудь есть идеи?

Большое спасибо.

Ответы [ 3 ]

14 голосов
/ 07 февраля 2012

У меня была эта проблема, и это связано с недавним изменением в декабре 2011 года:

"по умолчанию CURLOPT_SSL_VERIFYPEER = true"

Если вы сбросили ответ $ connection->как советует Даррен, вы можете увидеть такую ​​ошибку, как у меня:

string (165) "ошибка установки сертификата проверки местоположения:"

Либо убедитесь, чточто файл сертификата cacert.pem находится на месте или отключите SSL_VERIFYPEER.

Я готов поспорить, что это решит вашу проблему (хотя это может быть не самое безопасное решение):

$connection = new tmhOAuth(array(
    'consumer_key'          => '(hidden)',
    'consumer_secret'       => '(hidden)',
    'user_token'            => '(hidden)',
    'user_secret'           => '(hidden)',
    'curl_ssl_verifypeer'   => false
));

Обновление за февраль 2015 года

Оглядываясь назад на этот ответ сегодня, я понимаю, что советовать людям устанавливать для curl_ssl_verifypeer значение false - не очень хороший ответ (на данный момент вы больше не можетебудьте уверены, что вы говорите с Twitter, так что на самом деле это ужасный ответ).Вместо этого примите другой совет, который я дал, и убедитесь, что соответствующий файл корневого сертификата CA (cacert.pem) находится на месте.

1 голос
/ 28 декабря 2012

Похоже, вам нужно убедиться, что у вас есть текущий сертификат.

В соответствии с git-репозиторием TMH:

Версия 0.60 укрепила безопасность библиотеки и по умолчаниюcurl_ssl_verifypeer в true.Поскольку некоторые хостинг-провайдеры не предоставляют самый последний корневой файл сертификата, он теперь включен в репозиторий TMH.Если версия устарела ИЛИ вы предпочитаете загружать корни сертификатов самостоятельно, вы можете получить их по адресу: http://curl.haxx.se/ca/cacert.pem

Перед обновлением используемой вами версии tmhOAuth не забудьте проверить работу обработки SSLна вашем сервере, запустив скрипт examples / verify_ssl.php.

1 голос
/ 30 января 2012

Если вы сравните с https://github.com/themattharris/tmhOAuth/blob/master/examples/tweet.php, ваш код может потребоваться изменить, чтобы он выглядел следующим образом:

$code=$connection->request('POST', ...);
return $code;

Однако, глядя на исходный код, обнаруживаются две вещи. Во-первых, ваш код должен быть таким же хорошим, потому что $this->response['code'] устанавливается на возвращаемое значение. Во-вторых, эта функция (на самом деле curlit()) также может возвращать void. Когда это происходит, response['code'] не определено. (Это выглядело как многообещающая твиттерная библиотека, пока я не увидел эту ошибку в дизайне.)

Зондирование даже дальше, он вернет void только тогда, когда $this->config['prevent_request'] существует и имеет значение true. Вы этого не делаете, и мы прошли полный круг, не имея возможности объяснить поведение, которое вы видите.

Итак, мой следующий шаг по устранению неполадок - поставить error_reporting(E_ALL|E_NOTICE) вверху, а затем проверить журналы ошибок на предмет дополнительных подсказок. Также сделайте print_r($connection->response) после вашего звонка на request(), чтобы увидеть, что еще у вас там есть.

...