Ответ в комментариях, но на самом деле есть лучшие способы.
Во-первых, чтобы ответить на ваш вопрос напрямую, проблема в том, что «код» передан в fb-callback.phpне был передан в скрипт, который вызывает $helper->getAccessToken()
Документы для этой функции (в https://developers.facebook.com/docs/php/FacebookRedirectLoginHelper/5.0.0) состояния
Попытки получить токен доступа из авторизацииcode. Этот метод отправляет запрос API Graph и возвращает ответ. Если в этом процессе произошла ошибка, будет выдано исключение FacebookSDKE. Исключение FacebookSDKExx также будет выдано в случае сбоя проверки CSRF.
ЕслиВ параметре code в URL не может быть найден код авторизации, этот метод возвращает ноль.
Следует отметить еще два момента:
- «Состояние»(токен подделки сайтов) является частью сеанса, вам не нужно явно передавать его, если вы находитесь в одном домене, однако вам может потребоваться
session_start()
в login
и get-posts
scripts В функции getAccessToken
есть параметр, который должен быть URL-адресом ORIGINAL
Очень просто
- Добавить session_start () к сценарию входа иget-posts.php
- Измените fb-callback.php так, чтобы он был похож на
.
<?php
require_once("config.php");
$code = $_GET['code']; // warning: add validation code exists, sanitise etc.
?>
<html>
<head>
<script type='text/javascript' src='jquery.js'></script>
<script>
var $j = jQuery.noConflict();
$j(document).ready(function () {
$j.ajax({
type: "GET",
url: "get-posts.php?code=<?php echo $code; ?>",
cache: false,
success: function (html) {
setTimeout(function () {
$j('#updateDiv').html(html);
}, 1000);
}
});
});
</script>
</head>
<body>
<div id='updateDiv'><img src='spinning.gif' alt='processing...'></div>
</body>
</html>
(Примечание: я ненавижу встроенный PHP - этотолько для примера)
Тем не менее: то, что вы должны делать, это передавать токен доступа между функциями, а не код oAuth.То, как вы это сделали выше (передача кода oAuth), является одноразовым;однако вы можете позвонить get-posts
во второй / третий / четвертый раз, и это сработает, если у вас будет первый токен доступа.
1) Выполните обмен токенами в fb-callback.php вверху (это быстро, не нужно вращаться), возьмите токен (который библиотека FB хранит в переменной / cookie сеанса, или вы можете сделать это).Сделай сам), а затем покажи HTML-страницу со спиннером и вызовом AJAX.
2) Сделай обмен токенами в fb-callback.php вверху (это быстро, не нужно спиннер), возьми токен (какую библиотеку FB хранит в переменной / cookie сеанса, или вы можете сделать это самостоятельно), а затем быстро перенаправить на другую страницу, которая показывает счетчик и выполняет вызов AJAX.
Важное замечание, которое следует отметить в обоих случаях:вы передаете токен доступа;в get-posts.php
отметьте «есть ли у меня токен доступа; если нет - покажите кнопку входа; если да - позвоните в Facebook».