php फेसबुक ग्राफ एपी 2.2 से 2.3 तक काम नहीं करता है



facebook facebook-graph-api (1)

क्योंकि यह ग्राफ़ एपीआई 2.2 के लिए नियत तारीख है, मैं v2.3 का उपयोग करके अपने ग्राफ एपीआई को ठीक करने की कोशिश कर रहा हूं। लेकिन मुझे 2.3 का उपयोग करने पर सबसे ज्यादा एपीआई अनुरोध प्रतिक्रिया कुछ भी नहीं मिलती है, लेकिन मुझे इसके लिए अपग्रेड डॉक्यूमेंट में कोई अपडेट नहीं मिला। उदाहरण के लिए:

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 में, इसमें जन्मदिन प्रोफ़ाइल शामिल है।

मैं फेसबुक एसडीके 3.2.2 का उपयोग करता हूं क्योंकि मेरा php संस्करण 5.3 है। क्या कोई अपडेट है जो मुझे नहीं पता है? धन्यवाद।


मैंने स्वयं समस्या पाई है। इसकी वजह एसडीके 3.2.2 है। फ़ेसबुक अपडेट के लिए (एपीआई संस्करण 2.3 के लिए Changelog से):

[Oauth एक्सेस टोकन] प्रारूप - https://www.facebook.com/v2.3/oauth/access_token का प्रतिक्रिया स्वरूप जब आप एक access_token के लिए एक कोड का आदान-प्रदान करते हैं तो अब URL को एनकोड किए जाने के बजाय वैध JSON लौटाते हैं। इस प्रतिक्रिया का नया प्रारूप {"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'];

इससे यूज़र एक्सेस टोकन सही तरीके से नहीं मिलेगा, और आप उपयोगकर्ता का डेटा प्राप्त नहीं कर सकते। तो आपको इस फ़ंक्शन को डेटा के रूप में पार्स करने के लिए अद्यतन करना चाहिए:

$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://.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-graph-api