Проблемы с getAccessToken() в SDK Facebook

У меня возникли проблемы с SDK facebook, в частности, с получением токена доступа. Приложение настроено на Facebook правильно и получило разрешение. Насколько я могу судить, код правильный, и я не уверен, что происходит с getAccessToken().

$facebook->getAccessToken(); возвращает "12345678|abcdefghijklmnop", в основном некую переменную, которая состоит из идентификатора приложения и секретного идентификатора, разделенных символом |

$facebook->getUser(); возвращает '0'

<?php
     require_once("facebook.php"); //Up-to-date SDK files from Git

     $app_id = "12345678"; //replaced with fake
     $app_secret = "abcdefghijklmnop"; //replaced with fake

     $facebook = new Facebook(array(
         'appId' => $app_id,
         'secret' => $app_secret,
         'cookie' => true; //I have tried 'false' here as well
     ));

     $token = $facebook->getAccessToken();
?>

Заранее спасибо!


person Adrian Payne    schedule 28.07.2012    source источник


Ответы (2)


Из SDK Facebook:

  public function getAccessToken() {
    if ($this->accessToken !== null) {
      return $this->accessToken;
    }

    $this->setAccessToken($this->getApplicationAccessToken());
    $user_access_token = $this->getUserAccessToken();
    if ($user_access_token) {
      $this->setAccessToken($user_access_token);
    }

    return $this->accessToken;
  }

  protected function getApplicationAccessToken() {
    return $this->appId.'|'.$this->appSecret;
  }

Ваш токен доступа будет APP ID|APP SECRET, который является токеном приложения, или A RANDOM TOKEN HERE, который является токеном доступа пользователя, когда у вас есть подписанный пользователь:

$facebook->getUser();

Когда getUser() возвращает 0 (то же самое, что и false, и пользователь не подписан), вам необходимо запросить логин и авторизацию (если вы еще не авторизовались) для вашего приложения:

if (!$facebook->getUser())
{
    $login_url = $facebook->getLoginUrl(array(
            'scope' => 'publish_stream' // Permissions goes here
        ) 
    );
?>
    <script type="text/javascript">
        top.location.href = " <?php echo $login_url; ?>";
    </script>
<?php
    exit;
}

см. доступные типы разрешений здесь: https://developers.facebook.com/docs/authentication/permissions/

person Gabriel Santos    schedule 28.07.2012
comment
Спасибо! Я узнал вещи! Я немного объясню, что я пытаюсь сделать. Я пытаюсь получить самую последнюю заметку из раздела «Заметки» на странице Facebook и отобразить ее на веб-сайте для всех, кто туда заходит. Должен ли каждый пользователь, который заходит на сторонний веб-сайт, иметь учетную запись Facebook и входить в нее, чтобы увидеть заметку? У меня все это работало в течение 30 секунд, а затем я, очевидно, что-то изменил, и оно перестало работать, но кнопка отмены не исправила это :) Я думаю, что именно тогда он также начал выдавать APP ID | APP SECRET вместо этого. Тогда я сделал оригинальный пост здесь. - person Adrian Payne; 29.07.2012
comment
Если Notes являются общедоступными, вам не требуется вход в систему. См.: developers.facebook.com/docs/reference/api/note. - person Gabriel Santos; 29.07.2012
comment
Нужно запросить у $facebook->api('IDOFPAGE/notes'); (не могу найти документацию по этому поводу, но, возможно, это правильный путь) - person Gabriel Santos; 29.07.2012
comment
Да, спасибо! Я предполагаю, что проблема в том, что страница Facebook еще не опубликована. Всегда учусь :) Хорошего дня! - person Adrian Payne; 29.07.2012
comment
Да, вам нужно, чтобы страница была опубликована. - person Gabriel Santos; 29.07.2012

$facebook->getAccessToken(); возвращает "12345678|abcdefghijklmnop", в основном некую переменную, которая состоит из идентификатора приложения и идентификатора секрета, разделенных символом |

person Agust Syaputra    schedule 29.01.2013