当前位置: 首页 > 面试题库 >

Facebook图形API从2.2到2.3不起作用

子车峰
2023-03-14
问题内容

由于它是图API
2.2的到期日,因此我尝试使用v2.3修复我的图API,但是当我使用2.3时,我发现大多数api请求响应都没有,但在升级文档中找不到对此的任何更新。例如:

https://graph.facebook.com/v2.3/{$user_id}?date_format=U&fields=albums.order(reverse_chronological).limit(100).offset(0){id,count,name,created_time}

如果我使用2.3,则不会返回任何内容。当我打电话时,我无法获得用户的生日:

https://graph.facebook.com/v2.3/{$user_id}

这只是返回名称和居住地点。但是在v2.2中,它包含生日资料。

我使用facebook SDK 3.2.2,因为我的php版本是5.3。有我不知道的更新吗?谢谢。


问题答案:

我自己发现了问题。这是因为SDK 3.2.2。对于Facebook更新来自API版本2.3的Changelog:

[Oauth访问令牌]格式- 当您为access_token交换代码时返回的响应格式现在返回有效JSON而不是URL编码。此响应的新格式为{“access_token”:{TOKEN},“ token_type”:{TYPE},“ expires_in”:{TIME}}。我们进行了此更新,以符合RFC 6749的5.1节。

但是SDK会将响应识别为数组(在getAccessTokenFromCode函数中):

$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params['access_token'])) {
  return false;
}
return $response_params['access_token'];

这将无法正确获取用户访问令牌,也无法获取用户数据。因此,您应该更新此函数以将数据解析为json:

$response = json_decode($access_token_response);
if (!isset($response->access_token)) {
  return false;
}
return $response->access_token;

然后,所有功能将照常工作。

此外,您必须对进行类似的更改setExtendedAccessToken()。否则,您的应用将无法扩展访问令牌。下面的代码演示了如何升级功能。

  /**
   * Extend an access token, while removing the short-lived token that might
   * have been generated via client-side flow. Thanks to http://bit.ly/ b0Pt0H
   * for the workaround.
   */
  public function setExtendedAccessToken() {
    try {
      // need to circumvent json_decode by calling _oauthRequest
      // directly, since response isn't JSON format.
      $access_token_response = $this->_oauthRequest(
        $this->getUrl('graph', '/oauth/access_token'),
        $params = array(
          'client_id' => $this->getAppId(),
          'client_secret' => $this->getAppSecret(),
          'grant_type' => 'fb_exchange_token',
          'fb_exchange_token' => $this->getAccessToken(),
        )
      );
    }
    catch (FacebookApiException $e) {
      // most likely that user very recently revoked authorization.
      // In any event, we don't have an access token, so say so.
      return false;
    }

    if (empty($access_token_response)) {
      return false;
    }

    //Version 2.2 and down (Deprecated).  For more info, see http://stackoverflow.com/a/43016312/114558
    // $response_params = array();
    // parse_str($access_token_response, $response_params);
    //
    // if (!isset($response_params['access_token'])) {
    //   return false;
    // }
    //
    // $this->destroySession();
    //
    // $this->setPersistentData(
    //   'access_token', $response_params['access_token']
    // );

    //Version 2.3 and up.
    $response = json_decode($access_token_response);
    if (!isset($response->access_token)) {
      return false;
    }

    $this->destroySession();

    $this->setPersistentData(
      'access_token', $response->access_token
    );
  }


 类似资料:
  • WARNING 本升级指南仅适用于 2.2 版本升级至 2.3 版本,如果你并非 2.2 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 2 小时 这是你自我操作的步骤,确认将你的 2.2 版本代码升级到 2.3 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up

  • 当我用PHP curl发送这个json数据到Facebook Messenger Bot api时,它工作正常。 $jsonData='{“收件人”:{“id”:“'.$sender.”“}”,消息:{“文本”:“'.$obj.”“}”; 但是,当我从FB页面使用模板。模板不起作用 我试图编码成Json,替换一个按钮,什么都没发生。Facebook模板在messenger更新后无法使用,或者我需要

  • 我试图在facebook messenger上共享音频文件。如下所述https://developers.facebook.com/docs/messenger/android#integration_with_intents在这里,它可以共享简单的文本而不是音频文件。当我尝试在messenger上发送音频时,应用程序崩溃。 这是意图共享代码字符串mimeType=“音频/aac”;

  • 我目前正在facebook上测试我的应用程序,试图访问我的账户地址。 在graph explorer中,它表示: 字段为空或被访问令牌禁止。 我检查了所有的访问权限,并在我的个人资料中输入了一个地址。 有什么建议吗? 电子邮件

  • 我有一个Facebook页面,我正在尝试上传一个已经托管在我的服务器上的视频。我需要通过javascript来做到这一点,我所拥有的只是视频的src链接(类似于 )。作为管理员,我拥有所有必需的权限()。 facebook api说我必须以的形式发送数据,这意味着视频内容。为了通过ajax实现这一点,我在stackoverflow上回答了这个问题,并学习了如何在jQuery中使用ajax请求发送F

  • 用消息或图像发布定期帖子对我来说很好,但没有视频 下面是我的代码: 视频和我的js运行文件在同一个文件夹里。