【问题标题】:Get Facebook user profile data in php在 php 中获取 Facebook 用户个人资料数据
【发布时间】:2014-01-22 19:07:36
【问题描述】:

以下代码应返回登录用户的电子邮件地址。

  <?php


     require_once('facebook-php-sdk/src/facebook.php');
    // Create our Application instance (replace this with your appId and secret).
    $facebook= new Facebook(array(
      'appId' => '2453463636',
          'secret' => '365653656565656',
          'allowSignedRequest' => false,
    ));


    $user = $facebook->getUser();
    print_r($user);
    if ($user) {
      try {
        // Get the user profile data you have permission to view
       // $user_profile = $facebook->api('/me');
        $user_profile = $facebook->api('/me?fields=picture.width(100).height(100),first_name,last_name,username,email');
        echo $user_profile['email'];

      } catch (FacebookApiException $e) {
        $user = null;
 error_log($e);
     print_r($e);
      }
    } else {
     die("failed");
    }

    ?>

相反,它返回“失败”,而 print_r($user) 返回 0。

真的不知道该怎么办。

在仪表板中:

我已经建立了一个网站平台来查看我的应用程序。

jist: “应用程序域” = www.app.com

“网站网址”=http://www.app.com/test

网站网址是实际的应用程序。我尝试在http://www.app.com/test/fbuser 等url 中访问getUser,它返回0 和die 子句。

我是不是设置错了?

编辑

Curl 在我的本地服务器上

“配置命令”也有很大不同(请参阅下面的 localhost 屏幕截图)

远程服务器信息在配置命令的这段文本中提到了“curl”

【问题讨论】:

  • 如果您使用 FB 中的示例会发生什么:developers.facebook.com/docs/php/howto/profilewithgraphapi
  • 我试过这个。 It brings up the link to login, even though I am logged in, and when I click it this is appended to the end of url in the address bar "?code=AQDJgFwlShcurgvYqmPfzlZANlAnilY8DxwYA5YS-Oh_tGURhgQO9vI5HHbEiLZJ7B0GC4VgO3zkslvwmVwmOglL-o1pZteNbb4a39VbdcTu6inLwD8sTHG3CFapzB-fYsPMTJfNv-MiAuAaYASo0z-TiIyYuzAaNqZsjSoH5GPoqn6ynZdXAyCCkyN9SqZv8Br9Aj73KLwFzSw3SNHzKAl5k75BvUwDUtDvKQc3V76L4oHk2s-LlCsBL_4_QBibvVvIIeGokvB473oiR002346UxDYe- 1cPvH2sAn_hHbk2B4GfRWijpMF8R2E744h7VfE&state=e17f5d8c1cfb47b357df6d5ff1eecca6#_=_",但页面保持不变
  • @Tobi 请参阅上面的编辑
  • 这与您是否登录 www.facebook.com 无关,它与您是否已授予应用访问您信息的权限有关。您需要按照此处所述实现 OAuth 身份验证流程:developers.facebook.com/docs/facebook-login/…“?code=”部分可以交换为访问令牌,如下所示:developers.facebook.com/docs/facebook-login/…
  • 您使用的是最新版本的FB PHP SDK吗?

标签: php facebook codeigniter facebook-php-sdk


【解决方案1】:

Codeigniter 删除了 Facebook PHP SDK 用来检索 OAuth 代码参数的$_REQUEST

解决方法是在调用 $facebook-&gt;getUser() 之前将 $_GET 复制到 $_REQUEST

$_REQUEST += $_GET; 
$user = $facebook->getUser();

感谢this所以回答。

【讨论】:

    【解决方案2】:

    案例 1 如果用户已登录并且仍然获得 $user = 0

    我在不同的场合遇到过这个问题,但并不是每个人都会遇到 SDK 问题。所以我不确定这里出了什么问题。但我稍微深入研究了一下,找到了如下所述的解决方案。

    解决方案:在为这个问题尝试了许多解决方案之后,这对我有用。

    在 base_facebook.php 文件中,找到 makeRequest() 方法并检查以下行。

    $opts = self::$CURL_OPTS; 
    

    紧随其后,添加这一行

    $opts[CURLOPT_SSL_VERIFYPEER] = false;  
    

    更多细节可以在这里找到 - http://net.tutsplus.com/tutorials/php/how-to-authenticate-your-users-with-facebook-connect/

    案例 2 - 如果用户未登录

    尝试关注

    if($user_id) {
      // User is logged in do action here
    
    } else {
    
      // No user, print a link for the user to login
      $login_url = $facebook->getLoginUrl();
      echo 'Please <a href="' . $login_url . '">login.</a>';
    
    }
    

    【讨论】:

    • 你是否能够在 $user 中获取用户 ID 或者你仍然得到 $user = 0 ?
    • 代码如上。我尝试打印 $user,但它总是返回 0。我真的不明白,这在 localhost xampp 上工作正常
    • 为可能的选项编辑了我的答案
    • 尝试了第二个选项。我注销并重新加载了该页面,该页面显示了将我带到登录页面的链接。我登录了,然后应用程序要求访问我的基本信息,我单击确定,它从 print_r 和登录链接重定向到具有相同值 0 的页面。现在,当我单击登录链接时,它会加载一个奇怪的 url,然后停留在页面上。
    • 您似乎已正确登录,但现在您遇到了 userid 返回 0 的问题。我建议您再次尝试选项 1 并刷新页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多