php - ejemplos - la gráfica de Facebook api no funciona de 2.2 a 2.3
facebook php login (1)
He encontrado el problema yo mismo. Es porque el SDK 3.2.2. Para la actualización de Facebook (desde Changelog para API versión 2.3):
Formato [Oauth Access Token]: el formato de respuesta de https://www.facebook.com/v2.3/oauth/access_token devuelto cuando intercambia un código por un access_token ahora devuelve JSON válido en lugar de estar codificado en URL. El nuevo formato de esta respuesta es {"access_token": {TOKEN}, "token_type": {TYPE}, "expires_in": {TIME}}. Realizamos esta actualización para cumplir con la sección 5.1 de RFC 6749.
Pero SDK reconoce la respuesta como una matriz (en la función getAccessTokenFromCode):
$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params[''access_token''])) {
return false;
}
return $response_params[''access_token''];
Esto no obtendrá el token de acceso del usuario correctamente, y no puede obtener los datos del usuario. Por lo tanto, debe actualizar esta función para analizar datos como json:
$response = json_decode($access_token_response);
if (!isset($response->access_token)) {
return false;
}
return $response->access_token;
Entonces, toda la función funcionará como siempre.
Además, debe realizar cambios similares en
setExtendedAccessToken()
.
De lo contrario, su aplicación no podrá extender tokens de acceso.
El siguiente código muestra cómo actualizar la función.
/**
* 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
);
}
Debido a que es la fecha de vencimiento para la API 2.2 gráfica, estoy tratando de arreglar mi API gráfica usando la v2.3. Pero descubro que la mayoría de las respuestas de solicitud de API no son nada cuando uso la 2.3, pero no puedo encontrar ninguna actualización para esto en el documento de actualización. Por ejemplo:
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}
no devolverá nada si uso 2.3. Y no puedo recibir el cumpleaños del usuario cuando llamo:
https://graph.facebook.com/v2.3/{$user_id}
Es solo el nombre de retorno y la ubicación en vivo. Pero en v2.2, incluye perfil de cumpleaños.
Uso facebook SDK 3.2.2 porque mi versión php es 5.3. ¿Hay alguna actualización que no conozco? Gracias.