Isu Keserasian Facebook Graph API v2.3
Memandangkan tarikh akhir hayat untuk Graph API v2.2 menghampiri, pembangun akan digalakkan untuk menaik taraf kepada v2.3. Walau bagaimanapun, ramai yang menghadapi isu yang tidak dijangka semasa membuat suis.
Tiada Respons API
Permintaan seperti berikut, digunakan untuk mengambil data album, tidak lagi mengembalikan sebarang hasil :
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}
Kehilangan Profil Pengguna Maklumat
Panggilan ke titik akhir pengguna tidak lagi menyertakan medan "hari jadi":
https://graph.facebook.com/v2.3/{$user_id}
Penyelesaian
Punca punca isu ini terletak pada Facebook SDK versi 3.2.2, yang serasi dengan PHP versi 5.3. Perubahan ketara dalam format Token Akses OAuth v2.3 memerlukan SDK untuk menghuraikan respons sebagai JSON, bukannya format yang dikodkan URL yang digunakan dalam versi terdahulu.
Kemas Kini Kod SDK
Untuk menangani isu ini, kemas kini fungsi getAccessTokenFromCode dalam SDK untuk menghuraikan respons sebagai JSON:
$response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } return $response->access_token;
Perubahan Tambahan
Selain itu, perubahan serupa perlu dibuat pada fungsi setExtendedAccessToken() untuk memastikan sambungan token yang betul dan mengelakkan potensi isu dengan pendek -token hidup. Kod yang dikemas kini adalah seperti berikut:
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 ); }
Dengan melaksanakan perubahan ini, pembangun boleh memastikan apl mereka terus berfungsi seperti yang diharapkan di bawah Facebook Graph API v2.3.
Atas ialah kandungan terperinci Mengapakah Peningkatan Facebook Graph API v2.3 Menyebabkan Isu Keserasian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!