Facebook粉丝页面应用上的用户数据

时间:2011-11-19 09:52:34

标签: facebook facebook-like facebook-apps

我创建了一个应用程序并将其连接到粉丝页面,以便在该页面中加载应用程序内容。

要访问user_id,只有在用户授权应用程序时才能访问用户名称。

如何在用户喜欢该页面的同时授权应用程序?

我的意思是当用户点击同样的页面按钮应用程序授权对话框时也应该出现。或者,如果我错了,请提出正确的建议。

---编辑----

我使用的是php-sdk v3.1.1。

1 个答案:

答案 0 :(得分:0)

这是不可能的,页面状按钮没有以任何方式连接到您的应用程序。

您可以做的是解析传递给您的应用程序的signed_request参数,以检查用户是否喜欢该页面,如果他这样做,您可以检查是否可以获取用户对象并在需要时将其重定向到授权。

如果您不需要用户ID或任何其他扩展功能(例如发布到墙上)并且只想检查用户是否喜欢该页面,您只需使用已签名的请求并忘记其余的授权。

您可以使用应用程序密钥和以下函数解码signed_request:

function parse_signed_request_outside($signed_request, $secret) {
    list($encoded_sig, $payload) = explode('.', $signed_request, 2);

    // decode the data
    $sig = base64_url_decode_outside($encoded_sig);
    $data = json_decode(base64_url_decode_outside($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
        error_log('Unknown algorithm. Expected HMAC-SHA256');
        return null;
    }

    // check sig
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
        error_log('Bad Signed JSON signature!');
        return null;
    }

    return $data;
}

function base64_url_decode_outside($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}

为了确定类似内容,您需要执行以下操作:

$secret = "SECRET KEY";

$decodedSignedRequest = parse_signed_request_outside($_REQUEST['signed_request'], $secret);

if ($decodedSignedRequest['page']['liked'] == 1){
{
   // load content
}