Facebook Connect - 使用FBML和PHP客户端

时间:2009-10-15 18:22:48

标签: php facebook

我正在做我的第二个Facebook连接网站。在我的第一个网站上,我使用facebook coonect FBML对用户进行签名,然后我可以通过PHP客户端访问其他信息。使用此网站,使用相同的确切代码,它似乎没有工作。我希望有人能够使用Facebook按钮登录:

<fb:login-button length="long" size="medium" onlogin="facebook_onlogin();"></fb:login-button>

登录后,facebook_onlogin()函数向PHP页面发出一些AJAX请求,试图使用Facebook PHP客户端。这是该页面的代码:

    $facebook = new Facebook('xxxxx API KEY xxxxx', 'xxxxx SECRET KEY xxxxx');
    //$facebook->require_login(); ** I DONT WANT THIS LINE!!

    $userID = $facebook->api_client->users_getLoggedInUser();

    if($userID) {

        $user_details = $facebook->api_client->users_getInfo($userID, 'last_name, first_name'); 
        $firstName = $user_details[0]['first_name']; 
        $lastName = $user_details[0]['last_name']; 

        $this->view->userID = $userID;
        $this->view->firstName = $firstName;
        $this->view->lastName = $lastName;
    }

问题是PHP客户端认为我没有会话密钥,所以$ userID永远不会被设置。如果我用我的Facebook ID(我登录时)覆盖$ userID,我会收到此错误:

异常'FacebookRestClientException',在C:\ wamp \ www \ mab \ application \ Facebook \ facebookapi_php5_restlib.php:3003

中显示消息'调用此方法需要会话密钥'

如果我取消注释require_login(),它将获得一个会话ID,但它会重定向很多页面并破坏我的AJAX调用。我使用的代码与我在另一个网站上成功完成的代码相同。在用户使用连接按钮登录后,任何人都有任何想法为什么PHP客户端不知道会话ID?任何想法将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下命令直接从Cookie中提取没有API调用的用户ID:

$facebook->get_loggedin_user();

请注意,这是在主$facebook对象上,不是它包含的api_client对象。

答案 1 :(得分:0)

永远不要尝试使用facebook connect和来自localhost的PHP客户端....这就是答案。您可以使其工作,但它会导致您在公共领域工作时无需处理的几个“隐藏”问题。