Старая тема, но хотел взвесить, так как недавно я многое узнал о том, как это сделать, и мне пришлось применять это на практике.
Посмотрите на эту ссылку: http://nickring.com/blog/2012/11/facebook-fan-gate-using-php/. Она использует переменную signed_request
, как показывают некоторые другие ответы, но показывает, что она не требует запроса переменной signed_request
через $_REQUEST
.
Единственное, что нужно помнить, это то, что signed_request
доступен только тогда, когда PHP-скрипт, обращающийся к signed_request
, запускается в Facebook. Если вы запускаете этот скрипт вне Facebook в скрипте, пытающемся использовать API Facebook, он вернет пустой массив.
Вот пример - следующий скрипт будет запускаться при переходе по этому адресу: https://www.facebook.com/yourFacebookPage/app_xxxxxxxxxxxxxxx с 'xxxxxxxxxxxxxxx' в качестве идентификатора приложения.
// 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
}
Вышеуказанный скрипт - это скрипт, который вызывается из URL-адреса, заданного в URL-адресе Canvas в разделе «Приложение на Facebook» в настройках приложения. Страница 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-скрипт перенаправления записывал некоторые куки-файлы и прикреплял их к URL-адресу, чтобы получающий скрипт сравнивал куки-файлы и параметры URL-адреса, а затем удалял куки-файлы. после того, как они были прочитаны.
Надеюсь, это поможет, так как лично я не нашел последовательной информации по этому вопросу.