栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Facebook图形API从2.2到2.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_depre($access_token_response);if (!isset($response->access_token)) {  return false;}return $response->access_token;

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


此外,您必须对进行类似的更改

setExtendedAccessToken()
。否则,您的应用将无法扩展访问令牌。下面的代码演示了如何升级功能。

    public function setExtendedAccessToken() {    try {      // need to circumvent json_depre 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_depre($access_token_response);    if (!isset($response->access_token)) {      return false;    }    $this->destroySession();    $this->setPersistentData(      'access_token', $response->access_token    );  }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号