0

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

访问 user_id 和用户名只有在用户授权应用程序的情况下才能访问。

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

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

- - 编辑 - -

我正在使用 php-sdk v3.1.1。

4

1 回答 1

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
}
于 2011-11-19T11:00:22.993 回答