0

我曾经使用流动代码来检查用户是否是我的页面的粉丝,而他在我的 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 来解决这个问题?

4

2 回答 2

4

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

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

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

或者通过查询 Graph API 来likes连接user对象

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

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

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

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

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

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

于 2012-04-22T07:00:27.217 回答
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;
        }
于 2012-10-06T14:13:59.977 回答