Facebook Graph API v2.3 兼容性问题
随着 Graph API v2.2 生命周期结束日期的临近,开发人员鼓励升级到 v2.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}
用户个人资料丢失信息
对用户端点的调用不再包含“生日”字段:
https://graph.facebook.com/v2.3/{$user_id}
解决方案
根本原因这些问题出在 Facebook SDK 版本 3.2.2 上,该版本与 PHP 版本 5.3 兼容。 v2.3 的 OAuth 访问令牌格式发生重大变化,要求 SDK 将响应解析为 JSON,而不是早期版本中使用的 URL 编码格式。
SDK 代码更新
要解决此问题,请更新 SDK 中的 getAccessTokenFromCode 函数,将响应解析为JSON:
$response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } return $response->access_token;
其他更改
此外,需要对 setExtendedAccessToken() 函数进行类似的更改,以确保正确的令牌扩展并避免短的潜在问题- 活着的代币。更新后的代码如下:
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.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 ); }
通过实施这些更改,开发人员可以确保他们的应用程序在 Facebook Graph API v2.3 下继续按预期运行。
以上是为什么 Facebook Graph API v2.3 升级会导致兼容性问题?的详细内容。更多信息请关注PHP中文网其他相关文章!