L'API Google Analytics exclut l'exception "invalid_grant" avec le compte de service. Même code sur deux serveurs. Une seule œuvre
Je suis d'interrogation de l'Analytics API via un Compte de Service.
J'ai écrit le code sur le serveur de dev et ça fonctionne sans problèmes.
Lorsqu'il exécute le même code sur le serveur de production, il jette ce:
Google_AuthException: Erreur lors de l'actualisation de la OAuth2 jeton, message:" {
"erreur" : "invalid_grant" }'
J'ai essayé de créer un autre compte de Service, et le comportement est le même.
Le protocole de l'IETF projet (http://tools.ietf.org/html/draft-ietf-oauth-v2-31) dit ceci à propos de l'erreur:
invalid_grant
The provided authorization grant (e.g. authorization
code, resource owner credentials) or refresh token is
invalid, expired, revoked, does not match the redirection
URI used in the authorization request, or was issued to
another client.
Voici le code que j'ai écrit:
$GA_CLIENT_ID = 'XX.apps.googleusercontent.com';
$GA_APP_EMAIL = '[email protected]';
$GA_APP_NAME = 'XX';
$GA_KEY_FILE = 'XX';
//create client object and set app name
$client = new Google_Client();
$client->setApplicationName($GA_APP_NAME); //name of your app
//set assertion credentials
$client->setAssertionCredentials(
new Google_AssertionCredentials(
$GA_APP_EMAIL, //email you added to GA
array('https://www.googleapis.com/auth/analytics.readonly'),
file_get_contents($GA_KEY_FILE) //keyfile you downloaded
));
//other settings
$client->setClientId($GA_CLIENT_ID); //from API console
$client->setAccessType('offline_access'); //this may be unnecessary?
//create service and get data
$service = new Google_AnalyticsService($client);
$result = $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
return $result;
J'ai aussi essayé la solution proposée ici (https://groups.google.com/forum/?fromgroups#!topic/gs-discussion/3y_2XVE2q7U%5B1-25%5D) à l'aide de authenticatedRequest() au lieu de Google_AnalyticsService:
$req = new Google_HttpRequest($apiUrl);
$resp = $client::getIo()->authenticatedRequest($req);
$result = json_decode($resp->getResponseBody(), true);
Cette solution fonctionne également sur le serveur de dev, mais pas sur la production.
Je suis totalement ignorant sur ce point. Quelqu'un a vu ce/fixe?
Merci!
source d'informationauteur Valer | 2012-08-15
Vous devez vous connecter pour publier un commentaire.
Apparemment, le problème était l'heure du système est à off. Travaillé par sync-ing via NTP avec:
sudo ntpdate npt.ubuntu.com
sudo ntpdate pool.ntp.org
Modifier
@RafaSashi suggéré ci-dessous, la
pool.ntp.org
serveur est plus fiable. Au lieu d'utiliserntp.ubuntu.com
(qui fut le premier travail que j'ai essayé, donc le choix initial).Les invalides de la subvention peut également être causé si vous vous trompez "ServiceAccountId". Il doit être l'adresse de courriel associée à l'id du client dans le compte de service client id dans l'api google page d'accès. Il faudrait aussi ajouter cet utilisateur à un compte google analytics que vous êtes planification pour l'accès.
Cette trébuché moi parce que j'ai supposé que l'adresse e-mail se référant à la a l'adresse email de mon compte google, depuis que j'ai utilisé le même compte google pour obtenir l'accès aux api comme je le fais pour google analytics. Je sais Vir déjà pensé que sa, juste pensé que je voudrais ajouter ceci dans le cas où quelqu'un d'autre vient à travers la même question, et, comme moi, leur ordinateur semble être en synchronisation avec NTP.
En plus de Valer réponse:
Tout d'abord, vous aurez besoin d'installer NTP si elle n'est pas déjà installé. Pour Debian ou Ubuntu, ce serait cette commande:
Pour Redhat ou CentOS, vous aurez besoin d'utiliser celui-ci:
Si la synchronisation via
npt.ubuntu.com
ne fonctionne pas, essayez :Ressources
http://www.howtogeek.com/tips/how-to-sync-your-linux-server-time-with-network-time-servers-ntp/
https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-12-04
Il y a deux raisons principales pour l' invalid_grant d'erreur qui vous devez prendre soin avant la requête POST pour Actualiser Jeton Jeton d'Accès.
RFC 6749 OAuth 2.0 défini invalid_grant:
La demande d'autorisation de subvention (par exemple, le code d'autorisation, de ressources propriétaire des informations d'identification) ou à l'actualisation de jeton est invalide, expiré, révoqué, ne correspond pas à la redirection URI utilisé dans la demande d'autorisation, ou a été prise à un autre client.
J'ai trouvé un autre bon article, icivous trouverez de nombreuses autres raisons pour cette erreur.
https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35
Google Aire De Jeux est le meilleur outil qui vous permettra de vous comment faire pour envoyer la demande.
https://developers.google.com/oauthplayground