examples - Actualizar token con google api client php
google-api-php-client (1)
OK - Basado en un par de publicaciones, he solucionado el problema de obtener el token de actualización para obtener un nuevo token de acceso. Utilicé este código antes de comenzar a intentar cualquier acceso:
if($client->isAccessTokenExpired()) {
echo ''Access Token Expired''; // Debug
$client->refreshToken(''X/XXXXXX'');
}
Donde la parte eliminada en refreshToken
es mi token de actualización. Codifiqué la clave en el código.
Probablemente esta no sea la solución correcta ya que he visto referencias para almacenar la clave en una base de datos, así que presumiblemente podría almacenar el token de acceso actual en una base de datos con el token de actualización y extraer estos datos de la base de datos cuando sea necesario para guardarlos Codificándolos?
Espero que este método que he utilizado vuelva a funcionar después de que caduque, ¡con los dedos cruzados!
Mi dolor con google api continúa ...
Puedo usar un script para usar un token de actualización: actualizo automáticamente y mantengo mi acceso a un calendario activo. Puedo interactuar con el calendario y todo está bien.
Ahora quiero pasar al uso del cliente google api para php y lo tuve funcionando ayer, mientras que mi token era válido, pero ahora que ha expirado, no puedo encontrar la forma de usar el token de actualización para obtener un nuevo token y mantener autenticando una vez que expira en el futuro.
He encontrado varias referencias y he intentado esto: aquí está mi script de prueba basado en el ejemplo simple.php:
<?php
require_once ''../../src/Google_Client.php'';
require_once ''../../src/contrib/Google_CalendarService.php'';
session_start();
$client = new Google_Client();
$client->setAccessType(''offline'');
$client->setApplicationName("Downs Golfmanager");
// Visit https://code.google.com/apis/console?api=calendar to generate your
// client id, client secret, and to register your redirect uri.
$client->setClientId(''XXXXXX.apps.googleusercontent.com'');
$client->setClientSecret(''XXXXXX'');
$client->setRedirectUri(''XXXXXX'');
$client->setDeveloperKey(''XXXXXX'');
$client->refreshToken(''X/XXXXX'');
$client->setUseObjects(true);
$cal = new Google_CalendarService($client);
if (isset($_GET[''logout''])) {
unset($_SESSION[''token'']);
}
if (isset($_GET[''code''])) {
$client->authenticate($_GET[''code'']);
$_SESSION[''token''] = $client->getAccessToken();
header(''Location: http://'' . $_SERVER[''HTTP_HOST''] . $_SERVER[''PHP_SELF'']);
}
if (isset($_SESSION[''token''])) {
$client->setAccessToken($_SESSION[''token'']);
}
if($client->isAccessTokenExpired()) {
/
echo ''Access Token Expired''; // Debug
//$client->refreshToken($refreshToken);
}
if ($client->getAccessToken()) {
$event = new Google_Event();
$event->setSummary(''Appointment'');
$event->setLocation(''Somewhere'');
$start = new Google_EventDateTime();
$start->setDateTime(''2013-08-28T14:00:00.000+01:00'');
$event->setStart($start);
$end = new Google_EventDateTime();
$end->setDateTime(''2013-08-28T15:25:00.000+01:00'');
$event->setEnd($end);
$createdEvent = $cal->events->insert(''[email protected]'', $event);
//echo "<pre>" . print_r($createdEvent, true) . "</pre>";
echo $createdEvent->getId();
//test pulling events
$events = $cal->events->listEvents(''[email protected]'');
while(true) {
foreach ($events->getItems() as $event) {
echo $event->getSummary();
}
$pageToken = $events->getNextPageToken();
if ($pageToken) {
$optParams = array(
''pageToken'' => $pageToken,
''timeMin''=>''2013-08-26T00:00:00+01:00'',
''timeMax''=>''2013-08-31T00:00:00+01:00''
);
$events = $cal->events->listEvents(''[email protected]'', $optParams);
} else {
break;
}
}
//print "<h1>Events List</h1><pre>" . print_r($events, true) . "</pre>";
$calList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION[''token''] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class=''login'' href=''$authUrl''>Connect Me!</a>";
}
Al igual que en mis publicaciones anteriores, no tengo claro qué debería estar sucediendo aquí. Mi token ha expirado; tengo el token de actualización. ¿Qué cambios en mi código necesito actualizar automáticamente la autorización cada vez que accedo?
Editar: el código de error es: The OAuth 2.0 access token has expired, and a refresh token is not available
He comentado un par de líneas adicionales sobre las cuales había incluido en mis intentos de resolver solo para tratar de evitar confusiones adicionales.
Gracias