Да, вы неправильно это поняли.
Вы должны следовать учебному пособию Аутентификация , оно описывает все шаги:
Еслипользователь не аутентифицирован, вы отправляете его в диалог авторизации через скрипт js, как вы написали.
Facebook перенаправляет обратно на вашу страницу, а не в iframe, это перенаправление на главнуюwindow.
Если пользователь отклонил приложение, у вас в данных GET появятся слова «error», «error_reason» и «error_description», помните, что вы не находитесь в Facebook в данный момент.
Если пользователь предоставил ваше приложение, перенаправляется на вашу страницу (в главном окне), затем вам следует обменяться кодом с активным токеном доступа, а затем перенаправить пользователя на свой фбapp ( http (s): //apps.facebook.com/YOUR-APP-NAME).
Когда загружается Facebook, он загружает ваше приложение внутриiframe, тогда вы получите подписанный запрос и сможете показать свою страницу холста.
Вот модифицированная версия вашего php-кода, часть его псевдо-, так как я не большой программист php.
<?php
include ('src/facebook.php');
$app_id = "******";
$app_secret = "******";
if (access_token in session) {
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
$id = $data["user_id"];
$oauth_token = $data["oauth_token"];
$like_status = $data["page"]["liked"];
echo "<br>page id = $id";
echo "<br>like status = $like_status";
echo "<br>country = $oauth_token";
} else if (error in get_data) {
// user hasn't authorized your app
} else if (code in get_data) {
$authorized_code = $_GET["code"];
$authenticate_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . $redirect_uri . "&client_secret=" . $app_secret . "&code=" . $authorized_code . "";
$response = @file_get_contents($authenticate_url);
$params = null;
parse_str($response, $params);
$access_token = $params['access_token'];
$_SESSION['access_token'] = $access_token;
header('Location: http://apps.facebook.com/APP_NAME');
} else {
$redirect_uri = "http://myweb.com/myapp/landhere.php";
echo "string";
$_SESSION['state'] = md5(uniqid(rand(), TRUE));
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . $redirect_uri . "&state=" . $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
?>
Это не проверено или что-то еще, это просто чтобы дать вамтолчок в правильном направлении.Надеюсь, это поможет.
Редактировать
Модифицированная версия вашего второго кода:
list($encoded_sig, $payload) = explode('.', $_REQUEST["signed_request"], 2);
$signed_request = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
$access_token = null;
if (!empty($_SESSION['access_token'])) {
$access_token = $_SESSION['access_token'];
} else if (!empty($signed_request['oauth_token'])) {
$access_token = $signed_request['oauth_token'];
}
if ($access_token != null) {
$id = $access_token["user_id"];
$authorized_code = $_GET["code"];
$oauth_token = $access_token["oauth_token"];
$like_status = $access_token["page"]["liked"];
echo "<br>page id = $id";
echo "<br>page admin = $authorized_code";
echo "<br>like status = $like_status";
echo "<br>country = $oauth_token";
if ($data["page"]["liked"]) {
echo "<form method=\"post\" action=\"start.php\" id=\"landhereForm\">";
echo "<input type=\"text\" name=\"user_id\" value=" . $id . " style=\"display: none\">";
echo "<input type=\"text\" name=\"oauth_token\" value=" . $access_token . " style=\"display: none\">";
echo "</form>";
echo "<script>document.forms['landhereForm'].submit()</script>";
} else {
echo "<div class=\"likepage\">";
echo("<b class=\"welcome\"></b><br/>");
echo "</div>";
}
} else if (!empty($_GET["error"])) {
echo "user hasn't authorized your app";
}else if (!empty($_GET["code"])) {
$authorized_code = $_GET["code"];
$authenticate_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . $redirect_uri . "&client_secret=" . $app_secret . "&code=" . $authorized_code . "";
$response = @file_get_contents($authenticate_url);
$params = null;
parse_str($response, $params);
$access_token = $params['access_token'];
$_SESSION['access_token'] = $access_token;
//header('Location: http://apps.facebook.com/myapp');
header('Location: http://www.facebook.com/mypage/app_***********');
} else {
echo "string";
echo "<br>page id = $id";
echo "<br>page admin = $authorized_code";
echo "<br>like status = $like_status";
echo "<br>country = $oauth_token";
$_SESSION['state'] = md5(uniqid(rand(), TRUE));
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . $redirect_uri . "&state=" . $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
//echo("<script> window.top.location='" . $dialog_url . "'</script>");
}