我曾经使用流动代码来检查用户在我的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.subscribe
)edge.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;
}