坚持使用facebook php sdk。 GetUser始终返回0

时间:2014-02-05 17:16:24

标签: php facebook facebook-graph-api

如果没有人,我有这个代码登录用户。

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

此处,如果返回的用户ID为0,则从facebook实例获取登录URL,并对该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/“。我必须在”配置“部分创建网站平台。

我在不在localhost的互联网托管中工作。

哪个可能是问题?我真的被困了

5 个答案:

答案 0 :(得分:1)

确定。代码是正确的。问题是facebook应用程序的几个选项之一。我不确定我改变了什么选项,我把应用程序的可能选项用于帮助解决这个常见问题。

网站应用

Stream post URL security =&gt;离 原生或桌面应用? =&GT;关

希望它有所帮助,如果您使用此主题进行搜索,这个问题就会非常普遍。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

enter image description here

我通过PHP SDK(使用Curl)与Facebook通信时发现了SSL问题。您必须将CURL_OPTS“CURLOPT_SSL_VERIFYPEER”设置为“false”。

例如:

facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 

答案 3 :(得分:0)

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

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

结果是,当我正常登录(通过->getLoginUrl()和自定义JS 弹出窗口窗口)时,facebook api总是给我 = 0 ->getUser()电话,即使我能够浏览到Facebook并验证我是通过我自己的弹出窗口真正连接的。

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

在我将文件包含在与上述2相同的文件夹中之后,我的->getUser()电话可以返回我的Facebook帐户信息。

答案 4 :(得分:0)

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