Я пытаюсь разработать пример для входа в php facebook php, следуя примеру здесь
Я разместил здесь свое приложение, но я получаю сообщение об ошибке в вопросе, когда я пытаюсь получить доступ к ссылке. Вот фрагмент кода, который выдает ошибку
try { $e = new FacebookApiException(array(// LINE 887 'error_code' => curl_errno($ch), 'error' => array( 'message' => curl_error($ch), 'type' => 'CurlException', ), )); curl_close($ch); } // edit suggested by Kneel-before ZOD catch(FacebookApiException $e) { $result = $e->getResult(); echo 'Got an : ', $e->getType(),' while posting'; echo(json_encode($result)); } catch(Exception $e){ echo 'Caught exception: ', $e->getMessage(), "\n"; }
Я уверен, что Ive правильно установил идентификатор APP и секрет в index.php.
Вот скриншот моей настройки приложения на facebook
Любая помощь будет оценена по достоинству. Благодаря!
Возможно, вам придется указать файл сертификата для Facebook, который вам нравится:
Загрузите файлы сертификатов с https://github.com/facebookarchive/facebook-php-sdk/blob/master/src/fb_ca_chain_bundle.crt
и добавьте это перед попыткой любых вызовов Facebook
facebook::$CURL_OPTS[CURLOPT_CAINFO] = 'path/to/fb_ca_chain_bundle.crt';
Вы также можете попробовать
facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
почему вы создаете исключение в блоке try?
моя текущая рабочая функция входа выглядит примерно так:
public function login() { $this->load->library('facebook/facebook',$config); $uid = $this->facebook->getUser(); if ($uid) { try { $user_profile = $this->facebook->api('/' . $uid); //then redirect to whatever you need.. } catch (FacebookApiException $e) { error_log($e); $uid = null; $this->facebook->destroySession(); } } else { $params = array( 'canvas' => 1, 'fbconnect' => 0, 'scope' => 'email', ); echo "<script>top.location.href='" . $this->facebook->getLoginUrl($params)."'</script>"; exit(); } }
У меня была такая же проблема, как и вы.
Я добавляю этот параметр до curl_exec()
в base_facebook.php
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
Если вы используете бесплатный хостинг, я думаю, что это может не сработать, главным образом потому, что они обычно отключили исходящее соединение. Я также столкнулся с этой проблемой с кодом, который работал плавно на платных хостинга (или исходящее подключение включено).
Вы создаете исключение в try … catch block. Вам не нужно делать такие вещи. блок try-catch, предназначенный для обработки сегментов кода, которые могут вызывать исключение в ваших приложениях. Вы должны поместить внутри сегментов блочного кода, которые могут вызывать исключение. В вашем случае это может быть запрос cURL API Facebook.
Ссылка https, которую вы, возможно, должны будете предоставить информацию о сертификате или завиток, обычно выдает ошибку, если у вас нет доступа к сертификату, а затем добавление
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
разрешит доступ к любому сертификату.
## Найти код В base_facebook.php # #
public static $CURL_OPTS = array( CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 60, CURLOPT_USERAGENT => 'facebook-php-3.2', );
И добавить вариант
public static $CURL_OPTS = array( CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 60, CURLOPT_USERAGENT => 'facebook-php-3.2', CURLOPT_PROXY => '199.200.120.140:8089', );
Как было предложено Ashutosh Bajpay, вполне вероятно, что ваш веб-сервер не сможет подключиться на основе сообщения об ошибке. Если вы используете общий хостинг-провайдер или имеете SELinux, очень правдоподобно, что ваш код не сможет инициировать новое подключение.
Вы можете написать быстрый и грязный сценарий, чтобы проверить эту теорию:
$page = file_get_contents('http://google.com'); (!empty($page)) ? var_dump($page) : print_r(error_get_last());
Если скрипт может подключиться, вы получите дамп страницы, иначе вы увидите ошибку с попыткой попасть на хост.
Если у вас есть контроль над полем, и, случается, работает SELinux, здесь есть несколько полезных советов.
Проверьте, что функция php.ini
позволяет выполнять завиток.
Для ubantu попробуйте этот код в вашем терминале
sudo apt-get install php5-curl
После перезапуска сервера Apache, используя
sudo service apache2 restart
Вы ловите два типа исключений, и это не исключение, которое «бросается». Попробуйте поймать исключение, которое будет выброшено, и внутри этого блока исключений вы сможете продолжить отладку своей проблемы (например, показывая переменные в игре во время исключения …), тогда вы можете создать простую страницу для проверки каждой части головоломка, пока вы ее не исправите.
Это не имеет никакого отношения к вашему коду. Curl просто не может подключиться к API-интерфейсу facebook. Это может быть связано с тем, что ваш хост блокирует исходящие соединения с другими хостами, или facebook блокирует ваш хост.
Если у вас есть доступ к SSH, вы можете попытаться найти http://graph.facebook.com и / или проверить свои журналы php. В противном случае вы должны спросить своего хозяина.