Comment obtenir OAuth2 jeton d'accès avec Google API PHP client?
Je vais essayer d'obtenir un jeton d'accès OAuth pour l'import de données dans la fusion de la table. Je suis en train d'utiliser l'API de Google client PHP. J'ai créé un compte de service pour cette fin, et je suis en utilisant le code, surtout à partir de la serviceAccount exemple:
function access_token()
{
$client = new Google_Client();
$client->setAuthClass ('Google_OAuth2');
//^ Don't know if this line is required,
//^ but it fails just as well without it.
$client->setApplicationName ('Mysite.dom.ain');
$client->setAssertionCredentials (new Google_AssertionCredentials
( '[email protected]',
array ('https://www.googleapis.com/auth/fusiontables'),
file_get_contents ('path/to/my/privatekey.p12') ));
$client->setClientId ('NUMBERS-LETTERS-DASHES.apps.googleusercontent.com');
$client->authenticate();
//^ Also fails equally good with and without this line.
return $client->getAccessToken();
}
Un peu la sortie de débogage montre que $client->authenticate()
retourne true
, mais $client->getAcessToken()
retourne null
. Aucune exception n'est levée. J'ai le sentiment que je suis en train de faire quelque chose de fondamentalement mauvais. Si oui, s'il vous plaît pardonnez ma bêtise et de me diriger dans la bonne direction.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de l'appel authenticate (), mais vous aurez besoin d'appeler
refreshTokenWithAssertion()
pour actualiser le sous-jacent jeton d'accès. Si vous utilisez le client de la bibliothèque pour faire signé des demandes, il va tranquillement faire cet appel pour vous si le jeton d'accès a expiré.Les requêtes à l'API pour actualiser l'access_token sont chers, et ont un faible quota, de sorte que vous aurez envie de mettre en cache l'access_token.
$client->refreshToken($refreshtoken);$token = $client->getAccessToken();
Est-ce le bon appel faire, où$refreshtoken
est mon stockées jeton d'actualisation. J'ai ensuite stocker le nouveau jeton d'accès dans ma db, est-ce correct?Je pense que tout ce que tu as fait est correct, maintenant, vous avez deux solutions: la
$client
de faire un appel de service avec quelque chose comme çarefreshTokenWithAssertion()
afin d'obtenir votre jeton:Pour les deux cas j'ai des exemples dans mon dépôt GitHub.