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


Check if the user is a fan of my facebook page?

我曾经使用流动代码来检查用户在我的Facebook页面上时是否是我的页面的粉丝。现在我想检查用户在我的网站上时是否是我的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 来解决这个问题?

如果不在页面选项卡中访问应用程序,您将无法获得page详细信息。

您可以通过简单的FQL查询page_fan表来实现这一点(当然知道Facebook页面的id):

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

或者通过查询图形 API 以获取user对象的likes连接:

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

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

要获得用户好友的相同详细信息,请friends_likes请求许可,并将me/me()替换为好友 ID。

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

您可以通过订阅(FB.subscribeedge.create事件来做到这一点,一旦用户喜欢该页面,该事件就会触发(对于不喜欢edge.remove事件)。

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

解决这个问题的更好方法是:

// 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;
        }