Как получить подписанный запрос от авторизации приложения на холсте в Facebook?
После того как пользователь авторизовал мое приложение, мне нужно проанализировать подписанный запрос, чтобы я мог получить доступ к его идентификатору пользователя и т. Д. Где в моем коде я размещаю URL-адрес страницы, которая его обрабатывает? Мне нужен пример кода. Я просмотрел документацию, и она не объясняет, как это сделать для приложения Canvas. Переменная redirectUrl имеет URL-адрес самого приложения canvas. Это должно содержать URL кода, который вместо этого анализирует подписанный запрос? Я не уверен.
<body>
<div id="fb-root"></div>
<script type="text/javascript">
$(document).ready(function(){
var appId = 278*****2040;
// If logging in as a Facebook canvas application use this URL.
var redirectUrl = "http://apps.facebook.com/MYAPP";
// If the user did not grant the app authorization go ahead and
// tell them that. Stop code execution.
if (0 <= window.location.href.indexOf ("error_reason"))
{
$('#authCancel').empty();
$(document.body).append ("<p>Authorization denied!</p>");
return;
}
// When the Facebook SDK script has finished loading init the
// SDK and then get the login status of the user. The status is
// reported in the handler.
window.fbAsyncInit = function(){
//debugger;
FB.init({
appId : 278****40,
status : true,
cookie : true,
oauth : true
});
// Sandbox Mode must be disabled in the application's settings
// otherwise the callback will never be invoked. Monitoring network
// traffic will show an error message in the response. Change the
// Sandbox Mode setting in: App Settings - Advanced - Authentication.
FB.getLoginStatus (onCheckLoginStatus);
};
// Loads the Facebook SDK script.
(function(d)
{
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
// Handles the response from getting the user's login status.
// If the user is logged in and the app is authorized go ahead
// and start running the application. If they are not logged in
// then redirect to the auth dialog.
function onCheckLoginStatus (response)
{
if (response.status != "connected")
{
top.location.href = "https://www.facebook.com/dialog/oauth?client_id=" + appId + "&redirect_uri=" + encodeURIComponent (redirectUrl) + "&scope=user_photos,friends_photos";
}
else
{
// Start the application (this is just demo code)!
$(document.body).append ("<p>Authorized!</p>");
FB.api('/me', function (response) {
$(document.body).append ("<pre>" + JSON.stringify (response, null, "\t") + "</pre>");
});
}
}
});
</script>
1 ответ
Решение
Вы можете определенно использовать URL страницы холста. На этой же странице вы можете поместить следующий код. Я сделал это и работает отлично.
if(isset($_REQUEST["code"]))
{
$code = $_REQUEST["code"];
$my_url = "https://apps.facebook.com/CANVAS_APP_URL/";
$token_url = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $token_url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output1 = curl_exec($ch);
curl_close($ch);
$tokenarray = explode("&", $output1);
$tokenarray1 = explode("=", $tokenarray[0]);
$access_token = $tokenarray1[1];
$urltoopen = 'https://graph.facebook.com/me?access_token=' . $access_token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urltoopen);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
}
Надеюсь это поможет!!
~ ABW