Automatisch aktualisieren token mit google drive api mit php-Skript
Folgte ich wieder DIESES TUTORIAL zum hochladen einer Datei auf Google Drive mit php, direkt von meinem REMOTE-SERVER: so ich erstellt habe, neue API-Projekt von Google API-Konsole aktiviert Drive-API-service, angefordert OAuth Client ID und Client Secret, schrieb Sie in einem Skript verwenden, dann laden Sie es zusammen mit Google APIs Client Library for PHP Ordner zu diesem http://www.MYSERVER.com/script1.php, abgerufen Auth-code:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('XXX'); //HERE I WRITE MY Client ID
$drive->setClientSecret('XXX'); //HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));
$token = $drive->authenticate($authorizationCode);
?>
Wenn ich Besuch http://www.MYSERVER.com/script1.php ich ermöglichen die Autorisierung und erhalten Sie den Auth-code, den ich schreiben kann, in ein zweites Skript. Dann lade ich es auf http://www.MYSERVER.com/script2.php, die sieht aus wie:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('X'); //HERE I WRITE MY Client ID
$drive->setClientSecret('X'); //HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$_GET['code']= 'X/XXX'; //HERE I WRITE AUTH CODE RETRIEVED AFTER RUNNING REMOTE script.php
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Drive');
$doc->setDescription('Document');
$doc->setMimeType('text/plain');
$content = file_get_contents('drive.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
?>
Gut, jetzt wird die Datei drive.txt hochgeladen auf mein Google Drive und die Struktur der token.json-Datei ist eine Art von:
{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1365505148}
Nun, wie Sie sich vorstellen können, die ich anrufen kann script2.php und der upload-Datei bis zu einem bestimmten Zeitpunkt. Endlich, der Punkt ist: ich nicht wollen, der token abläuft, ich nicht zulassen möchten, dass Berechtigung jedes mal es abläuft (vgl. script1.php): ich brauche zu nennen, die script2.php in regelmäßigen Abständen während des Tages, zu dem hochladen meiner Datei automatisch, ohne Benutzer-Interaktion. Also, was ist der beste Weg, um automatisch aktualisieren der token für immer in diesem Kontext? Brauche ich ein anderes Skript? Kann ich einige Codezeilen hinzufügen script2.php? oder ändern Sie die token.json-Datei? Und wo kann ich Lesen Sie die Verbleibende Zeit, bevor das token abläuft? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht haben, zu bitten, regelmäßig für einen access-token. Wenn Sie eine refresh_token, PHP-client wird automatisch erwerben Sie eine neue access-token für Sie.
Zum abrufen eines refresh_token, müssen Sie access_type "offline" und Fragen für den offline-Zugriff-Berechtigungen:
Sobald Sie eine
code
,Für zukünftige Anforderungen, stellen Sie sicher, dass erfrischt token ist immer gesetzt:
Wenn Sie möchten, eine Kraft access token aktualisieren, können Sie es durch aufrufen
refreshToken
:Vorsicht,
refresh_token
zurückgegeben werden, die nur auf den ersten$drive->authenticate()
Sie brauchen, um dauerhaft zu speichern. Um eine neue refresh_token, müssen Sie jederzeit Ihre bestehende token-und start-auth-Verfahren wieder.Offline-Zugriff ist im detail erklärt, auf Google OAuth 2.0-Dokumentation.
Google_AuthException
. Auf der anderen Seite, diese client-Bibliothek automatisch aktualisieren-access token wird, wenn der aktuelle abgelaufen ist. Also, normalerweise sollten Sie niemals einen auth Fehler. Ich bin mit der Bearbeitung meiner Antwort oben.Nach Unordnung einer Menge, habe ich diese zu arbeiten. Bin ich mit einer Datei/script, um die offline-token und dann eine Klasse, um Dinge zu tun, mit der api:
Können Sie laden, refresh-token aus der Datei und verwenden Sie es als notwendig für den offline-Zugriff:
Mehr hier: https://github.com/yannisg/Google-Drive-Uploader-PHP