php - event - jquery google calendar api
Autenticación en google: OAuth2 sigue devolviendo ''invalid_grant'' (6)
- Ir a security.google.com
- Revocar el acceso
- Visita la url de autenticación de nuevo
- ahora obtendrás una nueva actualización
Comencé a configurar google calendar en mi nueva aplicación. Casi hice una copia exacta del código de autenticación que se muestra en los desarrolladores de google ( https://developers.google.com/google-apps/calendar/instantiate ), pero sigo recibiendo el siguiente error:
Error al obtener el token de acceso OAuth2, mensaje: ''invalid_grant''
Actualmente estoy usando Fork-CMS ( http://www.fork-cms.com ), un CMS de peso ligero joven. Configuré correctamente el archivo config.php del google-api-php-client. (ID de cliente, secreto de cliente, redireccionamiento de uri, clave de desarrollo, ...) y el uri de redireccionamiento está configurado correctamente en la consola de la API de Google. Mi código es el siguiente:
<?php
/**
* This is a widget with a calendar implementation.
*
* @package frontend
* @subpackage events
*
* @author Michiel Vlaminck <[email protected]>
*/
class FrontendEventsWidgetCalendar extends FrontendBaseWidget
{
private $events = array();
private $authUrl = array();
/**
* Execute the extra
*
* @return void
*/
public function execute()
{
// call parent
parent::execute();
// load template
$this->loadTemplate();
// get data
$this->getData();
// parse
$this->parse();
}
/**
* Get the data from Google Calendar
* This method is only executed if the template isn''t cached
*
* @return void
*/
private function getData()
{
require_once PATH_LIBRARY . ''/external/google-api-php-client/src/apiClient.php'';
require_once PATH_LIBRARY . ''/external/google-api-php-client/src/contrib/apiCalendarService.php'';
$client = new apiClient();
$service = new apiCalendarService($client);
if (isset($_SESSION[''oauth_access_token''])) {
$client->setAccessToken($_SESSION[''oauth_access_token'']);
} else {
$token = $client->authenticate();
$_SESSION[''oauth_access_token''] = $token;
}
if ($client->getAccessToken()) {
$calId = FrontendEventsModel::getCalendarId((int) $this->data[''id'']);
$calId = $calId[0][''calendar_id''];
$events = $service->events->listEvents($calId);
$this->events = $events[''items''];
$_SESSION[''oauth_access_token''] = $client->getAccessToken();
} else {
$this->authUrl = $client->createAuthUrl();
}
}
/**
* Parse
*
* @return void
*/
private function parse()
{
$this->tpl->assign(''events'', $this->events);
$this->tpl->assign(''authUrl'', $this->authUrl);
}
}
?>
Cuando abro esta página de widgets por primera vez, me dirijo a google para autenticar la aplicación. Cuando estoy de acuerdo, me redireccionan a mi solicitud y ese es el punto en el que estoy obteniendo:
apiAuthException » Main
Message Error fetching OAuth2 access token, message: ''invalid_grant''
File C:/wamp/www/Officevibes/library/external/google-api-php-client/src/auth/apiOAuth2.php
Line 105
Date Thu, 05 Apr 2012 08:34:47 +0000
URL http://localhost/calendar?code=4/YPUpFklKvhEeTcMm4moRth3x49oe
Referring URL (Unknown)
Request Method GET
User-agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19
Debe reutilizar el token de acceso que obtiene después de la primera autenticación exitosa. Recibirá un error invalid_grant
si su token anterior aún no ha caducado. Guárdalo en algún lugar para que puedas reutilizarlo.
Estaba teniendo un problema similar debido a que la hora en mi servidor era incorrecta. Asegúrese de que el reloj de su sistema esté sincronizado.
También recibirá este error si intenta autenticar erróneamente su token de ID , en lugar de su token de acceso .
Así que no seas como yo. ¡Asegúrate de pasar la ficha correcta en tu código!
Tuve un problema similar El problema con "invalid_grant" es que es básicamente un marcador de posición para cualquier error que se produzca en relación con el token. He encontrado this artículo para ser realmente útil.
Vaya a su Consola de API de Google ( https://code.google.com/apis/console/ ) y revoque su Secreto de Cliente bajo Identificación de Cliente para las aplicaciones instaladas .
Asegúrese de actualizar también su código con el nuevo Secreto de Cliente