【问题标题】:Stuck using facebook php sdk. GetUser always returns 0使用 facebook php sdk 卡住了。 GetUser 总是返回 0
【发布时间】:2014-03-02 06:44:15
【问题描述】:

如果没有任何人,我有此代码可以与用户一起登录。

index.php,位于http://DOMAIN.COM/PATH

这里,如果返回的用户 ID 为 0,则登录 url 取自 facebook 实例,并重定向到该 url 以使用 facebook 用户登录。然后,在授权操作之后,下一个 url 是“http://DOMAIN.COM/PATH/check.php”,其中再次执行了“getUser”方法,但是用户 id 再次为 0。

`

$fbPermissions = 'read_stream, publish_stream, user_birthday, user_location, user_work_history, user_hometown, user_photos';
$site_url   = "http://DOMAIN.COM/PATH/check.php";
$facebook = new Facebook(array(  
            'appId'  => 'MY_ID',  
            'secret' => 'MY_SECRET_ID',   
            'cookie' => true  
            ));  

$user = $facebook->getUser(); 

if($user) { 

    try{  
            echo "user id insid if=".$user;
            $user = $facebook->api('/me');  
    } catch (Exception $e){}  

} else {  
    $loginUrl = $facebook->getLoginUrl(array('scope'=>$fbPermissions,'redirect_uri'=>$site_url));
    header('location:'.$loginUrl.'');
} 
?>

check.php代码

<?php
include_once("facebook.php");

$fbPermissions = 'read_stream, publish_stream, user_birthday, user_location, user_work_history, user_hometown, user_photos';
$facebook = new Facebook(array(  
            'appId'  => 'MY_ID',  
            'secret' => 'MY_SECRET_ID',  
            'cookie' => true  
            ));  

$user = $facebook->getUser(); 

if($user) { 

    try{  
            echo "user id insid if=".$user;
            $user = $facebook->api('/me');  
    } catch (Exception $e){}  

} else {  
    echo "No user";
} 
?>

因此,在我的 Facebook 开发者页面应用程序的选项中,我有“ 具有此值“http://DOMAIN.COM/PATH/”的站点 URL”选项。我必须在“配置”部分创建一个网站平台。

我在一个不在 localhost 的互联网主机中工作。

可能是什么问题?我真的卡住了

【问题讨论】:

  • 你可以试试这个 $user = $facebook->getUser();在 try catch 块内并显示异常
  • 这里是你的问题的答案,这是一个重复的问题stackoverflow.com/a/25671780/612987
  • 你找到解决办法了吗?

标签: php facebook facebook-graph-api


【解决方案1】:

好的。代码是正确的。问题是 facebook 应用程序的几个选项之一。我不确定我更改的选项是什么,为了解决这个常见问题,我把我的应用程序的可能选项放在了这里。

网站应用程序。

流发布 URL 安全性 => 关闭 本机或桌面应用程序? => 关闭

希望对您有所帮助,如果您使用此主题搜索,这个问题真的很常见。

【讨论】:

  • 原生应用还是桌面应用? => Off 解决了我的问题,非常感谢:)
【解决方案2】:

您的 PHP 版本是多少?是 5.4.x 吗? 如果是这样,那么您需要稍微更改 PHP SDK 代码。

我和你有同样的问题,我发现这篇文章真的对我很有帮助。 facebook-php-sdk-fixing-getuser-on-php-5-4-x

【讨论】:

    【解决方案3】:

    它发生在我身上,当我检查我的 Apache 日志时,我发现了这个:

    当通过 PHP SDK(使用 Curl)与 Facebook 通信时,我发现它存在 SSL 问题。您必须将 CURL_OPTS "CURLOPT_SSL_VERIFYPEER" 设置为 "false"。

    例如:

    facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
    

    【讨论】:

      【解决方案4】:

      有点晚了,但我刚刚解决了我的类似问题(-&gt;getUser() = 0)

      首先,我使用的是 Facebook SDK 3.x.x(需要 PHP 5.2)而不是 最新的 Facebook SDK 4.0(需要 PHP 5.4)。到目前为止,我刚刚使用/包含了 SDK 的 2 个文件(facebook.phpbase_facebook.php),并且由于某种原因,忽略了名为 fb_ca_chain_bundle.crt 的第三个证书文件。

      结果是,当我正常登录时(通过-&gt;getLoginUrl() 和自定义 JS popup 窗口),facebook api 总是在@上给我 =0 987654326@ 电话,即使我能够浏览 facebook 并通过我自己的弹出窗口验证我是否真正连接。

      直到我决定查看我的 apache 日志并发现 'Invalid or no certificate authority found, using bundled information'惊人的描述性错误。我快速搜索了 facebook SDK 代码,发现该消息与上述 .crt 文件有关。

      在我将文件包含在与上述 2 相同的文件夹中后,我的 -&gt;getUser() 调用能够返回我的 Facebook 帐户信息。

      【讨论】:

        【解决方案5】:

        SDK 4.0 与 PHP 集成的简单易懂代码在这里https://github.com/ssgaur/Facebook-Login-PHP-SDK-v4

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-04
          • 2013-10-03
          • 2011-10-11
          • 2013-02-16
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多