Я пытаюсь добавить этот скрипт в мое приложение iframe на facebook, но он, похоже, не работает:
$signed_request = $facebook->getSignedRequest(); $like_status = $signed_request["page"]["liked"]; // If a fan is on your page if ($like_status) { echo 123; } else { // If a non-fan is on your page echo 456; }
Я размещаю правильный идентификатор приложения и секретный ключ, а я вызываю facebook.php правильным способом. Я не получаю никаких ошибок или предупреждений, просто скрипт не работает.
$like_status
ничего не возвращает
изменился ли сценарий? есть ли другая версия? благодаря
редактировать. больше кода:
<?php require 'facebook.php'; $app_id = "11549508592"; $app_secret = "d898cb58b16f2aaaaaaaaaaaaaa"; $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); $signed_request = $facebook->getSignedRequest(); $like_status = $signed_request["page"]["liked"]; echo "<br>like status = $like_status"; ?>
Facebook отправляет подписанный запрос на вашу страницу, когда он вызывается из facebook.
Так:
$signed_request = $_REQUEST["signed_request"]; list($encoded_sig, $payload) = explode('.', $signed_request, 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
Некоторое время назад у меня была схожая проблема – решение заключалось в том, чтобы указать полный URL-адрес страницы вкладок и / или холста для получения подписанного запроса.
Пример: используйте http://myapp.com/myapp/index.php , isntead of http://myapp.com/myapp/
$_REQUEST['signed_request']
может быть пустым, если ваш URL-адрес холста (или страницы) не является окончательным и перенаправляется на какой-либо другой URL-адрес, потому что Facebook отправляет подписанный запрос только один раз. При перенаправлении потерянное значение теряется.
Если у вас есть некоторый контроль над перенаправлением, добавьте ?signed_request=$_REQUEST['signed_request']
к перенаправленному URL-адресу (вам также может потребоваться передать другие настраиваемые параметры GET)
Не уверен, что здесь неправильно, но вот базовая страница, над которой она будет работать. Убедитесь, что последняя версия facebook.php и base_facebook.php находится в одном каталоге. Вы можете найти здесь sdk: https://github.com/facebook/php-sdk. Помните, что вы должны добавить в свой идентификатор и секрет вашего приложения, где вы все 111111111111111
<?php require 'facebook.php'; $app_id ="11111111111111111"; $app_secret = "11111111111111111111111111"; $facebook = new facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); $signed_request = $facebook->getSignedRequest(); $page_id = $signed_request["page"]["id"]; $page_admin = $signed_request["page"]["admin"]; $like_status = $signed_request["page"]["liked"]; $country = $signed_request["user"]["country"]; $locale = $signed_request["user"]["locale"]; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>untiteled</title> <script type="text/javascript"> window.fbAsyncInit = function() { FB.Canvas.setSize(); } </script> </head> <body> <div class="wrapper"> <?php if(!$like_status):?> <div class="likearrow"><div><div></div></div></div> <p id="like">Click "<b>like</b>" if you want to become a fan of this app</p> <?php endif; ?> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <script src="http://connect.facebook.net/en_US/all.js"></script> <script> FB.init({ appId: '111111111111111111111', status: true, cookie: true, xfbml: true }); </script> </body>
К сожалению, у меня была такая же проблема. После нескольких часов и часов, пытаясь его решить, я, наконец, создал новое приложение с точно такой же настройкой. Я обновил ключ и секрет в своем коде для новых, а voilà – его запуск, как прелесть с первой попытки.
Определенно проблема Facebook. Возможно, сбрасывание идентификатора приложения и секретности также могло сработать, но я не пробовал это первым.