我正在尝试向 Facebook Graph API 发布开放图形操作,但收到 OAuth Exception (#3501) User is already associated to the <object>
。这一切都很好,我希望 Facebook 会抛出这个异常。我在验证用户时遇到了一些其他例外情况(可能是旧的/陈旧的会话,无论如何)。
我的问题是,有没有其他人经历过这个异常在 php 中是无法捕获的?在这个特定示例(发布图形操作)中,我绝对将对 api 的调用包装在 try/catch 语句中;但我仍然收到致命错误。
<?php
try {
//publishing to open graph
$this->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 定义(base_facebook.php 第 30 行)
抛出 OAuthException(base_facebook.php 第 1105 行
2012 年 5 月 1 日编辑
经过一番调查,事实证明这个“异常”并没有真正被视为一个异常。典型异常打印出返回到导致抛出异常的方法调用的堆栈跟踪。这些“OAuthExceptions”没有。此外,典型的异常会以不同的方式输出它们的错误字符串,例如:
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> object on a unique action type <action>. 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
不存在(或在当前命名空间中不可用)的定义的类型提示是一个错误。