Twitter OAUTH – возвращает код ответа «0»

Я пробовал использовать библиотеку 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']; } 

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

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

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

«default CURLOPT_SSL_VERIFYPEER по умолчанию"

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

строка (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, так что на самом деле это ужасный ответ). Вместо этого возьмите другой совет, который я дал, и убедитесь, что соответствующий файл сертификата корневого ЦС (cacert.pem) находится на своем месте.

Если вы сравните с 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'] и является истинным. Вы этого не делаете, и мы пошли полным кругом, чтобы не объяснять поведение, которое вы видите.

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

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

Согласно TMT git repo:

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

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