Facebook使用PHP SDK登录无法正常工作

时间:2013-11-08 11:45:52

标签: php facebook 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然后再显示,登录链接再次回复“1”。 mysite.com的URL成为mysite.com/fbconect.php?xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:4)

您的代码没有任何问题。

请确保:

  1. 用于测试的Facebook用户已授权该应用
  2. 此代码只是在两个中指定的网站上部署的PHP页面中运行:
    • Facebook Developers网站 - &gt; App > YourApp > Basic - &gt; App Domains
    • Facebook Developers网站 - &gt; App > YourApp > Basic - &gt; Website with Facebook Login
  3. enter image description here

    也许您已经使用尚未接受您的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

    如果您想获得用户的授权,您可以更改代码:

    <?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>
    

    希望这有帮助。