Я создал приложение Facebook для вкладок страниц, в котором я хочу отображать различный контент в зависимости от того, является ли пользователь фанатом или нет. (Также называемый вентиляционными воротами, целевой страницей или открытой страницей)
Для этого я использую PHP SDK, в частности следующий код:
<?php
require 'src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
'cookie' => true,
));
?>
А в содержании:
<?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"])) {?>
Thank you for liking our Page!
<?php } else { ?>
You haven't liked our page yet..
<?php };
// Debugging Code
echo "REQUEST:<br>";
print_r($_REQUEST);
echo "<br>GET:<br>";
print_r($_GET);
echo "<br>POST:<br>";
print_r($_POST);
?>
Это работает, когда я вошел в систему с моим пользователем Facebook и когда я использую его на своей странице.
Значение подписанного запроса присутствует как в $ _POST, так и в $ _REQUEST.
Однако, когда я тестирую его с другим пользователем, в этих переменных нет значения Sign_request ..
Примечания:
- Я уже взглянул на свои настройки URL в конфигурации приложения (300 Redirect и прочее), но это выглядит хорошо, и, как я уже говорил с моим пользователем, он работает ..
- подписанный запрос не просто пустой, он даже не существует.
У кого-нибудь есть подобные проблемы?
Я бы не стал использовать Javascript SDK вместо PHP, если он работает тогда, но я не очень разбираюсь в Javascript.
EDIT:
Как я выяснил, у вас всегда должен быть небезопасный (http) и защищенный (https) URL.
Даже если вы введете безопасный URL-адрес в качестве стандартного URL-адреса, Facebook свяжется с ним по http и затем будет перенаправлен (в зависимости от конфигурации сервера) на https, что приведет к потере подписанного запроса.