我的搜索结果为空,因为当您搜索“Facebook”和“like”时,我得到了各种其他结果。
我有一个应用程序,只在公司的Facebook页面上。在该应用程序中,我需要知道用户是否喜欢公司的页面。如果没有,我会显示一件事情,如果有,我会显示另一件事情。如何使用Facebook PHP SDK v.3.1.1来实现这一点?
我的搜索结果为空,因为当您搜索“Facebook”和“like”时,我得到了各种其他结果。
我有一个应用程序,只在公司的Facebook页面上。在该应用程序中,我需要知道用户是否喜欢公司的页面。如果没有,我会显示一件事情,如果有,我会显示另一件事情。如何使用Facebook PHP SDK v.3.1.1来实现这一点?
<?php
require('facebook.php');
$config = array(
'appId' => 'your facebook app id',
'secret' => 'your facebook app secret code',
'allowSignedRequest' => false
);
$facebook = new Facebook($config);
$user_id = $facebook->getUser();
if (isset($user_id)) {
try {
$likes = $facebook->api('/me/likes/your_facebook_page_id_here', 'GET');
if (!empty($likes['data'])) // if user has liked the page then $likes['data'] wont be empty otherwise it will be empty
{
echo 'Thank you for liking our fan page!';
}
else {
//show something else
}
} catch (FacebookApiException $e) {
$login_url = $facebook->getLoginUrl();
echo '<a href="' . $login_url . '">Please click here to login into your Facebook account.</a>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
$login_url = $facebook->getLoginUrl();
echo '<a href="' . $login_url . '">Please lick here to login into your Facebook account</a>';
}
?>
$checkIfUserLikePage = $facebook->api(array(
"method" => "fql.query",
"query" => "select uid from page_fan where uid=me() and page_id=1234567"
));
$checkIfUserLikePage = sizeof($checkIfUserLikePage) == 1 ? true : false;
这个应该对你有用!我曾经做过很多类似的页面,所以我创建了一种非常简单的方式来创建像门控页面一样的页面。https://github.com/DrewDahlman/FBVersion
享受吧!
$signed_request = $_REQUEST['signed_request'];
function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
$sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
$data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
return $data;
}
return false;
}
if($signed_request = parsePageSignedRequest()) {
if($signed_request->page->liked) {
$this->assign('verify', $signed_request->page->liked);
}
else {
echo "Please click on the Like button to view our Coupons!";
jexit();
}
}
虽然这是一个老话题,但我想发表一下自己的看法,因为我最近学到了很多关于如何做到这一点,并不得不将其付诸实践。
请查看此链接:http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/。它使用signed_request
变量,就像其他一些响应所示,但它显示了如何不需要通过$_REQUEST
请求signed_request
变量。
唯一需要记住的一件事是,只有在Facebook内运行访问signed_request
的PHP脚本时,signed_request
才可用。如果您在Facebook之外运行此脚本,尝试使用Facebook API,则会返回一个空数组。
以下是一个示例 - 当您访问此地址时,以下脚本将运行:https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx,其中“xxxxxxxxxxxxxxxx”是应用程序ID。
// Check if the user has liked us on Facebook, require the Facebook SDK
require_once('linked/facebook/facebook.php');
// Setup the Config
$config = array(
'appId' => 'xxxxxxxxxxxxxxxxx',
'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
'cookie' => true
);
// Create a Facebook SDK instance
$facebook = new Facebook($config);
// Get the signed_request variable that we so desparately need
$signed_request = $facebook->getSignedRequest();
$like_status = $signed_request["page"]["liked"];
// Make sure that it worked
if (!empty($signed_request))
{
// Get the signed_request information
if ($like_status == 1)
{
// Wo0t! Show the FB fan only page stuff here
}
else
{
// Show the 'Please like us page'
$page = file_get_contents('pages/facebookLikeUs.html');
// Finish the page
echo $page;
exit();
} // End if ($like_status == 1) ELSE Clause and IF
} // End if (!empty($signed_request)) IF Clause
else
{
// Damn, it didn't work. Show an error
}
facebookLikeUs.html
页面只是一个要求用户点击“赞”以继续的页面。如果我想让他们重定向回需要Facebook赞的网站,我只需将// Wo0t!
部分替换为类似于以下内容的内容:
// Wo0t! They're all set, establish some cookies, get a cookie, and redirect back to the PHD program site
setcookie('fbls', $signed_request['page']['id'] . '-' . $signed_request['user_id'], time() + 300);
$redirectURL = "http://www.myurl.com/theScriptIWantToReceiveTheUserFromFB.php";
// Since Facebook really wants to keep us in the page, we need to create a page that will automatically break out of FB
$page = file_get_contents('pages/facebookRedirectBack.html');
// Replace some stuff
$page = str_replace('$redirectURL', $redirectURL, $page);
// Output the page
echo $page;
exit();
有了facebookRedirectBack.html
页面:
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.top.location.href = '$redirectURL';
</script>
</body>
</html>
如果您想在此方面增加一些安全性,可以让重定向的 PHP 脚本编写一些 cookie 并将它们附加到 URL 上,以便接收脚本必须比较 cookie 和 URL 参数,然后在读取完毕后删除 cookie。
希望这可以帮助您,因为我个人没有找到关于这个主题的一致信息。