У меня есть приложение canvas (http://apps.facebook.com/myapp) и другие страницы (предприятия и т. Д.), Которые можно добавить на свою страницу. В моем приложении, как я могу узнать, с какой страницы меня звонят?
Я использую PHP-SDK
Как описано в разделе «Вкладка« Страница Facebook » :
Когда пользователь перейдет на страницу Facebook, они увидели, что вкладка «Страница» добавлена в следующую доступную позицию вкладки. В целом вкладка страницы загружается точно так же, как и на странице Canvas. Когда пользователь выбирает вкладку «Страница», вы получите параметр
signed_request
с одним дополнительным параметром,page
. Этот параметр содержит объект JSON с идентификатором (идентификатор страницы текущей страницы) , admin (если пользователь является администратором страницы) и понравился (если пользователю понравилась страница). Как и на странице Canvas, вы не получите всю информацию пользователя, доступную вашему приложению в signed_request, до тех пор, пока пользователь не разрешит ваше приложение.
Таким образом, одним из способов захвата идентификатора страницы будет:
<?php // PATH TO FB-PHP-SDK require '../../src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'APP_ID', 'secret' => 'APP_SECRET', 'cookie' => true, )); $signed_request = $facebook->getSignedRequest(); if( $page = $signed_request['page'] ) { echo $page['id']; } ?>
ИЛИ решение без PHP-SDK:
<?php if(!empty($_REQUEST["signed_request"])) { $app_secret = "APP_SECRET"; $data = parse_signed_request($_REQUEST["signed_request"], $app_secret); if (isset($data["page"])) { echo $data["page"]["id"]; } else { echo "Not in a page"; } } function parse_signed_request($signed_request, $secret) { list($encoded_sig, $payload) = explode('.', $signed_request, 2); // decode the data $sig = base64_url_decode($encoded_sig); $data = json_decode(base64_url_decode($payload), true); if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { error_log('Unknown algorithm. Expected HMAC-SHA256'); return null; } // check sig $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); if ($sig !== $expected_sig) { error_log('Bad Signed JSON signature!'); return null; } return $data; } function base64_url_decode($input) { return base64_decode(strtr($input, '-_', '+/')); }