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