【问题标题】:Facebook API OAuthException: “An unexpected error has occurred. Please retry your request later” when trying to retrieve a Page-specific access tokenFacebook API OAuthException:“发生意外错误。请稍后重试您的请求”在尝试检索特定于页面的访问令牌时
【发布时间】:2021-11-01 19:15:26
【问题描述】:

我希望我的应用能够将状态更新发布到特定主页。我已经设置了一个应用程序并检索了它的应用程序 ID,并且我正在关注 Facebook 身份验证文档底部的“页面登录”部分here

第一阶段(用户授予应用程序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"
    }
}

我做错了什么?我在创建应用程序时是否设置错误?该错误消息没有多大帮助,因此非常感谢您提供任何帮助。

【问题讨论】:

  • '意外错误' = 服务器端错误;您拥有的访问令牌是否适用于其他呼叫? (例如 /me/permissions)此外,您可以通过对 /PAGE_ID?fields=access_token 的请求来检索页面访问令牌
  • 不,该键似乎也不适用于其他呼叫 - 我尝试了 /me/permissions 并得到了同样的错误。如果我访问https://graph.facebook.com/MYPAGEID?fields=access_token,我只会得到false 的返回。没有 JSON,只有false。我想那是正确的网址?我试图查找它,但由于服务器错误,Facebook 的 API docs 目前不可用...
  • developers.facebook.com/status/dashboard 当前显示“我们目前遇到的问题可能会导致某些 API 请求花费更长的时间或意外失败。我们正在调查该问题并努力解决。”

标签: api authentication facebook-graph-api oauth


【解决方案1】:

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

【讨论】:

  • 好吧,随机投票者,就是这样。你想让我写什么?
  • 啊,很好的回应。此外,我有 15 个应用程序以管理员身份合法监控 15 个 FB 页面。我们每小时抓取一次数据,然后根据主题标签处理帖子和 cmets。它已经运行了大约2个月。每隔几天,其中一个应用程序就会出现此错误。下次运行时(通过计划任务),错误就消失了。一些严重的 FB api gremlins
  • 是的,我的(基本上没用的)答案有很多赞成票这一事实表明,其他几个人在 Facebook API 中遇到了这些奇怪的、间歇性的问题......
【解决方案2】:

我想我可以对此进行更多说明。

我在请求页面特定访问令牌时经常收到此返回;此调用的失败似乎与访问令牌所针对的帐户管理的页面数量成正比,因此,如果您管理 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 服务器端错误的频率应该会大大降低。自从我转行以来,我认为我从未经历过失败,而且我经常打电话。

【讨论】:

  • 谢谢 — 我不认为这是问题所在,因为我的测试帐户只管理一个页面,但 +1 指出了一种仅检索特定页面令牌的方法。跨度>
  • 如何取回页面 ID 以插入到页面特定调用中?我知道这样做的唯一端点是帐户端点,当我点击帐户端点时,我遇到了与原始海报相同的错误。
【解决方案3】:

【讨论】:

  • 我得到同样的错误。另外,你为什么要传入expires_in 属性?确定这是 Facebook 在发布令牌时设置的只读参数吗?
【解决方案4】:

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

我在我的对象 URL 中做了一些“og”元标记更改(在这里谈论 Open Graph 对象),并且不知何故 facebook 给出了与主要问题中提到的相同的错误,因为它没有在刷新我的页面完全。然后,要从 facebook 端刷新这些,我只需要从 facebook debugger 调试我的对象 URL(“http”和“https”),瞧!

【讨论】:

    【解决方案5】:

    这是错误code 2。只需几秒钟后重试。在 Laraval 中,您可以像这样使用 retry() 辅助函数:

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

    这将以 3 秒的间隔重试 3 次。如果第三次失败,它会抛出。

    【讨论】:

      【解决方案6】:

      这可能会解决您的问题。

      它很快解决了我的问题。

      所以,我尝试从这个端点访问这个 Instagram Basic Display API(它也可以在 Facebook/Instagram Graph 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多