2014-12-04 4 views
5

Il mio obiettivo finale è inviare e-mail a me stesso tramite l'API Gmail di Google.Numero errato di segmenti in token (OAuth Google Api)

E qui è il mio problema.

quando sto ottenendo il mio token di accesso di un errore si apre

Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Wrong number of segments in token: ' 

ho letto qui Cloud endpoints oauth2 error che "Questo NON significa che il token non era valido", ma sto ottenendo un errore fatale che interrompendo il mio script.

mio token di accesso si presenta così 4/MqiIIl5K4S3D4iiieHshQt5D4M79oo07SbhMn22oe2o.cswa8t9ZuDAfJvIeHux6iLYXpNQmlAI

Se mi aggiorna la pagina con questo token che avrei avuto un altro errore, che è

'Error fetching OAuth2 access token, message: 'invalid_grant: Invalid code.' 

Ecco il mio codice

<?php 

include_once "templates/base.php"; 
echo pageHeader("Simple API Access"); 

require_once realpath(dirname(__FILE__) . '/../autoload.php'); 


$client = new Google_Client(); 


$client_id = '114600397795-j5sn0gvsdrup0s8dcmsj49iojp3m9biu.apps.googleusercontent.com'; 
$client_secret = 'm3Dzankql_rs1OGICsA3Hbtc'; 
$redirect_uri = 'http://alupa.com/gmail/examples/simple-query.php'; 

$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setRedirectUri($redirect_uri); 

$client->addScope("https://www.googleapis.com/auth/gmail.readonly"); 
$client->addScope("https://mail.google.com/"); 

$apiKey = "AIzaSyCWXxrTshKsotxEYNZZCXxdVXhLeku55cw"; 
$client->setDeveloperKey($apiKey); 


if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    //$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    //header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
}else{ 

$client->setApplicationName("Client_Gmail_Examples"); 

} 


if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 
    $client->setAccessToken($_SESSION['access_token']); 
} else { 
    $authUrl = $client->createAuthUrl(); 
} 

if ($client->getAccessToken()) { 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    $token_data = $client->verifyIdToken()->getAttributes(); 
} 


?> 
<div class="box"> 
    <div class="request"> 
<?php 
if (isset($authUrl)) { 
    echo "<a class='login' href='" . $authUrl . "'>Connect Me!</a>"; 
} else { 
    echo "<a class='logout' href='?logout'>Logout</a>"; 
} 
?> 
    </div> 
</div> 

alupa.com è il mio dominio locale e non vedo alcun problema con quella

sto usando libreria originale di Google https://github.com/google/google-api-php-client

+0

Ho gli stessi problemi. Il token non ha tutti i dati. L'hai risolto? –

risposta

3

Cambio:

$token_data = $client->verifyIdToken()->getAttributes(); 

a:

$tuan = $client->getAccessToken(); 
$token_data = $client->verifyIdToken($tuan->id_token); 
1

è necessario aggiungere l'OpenID portata e quindi si ottiene un id_token così come il token di accesso. Quindi si utilizza il token ID con $ client-> verifyIdToken