Facebook Graph API v2.3 相容性問題
隨著Graph API v2.2 生命週期結束日期的臨近,開發人員鼓勵升級到v2.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}
使用者個人資料遺失資訊
對使用者端點的呼叫不再包含「生日」欄位:
https://graph.facebook.com/v2.3/{$user_id}
解決方案
根本原因這些問題出在Facebook SDK 版本 3.2.2 上,該版本與 PHP 版本 5.3 相容。 v2.3 的 OAuth 存取權杖格式發生重大變化,要求 SDK 將回應解析為 JSON,而不是早期版本中使用的 URL 編碼格式。
SDK 程式碼更新
要解決此問題,請更新 SDK 中的 getAccessTokenFromCode函數,將回應解析為JSON:
$response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } return $response->access_token;
其他更改
此外,需要對setExtendedAccessToken() 函數進行類似的更改,以確保正確的令牌擴展並避免短的潛在問題- 活著的代幣。更新後的程式碼如下:
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 ); }
透過實作這些更改,開發人員可以確保他們的應用程式在 Facebook Graph API v2.3 下繼續按預期運行。
以上是為什麼 Facebook Graph API v2.3 升級會導致相容性問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!