2012-03-08 3 views
0

У меня возникли некоторые странные проблемы с созданием iframe-приложения для Facebook. Приложение, похоже, застряло в бесконечном цикле на странице Go To App.Facebook PHP SDK 3.1.1 «Ошибка проверки доступа к токену» после перехода на страницу приложения

После того, как пользователь авторизует приложение на странице Go To App и возвращается в приложение, вызов/me api выдает исключение «Ошибка проверки подлинности доступа». Я проверил и есть действительный токен доступа в подписанном запросе (проверен с помощью средства отладки токена доступа к facebook). Я попытался установить это с помощью метода setAccessToken() безуспешно. Метод getUser() успешно возвращает идентификатор пользователя, но он все еще зависает по вызову/me api.

Этого не происходит в каждом браузере, я просто вижу его в Chrome иногда без четкого шаблона. Я исправил его в IE, используя заголовок P3P. Он отлично работает в Firefox.

Я довольно сильно застрял, и у меня нет волос, чтобы вырваться, поэтому любые идеи приветствуются. Большое спасибо.

Полное сообщение об ошибке: «Ошибка проверки токена доступа: вы не можете получить доступ к приложению до входа в систему на веб-сайт www.facebook.com и следовать приведенным инструкциям».

Некоторые приведенные ниже коды.

$this->_facebook = new Facebook(
    array(
     'appId' => $this->_config['appId'], 
     'secret' => $this->_config['secret'], 
     'cookie' => true, 
     'fileUpload' => true 
    ) 
); 

$this->_signedRequest = $this->_facebook->getSignedRequest(); 

// Doing something with signed request, not FB related 

$this->_userId = $this->_facebook->getUser(); 

if($this->_userId) { 
    try{ 
     // At this line the "Error validating access token" error shows up 
     $this->_user = $this->_facebook->api('/me'); 

     // Some more irrelevant code here 

    } catch (Exception $e){ 
     $this->_facebook->destroySession(); 
     $this->_facebookLogin(false); 
    } 
} else { 
    $this->_facebook->destroySession(); 
    $this->_facebookLogin(false); 
} 

// The _facebookLogin method 
public function _facebookLogin($perms = 'email,user_birthday,publish_stream,video_upload'){ 
    $data = array(
     'fbconnect' => 0, 
     'redirect_uri' => 'aredirecturl.com' 
    ); 

    if(!empty($perms)) { 
     $data['scope'] = $perms; 
    } 
    echo '<script type="text/javascript">window.top.location.href = "'.$this->_facebook->getLoginUrl($data).'";</script>'; 
    exit; 
} 
+0

Вы можете поместить свой полный код (например, в этом коде 'public function _facebookLogin' is wrong –

+0

Я столкнулся с той же проблемой, хром. @Cazacu Vlad, если вы нашли решение, пожалуйста, отправьте сюда спасибо –

ответ

0

Редактировать часть

// At this line the "Error validating access token" error shows up 
$this->_user = $this->_facebook->api('/me'); 

к этому

// At this line the "Error validating access token" error shows up 
$this->_user = $this->facebook->api('/me','GET'); 
+0

Спасибо за ответ, но этого не делал. Насколько я видел, GET является значением по умолчанию для вызовов графа, поэтому он уже использовал это. –

0

Что об уничтожении сеанса вручную? Вы отлаживали эти параметры?

unset($_SESSION['fb_'.$YOUR_API_KEY.'_code']); 
unset($_SESSION['fb_'.$YOUR_API_KEY.'_access_token']); 
unset($_SESSION['fb_'.$YOUR_API_KEY.'_user_id']); 
unset($_SESSION['fb_'.$YOUR_API_KEY.'_state']); 

Я почти используя один и тот же код, как вы, но я не использую fileUpload и печенья параметров.