1

このチュートリアルに従って、リモートサーバーから直接phpを使用してGoogleドライブにファイルをアップロードしました。GoogleAPIコンソールから新しいAPIプロジェクトを作成し、ドライブAPIとドライブSDKサービスを有効にして、OAuthクライアントIDとクライアントシークレットをリクエストし、それらを書き込みます。スクリプトで、PHPフォルダ用のGoogle APIクライアントライブラリと一緒にhttp://www.MYSERVER.com/script1.phpにアップロードして、認証コードを取得します。

<?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);

?>

http://www.MYSERVER.com/script1.phpにアクセスすると、完全に実行されるため、認証を許可し、2番目のスクリプトで記述できるAuthコードを取得します。次に、それをhttp://www.MYSERVER.com/script2.phpにアップロードします。

<?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);

?>

これで、MYSERVERの同じフォルダーにtoken.jsonの空のファイル(書き込み可能)と単純なdrive.txt(ドライブにアップロードするファイル)をアップロードできますが、最終的にhttp://www.MYSERVER.comにアクセスします。 /script2.phpブラウザは毎回HTTP500 (内部サーバーエラー)を表示し、ファイルがGoogleドライブにアップロードされません。手順にエラーがありますか、それともスクリプトに問題がありますか?これを解決するのを手伝ってください!

編集:

MYSERVERエラーログは次のものでいっぱいです。

PHP Fatal error:  Uncaught exception 'Google_AuthException' with message 'Error fetching OAuth2 access token, message: 'invalid_grant'' in /var/www/vhosts/.../gdrive/google-api-php-client/src/auth/Google_OAuth2.php:113
Stack trace:
#0 /var/www/vhosts/.../gdrive/google-api-php-client/src/Google_Client.php(131): Google_OAuth2->authenticate(Array, NULL)
#1 /var/www/vhosts/.../gdrive/sample2.php(23): Google_Client->authenticate()
#2 {main}
thrown in /var/www/vhosts/.../gdrive/google-api-php-client/src/auth/Google_OAuth2.php on line 113
4

1 に答える 1

2

古いアクセストークンの有効期限がまだ切れていないため、新しいアクセストークンを取得できないようです。これが、このコードが示していることです。

「Google_AuthException」とメッセージ「OAuth2アクセストークンの取得中にエラーが発生しました。メッセージ:「invalid_grant」

アクセストークンを一度取得し、どこかに保存して、有効期限が切れるまで使用する必要があります。何かをクエリしようとするたびに新しいアクセストークンを取得することはできません。

最初のアクセストークンを取り消すには、Google API Consoleにアクセスすると、インストールされているアプリケーションのクライアントIDの下にあります。

よろしくお願いします

于 2013-03-05T21:55:07.753 に答える