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

由于它是图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

);

}

以上是 Facebook图形API从2.2到2.3不起作用 的全部内容, 来源链接: utcz.com/qa/404384.html

回到顶部