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