Problèmes de compatibilité de l'API Graph v2.3 de Facebook
À l'approche de la date de fin de vie de l'API Graph v2.2, les développeurs sont encouragé à passer à la version 2.3. Cependant, beaucoup ont rencontré des problèmes inattendus lors du changement.
Réponses API manquantes
Les requêtes telles que celles-ci, utilisées pour récupérer les données de l'album, ne renvoient plus aucun résultat. :
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}
Perte du profil utilisateur Informations
Les appels vers le point de terminaison de l'utilisateur n'incluent plus le champ « anniversaire » :
https://graph.facebook.com/v2.3/{$user_id}
Solution
La cause première de ces problèmes résident dans la version 3.2.2 du SDK Facebook, qui est compatible avec la version 5.3 de PHP. Un changement important dans le format du jeton d'accès OAuth de la version 2.3 nécessite que le SDK analyse la réponse au format JSON, au lieu du format codé en URL utilisé dans les versions précédentes.
Mise à jour du code du SDK
Pour résoudre ce problème, mettez à jour la fonction getAccessTokenFromCode dans le SDK pour analyser la réponse comme JSON :
$response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } return $response->access_token;
Modifications supplémentaires
De plus, des modifications similaires doivent être apportées à la fonction setExtendedAccessToken() pour garantir une extension appropriée du jeton et éviter des problèmes potentiels avec les courts-circuits. -jetons vécus. Le code mis à jour est le suivant :
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 ); }
En mettant en œuvre ces modifications, les développeurs peuvent garantir que leurs applications continuent de fonctionner comme prévu sous l'API Facebook Graph v2.3.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!