检查用户是否是我的Facebook页面的粉丝?

时间:2012-04-22 04:41:08

标签: php facebook

我曾经使用流动的代码检查用户是否是我的页面的粉丝。现在,我想查看用户是否在我的网站上的粉丝。

<?php
            $signed_request = $_REQUEST["signed_request"];
            list($encoded_sig, $payload) = explode('.', $signed_request, 2);
            $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

            if (empty($data["page"]["liked"])) {
                echo "You are not a fan!";
            } else {
                echo "Welcome back fan!";
            }
    ?>

我通过facebook文档阅读,但我找不到合适的答案。 救命 ? 我不想用facebook处理任何应用程序权限。我怎样才能通过php来解决这个问题?

2 个答案:

答案 0 :(得分:4)

如果访问的应用程序不在页面标签页中,则不会获得page个详细信息。

您可以使用简单的FQL查询来实现page_fan table(当然知道Facebook页面的ID):

SELECT uid, page_id FROM page_fan WHERE uid=me() AND page_id=PAGE_ID

或者通过查询likes connection of user object的图谱API:

https://graph.facebook.com/me/likes/PAGE_ID

这两种方式都需要用户授予user_likes权限。

要为用户的朋友获取相同的详细信息,请求friends_likes权限,并将me/me()替换为朋友ID。

更新(仅用于描述您在评论中提出的问题)
如果你只需要知道用户需要/需要喜欢某些URL和/或Facebook页面,有些情况下由于流的性质可能不需要user_likes

您可以通过subscribing (FB.subscribe)edge.create事件执行此操作,该事件将在用户喜欢该页面时触发(对于不喜欢edge.remove事件而言)。

请注意,这只有在用户不喜欢该内容的情况下才可靠,因为edge.create只会在用户操作时触发。

答案 1 :(得分:3)

解决问题的更好方法是:

// to generate user access token after the user is logged in
$USER_ACCESS_TOKEN = $facebook->getExtendedAccessToken();

$isFan = curl("https://api.facebook.com/method/pages.isFan?format=json&access_token=" . $USER_ACCESS_TOKEN . "&page_id=" . $FACEBOOK_PAGE_ID);

        function curl($url) {

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }