Я использую PHP Facebook SDK (v.3.1.1) для создания своего приложения Facebook.
В какой-то момент в моем потоке мне нужно, чтобы пользователь принял мое приложение. Я использую следующий код:
// Is there an error? Redirect to explain permissions page
if(!empty($_GET['error'])) {
$redirectUrl = APP_FACEBOOK_PAGE;
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
die();
}
// Prepare app
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => APP_SECRET,
'cookie'=> true
));
$facebookId = $facebook->getUser();
// Changed user?
if((!empty($_SESSION['facebookAuth']['facebookId']) && $_SESSION['facebookAuth'] ['facebookId'] != $facebookId)) {
$facebook->setAccessToken('');
$_SESSION['facebookAuth']['facebookId'] = $facebookId;
$redirectUrl = getRequestPermissionsUrl($facebook);
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
die();
}
// No access token? Re-acquire it!
if($facebook->getAccessToken() == '') {
$redirectUrl = getRequestPermissionsUrl($facebook);
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
die();
}
// Let's see if we have an active session
if(!empty($_SESSION['facebookAuth']['facebookId']) && !empty($_SESSION['facebookAuth'] ['facebookUserObject'])){
$facebookId = $_SESSION['facebookAuth']['facebookId'];
$facebookUserObject = $_SESSION['facebookAuth']['facebookUserObject'];
}else{
$facebookId = $facebook->getUser();
if ($facebookId) {
try {
$facebookUserObject = $facebook->api('/me');
// Put them in session so we can re-use them
$_SESSION['facebookAuth']['facebookId'] = $facebookId;
$_SESSION['facebookAuth']['facebookUserObject'] = $facebookUserObject;
} catch (FacebookApiException $e) {
error_log($e);
}
}
}
// If no facebookId -> check permissions anyway
if(empty($facebookId)) {
$redirectUrl = getRequestPermissionsUrl($facebook);
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php');
die();
}
Моя функция 'getRequestPermissionsUrl' вызывает getLoginUrl:
return $redirectUrl = $facebookObject->getLoginUrl(array('canvas'=>1,'fbconnect'=>0,'redirect_uri'=>$returnUrl,'scope'=>'publish_stream,email,user_likes'));
файл 'do_redirect.inc.php' выполняет js-перенаправление:
top.location.href = '$redirectUrl';
Итак, имея в виду, давайте посмотрим на первую часть.
Этот код снова включается после того, как пользователь отказал в разрешении и страница перезагрузилась. В этом случае $ _GET ['error'] заполняется, и мы будем перенаправлены в другой php-файл в приложении - файл, который не содержит код, который я опубликовал, но не имеет никакого отношения к разрешениям или тому подобному. В этом другом файле есть ссылка на страницу, которая снова нуждается в разрешении - приведенный выше код снова загружается, но при попытке запросить разрешения у меня появляется ошибка «что-то пошло не так, и мы пытаемся это исправить» на странице Facebook .
Я пытался все время от уничтожения сессий до установки пустого маркера доступа в ... вы называете его. У меня совершенно нет идей, поэтому я был бы рад, если у кого-нибудь из вас есть какие-либо предложения. Любая помощь будет принята с благодарностью.
Заранее спасибо!