大家 我需要通过API将文件上传到Google云端硬盘,我的确提到了https://developers.google.com/drive/quickstart-php。
我已经生成了访问令牌并将其保存在文件中,问题是它只能在第一次工作,下次它会出错
OAuth2 token, message: '{ "error" : "invalid_grant" }
我们只需要在通过表单从用户处获取文件后将文件上传到Google驱动器(我们自己的帐户)。
我曾尝试过许多教程中的脚本,但似乎没有用。 我也尝试过离线访问权限,但仍然没有运气。
更新 这是我用来生成访问令牌的代码
require_once APP_PATH.'_includes/google_drive/Google_Client.php';
require_once APP_PATH.'_includes/google_drive/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('xxxxxxxxxxxxxxxx');
$drive->setClientSecret('xxxxxxxxxxxxxxx');
$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);
然后我使用了这段代码 $ drive = new Google_Client();
$drive->setClientId('xxxxxxxxxxx');
$drive->setClientSecret('xxxxxxxxxxxxxxx');
$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']= '4/axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Document');
$doc->setDescription('Test description');
$doc->setMimeType('text/plain');
$content = file_get_contents('document.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
它运作良好,但当我再次运行页面时,它说
Fatal error: Uncaught exception 'Google_AuthException' with message 'Error fetching OAuth2 access token, message: 'invalid_grant'' in ...Google_OAuth2.php on line 115
感谢任何帮助。
答案 0 :(得分:1)
基于@ BurcuDogan的评论,评论出验证方法解决了这个问题。
//file_put_contents('token.json', $drive->authenticate());