Не получает подписанный запрос в iframe-приложении Facebook - PullRequest
1 голос
/ 08 февраля 2012

Я создал приложение 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, что приведет к потере подписанного запроса.

Ответы [ 2 ]

5 голосов
/ 16 апреля 2012

У меня просто была похожая проблема. В моем случае проблема заключалась в том, что в конфигурации приложения я не ставил косую черту в конце URL-адреса вкладки, которая ссылалась на каталог (с index.php в нем). Поэтому я получил перенаправление на тот же URL с косой чертой в конце и потерял $ _POST таким образом.

2 голосов
/ 08 февраля 2012

signed_request никогда не передается через GET, но POST. $_REQUEST содержит данные в соответствии с конфигурацией в php.ini (request_order или variables_order)

Поскольку вы используете PHP-SDK, лучше использовать его для signed_request поиска:

$signed_request = $facebook->getSignedRequest();
$liked = $signed_request['page']['liked'];

Для приложений, запущенных на вкладке страницы, signed_request всегда передается, поэтому, если вы не получили его, убедитесь, что нет перенаправлений, пропускающих POST передаваемые данные.

...