Facebook PHP SDK генерирует неперехватываемое исключение OAuthException

Я пытаюсь опубликовать действие открытого графа в Facebook Graph API, но получаю исключение OAuth (#3501) User is already associated to the . Это все хорошо, я ожидаю, что Facebook выдаст это исключение. Я получаю некоторые другие исключения, касающиеся аутентификации пользователя (, возможно, со старыми/устаревшими сеансами, что угодно ).

Мой вопрос: сталкивался ли кто-нибудь с тем, что это исключение невозможно перехватить в php? В этом конкретном примере (размещения графических действий )я полностью оборачиваю вызов API в оператор try/catch; но я все еще получаю фатальную ошибку.

fb->api('/me/app:action', 'POST', array(
        'object' => 'http://www.domain.com/path/to/graph/object',
    ));
}
catch (Exception $e)
{
    /*
        We may get here if the user has already posted this action before...
        or if our session somehow went sour
        or bc facebook is down...
        or one of any other 1000 reasons the graph api is currently 
        sucking...

        in any case it doesn't much matter, this is not a mission critical 
        thing to worry about; if we don't post the graph action - we don't
        post the graph action..nbd.
    */
}

Вышеприведенный код представляет собой обобщенный фрагмент, который публикует действие графа (, поскольку его содержание не важно для этого примера ).

Я понимаю, что исключение, которое создает Facebook PHP SDK, является FacebookApiException, но этот класс расширяет исключение. Я не могу понять, почему, во имя всего логического, я не могу поймать свое исключение вот так.

Кто-нибудь сталкивался с этой проблемой? Это ошибка в FB PHP SDK? Я пропустил что-то еще здесь? Спасибо за вашу помощь!

Кроме того, для справки, соответствующие части FB PHP SDK находятся здесь:

FacebookAPIException Definition (base _facebook.php строка 30)

Throwing OAuthException (base _facebook.php строка 1105

Редактировать 01.05.12

После дальнейшего расследования выясняется, что это «Исключение» на самом деле вовсе не рассматривается как исключение. Типичные исключения распечатывают трассировку стека до вызова метода, который привел к возникновению исключения. Эти «исключения OAuthException» не работают. Кроме того, типичные исключения выводят свою строку ошибки немного по-другому, например:

PHP Fatal error:  Uncaught exception 'Exception' with message 'foo' /path/to/file.php:10

или

PHP Fatal error:  Uncaught exception 'MyException' with message 'stupid php' /path/to/file:10
#0 /path/to/file.php(17): doTest()
#1 {main}
    thrown in /path/to/file.php on line 10

. В этом конкретном случаемы не получаем ничего из этого, и это больше похоже на типичную фатальную ошибку.:

PHP Fatal error:  Uncaught OAuthException: (#3501) User is already associated \
to the  object on a unique action type . Original Action ID: \
123123123
    thrown in /path/to/app/libs/fb/base_facebook.php on line 1107, \
    referer: http://www.domain.com/path/to/page

Я не могу понять, почему это заброшенное «Исключение» такое странное/неуловимое.

Решение:

Я нашел ответ на свой вопрос; Я добавил это ниже -, это ошибка разработчика, а не ошибка. Ответ ниже.

Кроме того, это вполне может быть частью ошибки, если вы хотите сказать, что возможность ссылаться на определение класса как на тип -указывает на определение catch, которое не не существует (или не был доступен в текущем пространстве имен )— это ошибка.

6
задан Jim Rubenstein 1 May 2012 в 20:04
поделиться