Actualiser automatiquement jeton à l'aide de google drive api de script php
J'ai suivi à nouveau CE TUTORIEL pour télécharger un fichier sur Google Drive avec php, directement à partir de mon SERVEUR DISTANT: j'ai donc créé une nouvelle API de Projet à partir de l'API Google Console, le Lecteur compatible API de service, a demandé OAuth d'identification du Client et Client Secret, a écrit dans un script, puis le télécharger avec Google Api de la Bibliothèque du Client pour PHP dossier à ce http://www.MYSERVER.com/script1.php, pour récupérer 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);
?>
Lorsque je visite http://www.MYSERVER.com/script1.php je d'autoriser et obtenir le code d'autorisation que je peux écrire dans un second script. Puis-je le télécharger à http://www.MYSERVER.com/script2.php, qui ressemble à:
<?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);
?>
Bien, maintenant, le fichier drive.txt est téléchargé sur mon Google Drive et de la structure de jeton.fichier json est une sorte de:
{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1365505148}
Maintenant, comme vous pouvez l'imaginer, je peux appeler script2.php et télécharger le fichier jusqu'à un certain temps. Enfin, le point est: je ne veux pas le jeton à expiration, je ne souhaitez pas accorder l'autorisation chaque fois qu'il expire (rappelant script1.php): j'ai besoin d'appeler le script2.php périodiquement au cours de la journée, pour charger mon fichier automatiquement, sans interaction de l'utilisateur. Alors, quelle est la meilleure façon de actualiser automatiquement le jeton toujours dans ce contexte? Ai-je besoin d'un autre script? Puis-je ajouter un peu de code pour script2.php? ou de modifier le jeton.fichier json? Et où puis-je lire le temps restant avant le jeton d'expiration? Merci!
OriginalL'auteur Huxley | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas à demander régulièrement pour un jeton d'accès. Si vous avez un refresh_token, PHP client obtient automatiquement un nouveau jeton d'accès pour vous.
Afin de récupérer un refresh_token, vous devez définir access_type "hors ligne" et de demander l'accès hors connexion autorisations:
Une fois que vous obtenez une
code
,Pour les demandes à venir, assurez-vous que actualisé jeton est toujours définie:
Si vous voulez une force jeton d'accès de l'actualisation, vous pouvez le faire en appelant
refreshToken
:Attention,
refresh_token
seront retournés seulement sur la première$drive->authenticate()
, vous avez besoin pour stocker de façon permanente. Afin d'obtenir un nouveau refresh_token, vous devez révoquer votre jeton et commencer auth processus à nouveau.L'accès hors connexion est expliqué en détail sur Google OAuth 2.0 documentation.
il va jeter un
Google_AuthException
. D'autre part, cette bibliothèque client actualiser automatiquement jeton d'accès si l'actuel est sur le point d'expirer. Donc, normalement, vous ne devriez jamais voir un auth erreur. Je suis en train de modifier ma réponse ci-dessus.J'ai récupéré refresh_token et access_token de OAuth 2.0 aire de Jeux de la console et de les stocker dans mon jeton.fichier json: c'est la même chose? sont-ils permanents?
vous ne pouvez pas utiliser un refresh_token récupérées par le protocole OAuth 2.0 terrain de jeu, vous avez besoin de récupérer des jetons avec votre propre identifiant client et le client secret. Sinon, PHP lib ne sera pas en mesure d'actualiser le jeton d'accès. /* L'accès hors connexion, l'autorisation est donnée pour OAuth 2.0 aire de Jeux, pas de votre application. */
Eh bien, @Burcu, mais si vous voyez ma question dans le jeton.fichier json j'ai DÉJÀ l'actualisation et le jeton d'accès récupérées après la première authentification et le premier appel de script2.php en fait je peux télécharger parfaitement les fichiers: ai-je encore besoin de récupérer d'autres jetons? merci pour votre patience 🙂
OriginalL'auteur Burcu Dogan
Après déconner beaucoup j'ai obtenu ce travail. Je suis en utilisant un fichier/script pour obtenir le mode hors connexion jeton, puis une classe à faire des choses avec l'api:
Vous pouvez charger l'actualisation jeton à partir d'un fichier et l'utiliser comme nécessaire pour l'accès hors connexion:
Plus ici: https://github.com/yannisg/Google-Drive-Uploader-PHP
OriginalL'auteur Yannis Giovanos