Facebook access_token не активен, после повторной попытки становится активным - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть приложение facebook canvas, и я использую последнюю версию PHP SDK.

У меня есть рабочий процесс, который выглядит следующим образом.Пользователь входит в Facebook и нажимает на приложение из своего списка приложений.

Пользователь попадает на страницу формы -> нажимает на отправку -> пользователь не видит, что проходит страницу обработки формы и пытается опубликоватьна стену -> заголовок перенаправить на страницу приглашения.

Поток работает, потому что я встроил прозрачную обработку ошибок.Тем не менее, во время этой первой прогулки по потоку нет настенного столба.Повторите, нажав на значок Facebook, чтобы перейти на домашнюю страницу пользователя, нажмите на ссылку приложения в списке пользовательских приложений.

Пользователь попадает на страницу формы -> нажимает кнопку отправки -> пользователь не видит, что этопроходит страницу обработки формы и пытается отправить сообщение на стену -> перенаправление заголовка на страницу приглашения.

На этот раз и каждый раз после того, как это работает.

Ошибка, которую я получаю при первой попытке, состоит в том, что сессия access_token недействительна.Каждый раз после этого, пока пользователь не выйдет из системы, он будет работать, и я никогда не получу плохой токен.

НА СТРАНИЦЕ ПРОЦЕССА ФОРМЫ, ГДЕ КОД СТОЛБА:

$user = null;
require "/usr/home/app/www/fb/facebook.php";

//facebook application
$fbconfig['appid' ]     = "xxx";
$fbconfig['secret']     = "xxx";
$fbconfig['baseUrl']    =   "http://www.app.com/fb";
$fbconfig['appBaseUrl'] =   "http://apps.facebook.com/app";

// Create our Application instance.
$facebook = new Facebook(array(
  'appId'  => $fbconfig['appid'],
  'secret' => $fbconfig['secret'],
));

//session_write_close();
$user = $facebook->getUser();

    try {
        $publishStream = $facebook->api("/me/feed", 'post', array(
            'message' => "mess", 
            'link'    => 'http://apps.facebook.com/app',
            'picture' => 'http://images.app.com/img.jpg',
            'name'    => 'name',
            'description'=> 'des'
          )
        );
    } catch (FacebookApiException $e) {
        d($e);
    }
    header("Location: https://www.app.com/fb/invite.php");

Это точная ошибка, усеченная для исключения ошибочной информации:

FacebookApiException Object
(
    [result:protected] => Array
        (
            [error] => Array
                (
                    [message] => An active access token must be used to query information about the current user.
                    [type] => OAuthException
                )

        )
....

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Итак, после того, как в течение недели стучал головой о стену ... Я понял это! Я добавил скрипт в конце первой страницы для сброса прокрутки.

<script>
   FB.init({
     appId : 'appid',
     status : true,
     cookie : true,
     xfbml : true, 
   });
</script>

На следующей странице была обработка, которая работала некорректно, пока я не достиг следующей страницы, где должен был появиться экран приглашения. На этой странице был FB.init,

function callAppReq() {
   FB.init({
   appId  : 'appid',
   cookie: true,
   channelUrl : 'https://apps.facebook.com/app',
   oauth : true
});

После загрузки этой страницы каждый раз после этого приложение работало корректно. Я чесал голову и не мог понять это. Пока я не заметил, «oauth: true» было единственной вещью, которая НЕ была вызвана на первой странице. Итак, в этом тупом скрипте, который мне нужен, чтобы убрать полосу прокрутки, я добавил ": oauth: true" ...

<script>
  FB.init({
    appId : 'appid',
    status : true,
    cookie : true,
    xfbml : true,
    oauth : true 
  });
</script>

Вот и вот, теперь это работает. Я очень расстроен из-за того, что этот код нарушает работу, но ОЧЕНЬ рад, что теперь я его исправил и понимаю, в чем проблема !!!

0 голосов
/ 26 ноября 2011

Может быть, вы можете попробовать разрешение offline_access для получения маркера доступа без завершения?

...