Wie kann ein Token mit dem Google API-Client aktualisiert werden?
Ich ve wurde Herumspielen mit der Google Analytics API (V3) und in som-Fehler. Erstens, alles ist korrekt und arbeitete mit meinem Test-account. Aber wenn ich zu greifen möchte Daten aus einem anderen Profil-ID (Gleiche Google Konto/Google Analytics-Konto) bekomme ich einen 403-Fehler. Das merkwürdige ist, dass die Daten aus einigen GA-accounts werden Ihre Daten zurückgeben, während andere dieser Fehler generiert.
Habe ich widersprochen und token authentifiziert man mehr Zeit, und jetzt es scheint, wie ich kann schnappen Sie sich die Daten aller meiner Konten. Problem gelöst? Nicht. Als die access-Taste, ablaufen, ich Laufe in das gleiche Problem wieder.
Wenn ich verstanden habe, was rechts ist, könnte man die resfreshToken, um einen neuen authenticationTooken.
Das problem ist, wenn ich ausführen:
$client->refreshToken(refresh_token_key)
wird der folgende Fehler zurückgegeben:
Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'
Ich habe den code hinter der Methode refreshToken und verfolgt die Anforderung an die "apiOAuth2.php" Datei. Alle Parameter werden korrekt gesendet. Die grant_type ist hart codiert 'refresh_token" innerhalb der Methode, so ist es schwer für mich zu verstehen, was falsch ist. Das parameter-array sieht wie folgt aus:
Array ( [client_id] => *******-uqgau8uo1l96bd09eurdub26c9ftr2io.apps.googleusercontent.com [client_secret] => ******** [refresh_token] => 1\/lov250YQTMCC9LRQbE6yMv-FiX_Offo79UXimV8kvwY [grant_type] => refresh_token )
Das Verfahren ist wie folgt.
$client = new apiClient();
$client->setClientId($config['oauth2_client_id']);
$client->setClientSecret($config['oauth2_client_secret']);
$client->setRedirectUri($config['oauth2_redirect_uri']);
$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');
$client->setState('offline');
$client->setAccessToken($config['token']); //The access JSON object.
$client->refreshToken($config['refreshToken']); //Will return error here
Ist das ein bug, oder habe ich komplett was falsch verstanden?
InformationsquelleAutor der Frage seorch.me | 2012-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich endlich herausgefunden, wie dies zu tun. Die grundlegende Idee ist, dass Sie die token, die Sie erhalten, wenn Sie das erste mal nach Authentifizierung Fragen. Das erste token ist ein refresh token. Die erste original-token verfällt nach einer Stunde. Nach einer Stunde, verwenden Sie die refresh-token von dem ersten token erhalten eine neue, verwendbare token. Verwenden Sie
$client->refreshToken($refreshToken)
zum abrufen eines neuen Tokens. Ich nenne diese "temp-token." Sie speichern diese temp-token als gut, weil nach einer Stunde erlischt, und beachten Sie es nicht über einen refresh-token zugeordnet. Um einen neuen "temp" - token, das Sie verwenden müssen, um die Methode, die Sie verwendet, bevor das erste token ist refreshtoken. Ich angehängt habe folgenden code, der ist hässlich, aber ich bin neu in diesem...InformationsquelleAutor der Antwort Uri Weg
Das problem ist in der refresh-token:
Wenn ein string mit einem
'/'
bekommtjson encoded
ist Es flüchtete mit einem'\'
daher müssen Sie, um es zu entfernen.Die refresh-token in deinem Fall sollte sein:
Welche ich nehme an, Sie getan haben ist, Sie haben gedruckt, die json-Zeichenfolge, die google zurück geschickt und kopiert und eingefügt, die token in code, weil, wenn Sie
json_decode
dann wird es richtig entfernen Sie die'\'
für Sie!InformationsquelleAutor der Antwort Asim
Den Zugang geben sollte
offline
.state
ist eine variable, die Sie für Ihren eigenen Gebrauch, nicht die API verwenden.Stellen Sie sicher, dass die neueste version der client-Bibliothek und hinzufügen:
Sehen Bildung der URL für eine Erklärung der Parameter.
InformationsquelleAutor der Antwort jk.
hier ist das snippet zu setzen token, vorher stellen Sie sicher, dass der Zugang geben sollte offline
Aktualisieren token
dies wird aktualisieren Sie Ihren token, den Sie haben, um es zu aktualisieren, in der Sitzung, dass für Sie tun können
InformationsquelleAutor der Antwort
Die Antwort gepostet von @uri-weg für mich gearbeitet, aber da ich nicht finde, sind seine Erklärungen sehr klar, lassen Sie mich formulieren Sie es ein wenig.
Beim ersten Zugriff-Berechtigung-Sequenz, in der callback, wenn Sie zu dem Punkt, wo Sie erhalten eine Authentifizierungs-code, müssen Sie speichern Sie die Zugangs-token und refresh token als gut.
Der Grund dafür ist google-api sendet Sie ein token für den Zugriff mit einem refresh token nur, wenn die Aufforderung zur Eingabe der Zugangs-Berechtigung. Die nächsten access-Token gesendet wird ohne refresh token (es sei denn, Sie verwenden die
approval_prompt=force
option).Der refresh-token, den Sie erhielt, das erste mal bleibt gültig, bis der Benutzer hebt die Zugriffsrechte.
In einfachen php, ein Beispiel für den callback-Reihenfolge wäre:
Und später in einfachen php -, die Anschluss-Reihenfolge wäre:
InformationsquelleAutor der Antwort Daishi
Hier ist die code, die ich benutze in meinem Projekt und es funktioniert Prima:
InformationsquelleAutor der Antwort Mr_Green
Hatte das gleiche Problem; mein Skript, das funktionierte gestern, für einige ungerade Grund, warum nicht heute. Keine änderungen.
Anscheinend war dies, weil meine Systemuhr deaktiviert wurde um 2,5 (!!) Sekunden, synchronisieren mit NTP behoben.
Siehe auch: https://code.google.com/p/google-api-php-client/wiki/OAuth2#Solving_invalid_grant_errors
InformationsquelleAutor der Antwort strikernl
Zur info: Der 3.0 Google Analytics-API wird automatisch aktualisieren Sie den access token, wenn Sie einen refresh-token, wenn es ausläuft, so dass Ihr Skript muss nie
refreshToken
.(Siehe
Sign
Funktion inauth/apiOAuth2.php
)InformationsquelleAutor der Antwort Mark Smith
Benutzte ich das Beispiel von smartcodes mit der aktuellen version der Google-API, aber das hat nicht funktioniert. Ich denke, dass seine API ist auch veraltet.
So, ich schrieb meine eigene version, basierend auf einem API-Beispiele... Es gibt access-token anfordern token, token-Typ, ID-token, Ablaufzeit und die Erstellungszeit als strings
Wenn Sie Ihre Anmeldeinformationen des Clients und Entwickler-Schlüssel richtig sind, sollte dieser code funktionieren.
InformationsquelleAutor der Antwort John Slegers
Ich habe eine gleiche problem mit google/google-api-php-client v2.0.0-RC7
und nach der Suche für 1 Stunden, löste ich dieses problem mit die Funktionen json_encode
wie diese:
InformationsquelleAutor der Antwort Grandong
Manchmal Refresh Token habe ich nicht generiert, indem
$client->setAccessType ("offline");
.Versuchen Sie dies:
InformationsquelleAutor der Antwort Meenu Sharma
Dieser hier arbeitet sehr gut, vielleicht könnte niemand helfen:
index.php
oauth2callback.php
client.php
action.php
InformationsquelleAutor der Antwort user1768700
Laut Authentifizierung bei google: OAuth2 hält Rückkehr 'invalid_grant'
"Sollten Sie die Wiederverwendung der access-token, den Sie erhalten nach der ersten erfolgreichen Authentifizierung. Sie erhalten eine invalid_grant Fehler, wenn Sie Ihre vorherigen token noch nicht abgelaufen ist. Cache ist es, irgendwo so können Sie es wiederverwenden."
hoffe es hilft
InformationsquelleAutor der Antwort Jon
verwenden Sie den folgenden code-snippet, um Ihre refresh-token
InformationsquelleAutor der Antwort Aymen Mouelhi