Facebook API OAuthException: 尝试检索特定页面访问令牌时出现“意外错误。请稍后重试”

11

我希望我的应用程序能够发布状态更新到特定的页面。我已经设置好了一个应用程序并获取了它的应用程序ID,并且我正在遵循Facebook身份验证文档底部的“页面登录”部分 在这里

第一阶段(用户授予应用程序“manage_page”权限)似乎完美地运行。我被重定向到以下URL:

http://myapp.com/#access_token=ACCESS_TOKEN&expires_in=6483

然后文档说您应该访问以下内容:

https://graph.facebook.com/me/accounts?access_token=TOKEN_FROM_ABOVE

TOKEN_FROM_ABOVE替换为上一个请求返回的令牌,这应该返回“用户管理的所有页面列表,包括每个页面的页面特定访问令牌”。

但是,它没有。我收到以下JSON响应:

{
    "error": {
        "message": "An unexpected error has occurred. Please retry your request later.",
        "type": "OAuthException"
    }
}

我做错了什么?在创建应用程序时,我可能设置了一些东西不正确吗?错误信息没有帮助,所以非常感谢任何帮助。


'Unexpected error' = 服务器端错误;您拥有的访问令牌是否适用于其他调用?(例如 /me/permissions) 此外,您可以通过向 /PAGE_ID?fields=access_token 发送请求来检索页面访问令牌。 - Igy
不,这个密钥似乎对其他调用也不起作用 - 我尝试了 /me/permissions 并得到了相同的错误。如果我访问 https://graph.facebook.com/MYPAGEID?fields=access_token,我只会得到 false 的返回值。没有 JSON,只有 false。我认为那是正确的 URL?我试图查找它,但由于服务器错误,Facebook 的 API 文档 目前无法使用... - Mark Bell
https://developers.facebook.com/status/dashboard/ 目前显示:“我们目前遇到问题,可能会导致某些API请求花费更长时间或意外失败。我们正在调查此问题并努力解决。” - Ryan
6个回答

36

今天早上突然开始工作了——不知道为什么。


41
好的,随机的点踩者,就是发生了这样的事情。你想要我写什么呢? - Mark Bell
4
啊哈,好的回复。作为管理员,我有15个应用程序合法地监控着15个Facebook页面。我们每小时抓取一次数据,然后根据标签处理帖子和评论。这个系统已经运行了约2个月。但是每隔几天,其中一个应用程序会出现错误。下次运行(通过计划任务)时,错误就消失了。看来是Facebook API出了些问题。 - Ben E G
是的,我的(基本上无用的)答案有很多赞,这表明其他人也遇到了Facebook API的这些奇怪、间歇性的问题... - Mark Bell

5
我认为我可以对此进行更详细的解释。
当请求特定页面访问令牌时,我经常收到此返回信息;这个调用失败似乎与管理该访问令牌的帐户所管理的页面数量成比例,因此如果您管理100个页面,则失败的概率会比管理1个页面更高,如果您管理5000个页面,失败的概率会更高。
这表明故障与响应大小有关,因为针对大量页面集返回的JSON可能非常冗长。
修复方法很简单。不要使用以下方式请求所有页面:
http://graph.facebook.com/me/accounts?access_token={admin access token}
而是使用以下方式:
http://graph.facebook.com/{page id}?fields=access_token&access_token={admin access token}
这将仅返回该页面的访问令牌。由于响应很小,您应该会更少地遇到Facebook服务器端错误。自从我切换后,我几乎没有遇到过故障,并且我经常进行调用。

谢谢,我不认为这是问题所在,因为我的测试账户只管理一个页面,但是感谢你指出了一种检索特定页面令牌的方法。 - Mark Bell
2
你如何获取页面ID以插入特定页面调用?我所知道的唯一端点是账户端点,但当我访问账户端点时,我遇到了与原帖作者相同的错误。 - mmrobins

1

1
我得到了相同的错误。另外,为什么要传递expires_in属性?这肯定是一个只读参数,在Facebook发放令牌时会设置它。 - Mark Bell

0

我同意 Mark 的观点,因为它突然开始了,当我在我的 Facebook 时间线上发布一些开放图谱操作和对象时,我遇到了这个错误,但我发现问题基本上是由 Facebook 维护的缓存引起的。

我在我的对象 URL 中进行了一些 "og" meta 标签更改(这里讨论的是 Open Graph 对象),不知何故,Facebook 给出了与主要问题中提到的相同的错误,因为在刷新我的页面时它没有采取变化。然后,为了从 Facebook 方面刷新这些内容,我只需要从 facebook debugger 调试我的对象 URL(包括 'http' 和 'https')就可以了!


0

这是错误 代码 2。请等待几秒钟后重试。在Laravel中,您可以使用retry()助手函数,如下所示:

try {
    $response = retry(3, function () use ($fb, $accessToken) {
        return $fb->get('/123123123/media?fields=id', $accessToken);
    }, 3000);
} catch (Exception $e) {
}

这将在3秒的间隔内重试3次。如果第3次失败,它将抛出异常。


0

这可能解决您的问题。

它快速解决了我的问题。

所以,我尝试从这个端点访问Instagram基本显示API(它也可以解决Facebook/Instagram图形API中的问题): https://graph.instagram.com/{user-id}?fields=id,username&access_token={access-token}

得到以下错误:

{
    "error": {
        "message": "An unexpected error has occurred. Please retry your request later.",
        "type": "OAuthException"
    }
}

很快我发现我使用的是我的Instagram ID,但我应该使用的是Facebook用户ID

这就是解决我的问题的方法,我使用了错误的用户ID

对于任何来自Instagram API的人,您可以从此链接获取有关您的用户的信息: https://www.instagram.com/{user-name}/?__a=1

在那里,您可以找到Facebook用户ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接