2013-02-20 3 views
2

Я добавил приложение PHP/JavaScript как вкладку страницы Facebook, и я размещаю его на Heroku. Однако он не получает signed_request. Это происходит очень хорошо, когда я размещаю вкладку на своем собственном сервере, а не на Heroku.Facebook PHP приложение на Heroku не получает signed_request

Вот код:

require_once('sdk/src/facebook.php'); 

$facebook = new Facebook(array(
    'appId' => AppInfo::appID(), 
    'secret' => AppInfo::appSecret(), 
    'sharedSession' => true, 
    'trustForwarded' => true, 
    'cookie' => true 
)); 

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

if($liked) { 
    echo('fan'); 
} 
else { 
    echo('not a fan ') ; 
} 

Что может быть проблема?

ответ

3

У меня была та же проблема. Если вы используете шаблон PHP базы Heroku избавятся от этого кода, который следит за соблюдение протокола HTTPS на производстве:

// Enforce https on production 
if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
    header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
    exit(); 
} 

Когда пользователь не использует защищенное соединение, эта строка перенаправляет на другую страницу потере запросов POST ,

Вы можете попробовать и отправить signed_request с помощью метода GET, если хотите его сохранить. Это может выглядеть так:

// Enforce https on production 
    if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
     $signed_request = ""; 
     if (isset($_REQUEST['signed_request'])){ 
      $signed_request = "&signed_request=" . $_REQUEST['signed_request']; 
     } 
     header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "?" . $signed_request); 
     exit(); 
    } 

Это мое решение.

+0

Не могу поверить, что я провел последние 8 часов, пытаясь понять это. Ваш сэр, гений. Спасибо! –

Смежные вопросы