0

我正在为 Facebook 业务页面开发一些自定义 iframe/canvas 页面(或现在称为“应用程序”)。出于我的目的,我想提取当前登录(并且当前喜欢该页面)的用户的名字和姓氏并将其输出到页面上。当我以应用程序管理员身份登录时,此脚本工作得很好,但是当我尝试以我的个人帐户或我的几个朋友帐户登录时 - 似乎 $session 为空。为什么会发生这种情况?如何在不让用户通过任何额外身份验证的情况下获取名字和姓氏?

<?php
require_once '../db/connect.php';
require_once '../../lib/facebook.php';
$signed_request = $_REQUEST["signed_request"];
$secret = "***********************************";
$facebook = new Facebook(array(
    'appId'  => '**************',
    'secret' => $secret,
    'cookie' => true
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
    echo "\$session is not null!";
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
    }
}
echo $me['name'];
?>
4

1 回答 1

1

不幸的是,这是不可能的(参考):

signed_request与 Canvas 页面一样,在用户授权您的应用之前 ,您不会收到您的应用可访问的所有用户信息 。

所以你需要用户首先授权你的应用程序,这可以在这里找到:

 <?php 

     $app_id = YOUR_APP_ID;

     $canvas_page = YOUR_CANVAS_PAGE_URL;

     $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

在授权您的应用程序并获得用户 ID 后,我想这个过程很简单。

于 2011-03-17T17:53:07.040 回答