Несколько недель назад я создал простое приложение для Facebook. Я получал информацию о пользователе через API Facebook, запрашивая разрешения у пользователей. Но на прошлой неделе он прекратил работу из ничего, и с тех пор я искал ответ.
В основном я использовал file_get_contents, чтобы получить информацию о пользователе из API Facebook. Но я попытался изменить его на cURL после того, как он начал сбой, но все еще не работает. Я пробовал использовать PHP-SDK для Facebook, даже отлаживал код методом makeRequest, но получаю то же возвращение во всех методах.
Когда запрос cURL делается на URL-адрес Facebook Open Graph, запрос терпит неудачу либо с номером ошибки 7 или 28. Они оба являются кодами ошибок для невозможности подключения к сайту или получения таймаута.
Мой сайт находится на общем хостинге, я пытался использовать cURL для получения других сайтов, и он отлично работает. Но когда я пытаюсь получить даже http://www.facebook.com , cURL возвращает FALSE.
Хостинг имеет сертификат SSL, имеет cURL и т. Д. И он работал нормально некоторое время назад. Я прочитал различные темы и сообщения об этом, попробовал много разных опций cURL, и никто из них, похоже, не работает.
Есть идеи?
$auth_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($GLOBALS['canvas_page']) . "&scope=publish_stream,email"; $signed_request = $_POST["signed_request"]; list($encoded_sig, $payload) = explode('.', $signed_request, 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); if (empty($data["user_id"])) { echo("<script> top.location.href='" . $auth_url . "'</script>"); } else { $_SESSION['oauth_token'] = $data['oauth_token']; $_SESSION['user_id'] = $data["user_id"]; $user = new User($_SESSION['user_id'], $_SESSION['oauth_token']);
function __construct($fid, $at) { $this->facebook = new Facebook(array( 'appId' => "<APP_ID>", 'secret' => "<FACEBOOK_SECRET_ID>", )); $this->fid = $fid; $this->token = $at; if ($data = $this->getGraph()) { ... } } public function getGraph() { $session = $this->facebook->getUser(); if ($session) { try { $access_token = $this->facebook->getAccessToken(); $attachment = array('access_token' => $access_token); //$result = $this->facebook->api('/' . $this->fid, 'GET', $attachment); $result = $this->facebook->api('/' . $this->fid, 'GET'); return $result; } catch (FacebookApiException $e) { return false; } } }
Заметки:
По-видимому, это связано с цикличной структурой DNS в Facebook. Я предполагаю, что один из адресов Facebook не удался, и сервер все еще пытался подключиться к этому адресу из-за кеша DNS.
Хост-провайдер должен был очистить свои кэши DNS для решения проблемы.
Для получения дополнительной информации о циклическом DNS вы можете посетить http://en.wikipedia.org/wiki/Round-robin_DNS .