2017-09-12 2 views
0

J'ai un problème avec google api et jeton oauth2.Le jeton Google API oauth2 expire?

Il existe une application qui permet de synchroniser des contacts/calendrier avec votre compte google par jeton oauth2. Lorsque le premier utilisateur souhaite se connecter à son compte google, il doit accorder l'accès, puis l'application reçoit le code/jeton qui est enregistré et sera utilisé ultérieurement pour la synchronisation hors connexion.

function getClient($app) 
{  
    $client = new Google_Client(); 
    $client->setAuthConfig("path_to_secret.json"); 

    switch($app) 
    { 
     case 'contacts': 
     $client->addScope(Google_Service_Script::WWW_GOOGLE_COM_M8_FEEDS); 
     $client->addScope(Google_Service_People::USERINFO_EMAIL); 
     break; 

     case 'calendar': 
     $client->addScope(Google_Service_Calendar::CALENDAR); 
     break; 

     default: 
     throw new Exception('API Callback not defined in setup'); 
    } 

    $client->setAccessType('offline'); // offline access 
    $client->setIncludeGrantedScopes(true); // incremental auth 
    $client->setRedirectUri(GOOGLE_APP_URL . $app.'/callback.php'); 
    return $client; 
} 

(il existe différents jetons pour contacts et calendrier)

Le script de synchronisation:

... 
try 
{ 
    $client = getClient('calendar'); 
    $client->setAccessToken(unserialize($accessToken)); 
    $http = $client->authorize(); 

    $service = new Google_Service_Calendar($client); 

    ... 
} 

$ accessToken est une chaîne sérialisée comme:

a:5:{s:12:"access_token";s:131:"******token_here********";s:10:"token_type";s:6:"Bearer";s:10:"expires_in";i:3598;s:8:"id_token";s:902:"***id_token****";s:7:"created";i:1505178047;} 

C'est travailler pour la première fois et en couple plus de fois, mais après s ome temps (heures) il y a une erreur:

Error: {"error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" }}

Qu'est-ce que je fais mal?

Ce qui est intéressant que pour les contacts de synchronisation fonctionne très bien tout le temps (jeton d'accès a les mêmes attributs que dans la synchronisation du calendrier)

+1

Vous avez probablement besoin d'un jeton d'actualisation – delboy1978uk

+0

Quelle version de Google API Client utilisez-vous? –

+0

C'est la version 2.0 – Pawel

Répondre

2

Ok, résolu propably - refresh_token est fourni pour la première fois que, quand j'étais le tester plusieurs fois, je n'ai pas eu de jeton d'actualisation. Lorsque j'ai révoqué l'accès au https://myaccount.google.com/u/0/permissions et que je me suis à nouveau connecté, j'ai reçu le jeton d'actualisation. Je suppose maintenant que cela fonctionnera correctement