Вход в Facebook с использованием PHP SDK не работает

<?php require_once('facebook.php'); $config = array( 'appId' => 'xxxxx', 'secret' => 'xxxxx', ); $facebook = new Facebook($config); $user_id = $facebook->getUser(); ?> <html> <head></head> <body> <?php if($user_id) { try { $user_profile = $facebook->api('/me','GET'); echo "Name: " . $user_profile['name']; } catch(FacebookApiException $e) { $login_url = $facebook->getLoginUrl(); echo 'Please <a href="' . $login_url . '">login.</a>'; echo "1"; error_log($e->getType()); error_log($e->getMessage()); } } else { $login_url = $facebook->getLoginUrl(); echo 'Please <a href="' . $login_url . '">login.</a>'; echo "2"; } ?> </body> </html> 

Когда я перехожу на mysite.com/fbconect.php, это белая страница со ссылкой LOGIN. Когда я нажимаю логин, он перейдет на страницу входа в facebook. После того, как я зашел в систему, я вернусь к mysite.com/fbconect.php, после чего он отобразит ссылку входа в систему снова с помощью Echoed «1». URL-адрес mysite.com стал mysite.com/fbconect.php?xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Что не так в моем коде?

В коде нет ничего плохого.

Быть уверенным:

  1. Пользователь facebook, используемый для теста, разрешил приложение
  2. Этот код просто запускается на странице PHP, развернутой на веб-сайте, указанном в обоих:
    • Сайт Facebook Developers -> App > YourApp > Basic -> App Domains
    • Сайт Facebook Developers -> App > YourApp > Basic -> Website with Facebook Login

введите описание изображения здесь

Возможно, вы вошли в систему с пользователем, который еще не принял ваше приложение fb. В этом случае вы увидите « Please login.1 »

Если вы увидите « Пожалуйста, войдите в систему2 », убедитесь, что вы код поймали и исключение. Например, если вы читаете это:

 OAuthException Error validating access token: User YYYYYYYY has not authorized application XXXXXXXXXXXXXXXX. 

очень вероятно, что ваш пользователь fb удалил ваше приложение из своего списка. Или, если вы видите

 Couldn't connect to host 

Это означает, что система, над которой вы работаете, скорее всего блокирует исходящие соединения.

Если вы хотите, чтобы тестовый пользователь уже принял ваше приложение fb, вы можете создать его на Facebook Developers в Apps > YourApp > Developer Roles « Apps > YourApp > Developer Roles »,

Если вы хотите получить авторизацию от пользователя, вы можете изменить свой код:

 <?php require_once('facebook.php'); $config = array( 'appId' => 'xxxxx', 'secret' => 'yyyyyy', ); $facebook = new Facebook($config); $user_id = $facebook->getUser(); ?> <html> <head></head> <body> <?php function render_login($facebook) { $canvas_page = 'http://www.yoursite.com/'; // HERE YOU ASK THE USER TO ACCEPT YOUR APP AND SPECIFY THE PERMISSIONS NEEDED BY $login_url = $facebook->getLoginUrl(array('scope'=>'email,user_photos,friends_photos', 'redirect_uri'=>$canvas_page)); echo 'Please <a href="' . $login_url . '">login.</a>'; } if($user_id) { try { $user_profile = $facebook->api('/me','GET'); echo "Name: " . $user_profile['name']; } catch(FacebookApiException $e) { render_login($facebook); echo "1"; error_log($e->getType()); error_log($e->getMessage()); } } else { render_login($facebook); echo "2"; } ?> </body> </html> 

Надеюсь это поможет.