복붙노트

페이 스북 그래프 API가 2.2에서 2.3으로 작동하지 않습니다.

PHP

페이 스북 그래프 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에는 생일 프로필이 포함되어 있습니다.

내 PHP 버전이 5.3이기 때문에 나는 facebook SDK 3.2.2를 사용한다. 내가 알지 못하는 업데이트가 있습니까? 감사.

해결법

  1. ==============================

    1.나는 그 문제를 스스로 발견했다. SDK 3.2.2 때문입니다. 페이스 북 업데이트 (API 버전 2.3 용 변경 내역) :

    나는 그 문제를 스스로 발견했다. SDK 3.2.2 때문입니다. 페이스 북 업데이트 (API 버전 2.3 용 변경 내역) :

    그러나 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
        );
      }
    
  2. from https://stackoverflow.com/questions/42994019/facebook-graph-api-not-work-from-2-2-to-2-3 by cc-by-sa and MIT license