使用访问令牌访问驱动器
access drive with access token
努力理解 oauth2 令牌和刷新令牌过程
我得到了这个代码
$url = 'https://www.googleapis.com/oauth2/v3/token';
$data = array('client_id' => 'clientid', 'client_secret' => 'secret','refresh_token' => 'token','grant_type' => 'refresh_token');
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded",
'method' => 'POST',
'approval_prompt'=>'force',
'access_type'=>'offline',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
上面的代码给了我一个访问令牌,我遵循了这个 link 一位 Whosebuger pinoyyid 的建议,但是,我对如何正确使用生成的访问令牌来访问驱动器和复制驱动器感到困惑文件...
我看到的所有过程通常涉及 $client = new Google_Client()
,我不确定如何使用整个 POST http://..... 东西,所以基本上我需要弄清楚如果我在 google 客户端的新实例中使用通过上面的代码获得的访问令牌,或者我只是对 url 执行 post 和必要的信息(我不清楚也 ) 任何 help/clarification 真的很感激
编辑 #1
我想要实现的是允许最终用户通过我的网页访问我的驱动器,让他们在我的驱动器中复制一个电子表格,并通过我的网站访问它,将数据存储在电子表格上,电子表格将永远在我的驱动器,从不在最终用户上
编辑 #2
根据您的 posts 的代码如下,使用服务帐户,文件在我在 api 控制台服务帐户上创建的那个 gmail 帐户中
<?php
require 'Google/autoload.php';
$client = new Google_Client();
// Replace this with your application name.
$client->setApplicationName("TEST");
// Replace this with the service you are using.
$service = new Google_Service_Drive($client);
// This file location should point to the private key file.
$key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/number-privatekey.p12');
$user_to_impersonate = 'admin@testpr.com';
$cred = new Google_Auth_AssertionCredentials(
'number@developer.gserviceaccount.com',
array('https://www.googleapis.com/auth/drive'), ****//this here has to be drive not drive.file
$key,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
$user_to_impersonate
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$originFileId = "longnumber";
$copyTitle = 'copied';
$newfile = copyFile($service, $originFileId, $copyTitle);
print_r($newfile);
function copyFile($service, $originFileId, $copyTitle)
{
$copiedFile = new Google_Service_Drive_DriveFile();
$copiedFile->setTitle($copyTitle);
try {
return $service->files->copy($originFileId, $copiedFile);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
?>
所以它现在就开始工作了,伙计们,请大家花点时间,编辑我的 post 以反映该死的事情
如果您想授予最终用户访问您的驱动器的权限,您必须授权您的应用程序代表您所在域中的用户(在本例中为您)进行 API 调用。为此,您必须在 Google 开发者控制台中设置一个服务帐户并生成一个 p12 密钥。您还必须在管理控制台中输入 https://www.googleapis.com/auth/drive API 范围。
可以在此处找到完整的解释和示例:https://developers.google.com/api-client-library/php/auth/service-accounts。
为此,您还需要 Google API 的客户端库:https://github.com/google/google-api-php-client(也在 Google 手册中提到)。
让用户代表您的一个帐户进行 API 调用的代码示例:https://developers.google.com/api-client-library/php/guide/aaa_oauth2_service
努力理解 oauth2 令牌和刷新令牌过程
我得到了这个代码
$url = 'https://www.googleapis.com/oauth2/v3/token';
$data = array('client_id' => 'clientid', 'client_secret' => 'secret','refresh_token' => 'token','grant_type' => 'refresh_token');
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded",
'method' => 'POST',
'approval_prompt'=>'force',
'access_type'=>'offline',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
上面的代码给了我一个访问令牌,我遵循了这个 link 一位 Whosebuger pinoyyid 的建议,但是,我对如何正确使用生成的访问令牌来访问驱动器和复制驱动器感到困惑文件...
我看到的所有过程通常涉及 $client = new Google_Client()
,我不确定如何使用整个 POST http://..... 东西,所以基本上我需要弄清楚如果我在 google 客户端的新实例中使用通过上面的代码获得的访问令牌,或者我只是对 url 执行 post 和必要的信息(我不清楚也 ) 任何 help/clarification 真的很感激
编辑 #1 我想要实现的是允许最终用户通过我的网页访问我的驱动器,让他们在我的驱动器中复制一个电子表格,并通过我的网站访问它,将数据存储在电子表格上,电子表格将永远在我的驱动器,从不在最终用户上
编辑 #2
根据您的 posts 的代码如下,使用服务帐户,文件在我在 api 控制台服务帐户上创建的那个 gmail 帐户中
<?php
require 'Google/autoload.php';
$client = new Google_Client();
// Replace this with your application name.
$client->setApplicationName("TEST");
// Replace this with the service you are using.
$service = new Google_Service_Drive($client);
// This file location should point to the private key file.
$key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/number-privatekey.p12');
$user_to_impersonate = 'admin@testpr.com';
$cred = new Google_Auth_AssertionCredentials(
'number@developer.gserviceaccount.com',
array('https://www.googleapis.com/auth/drive'), ****//this here has to be drive not drive.file
$key,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
$user_to_impersonate
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$originFileId = "longnumber";
$copyTitle = 'copied';
$newfile = copyFile($service, $originFileId, $copyTitle);
print_r($newfile);
function copyFile($service, $originFileId, $copyTitle)
{
$copiedFile = new Google_Service_Drive_DriveFile();
$copiedFile->setTitle($copyTitle);
try {
return $service->files->copy($originFileId, $copiedFile);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
?>
所以它现在就开始工作了,伙计们,请大家花点时间,编辑我的 post 以反映该死的事情
如果您想授予最终用户访问您的驱动器的权限,您必须授权您的应用程序代表您所在域中的用户(在本例中为您)进行 API 调用。为此,您必须在 Google 开发者控制台中设置一个服务帐户并生成一个 p12 密钥。您还必须在管理控制台中输入 https://www.googleapis.com/auth/drive API 范围。
可以在此处找到完整的解释和示例:https://developers.google.com/api-client-library/php/auth/service-accounts。
为此,您还需要 Google API 的客户端库:https://github.com/google/google-api-php-client(也在 Google 手册中提到)。
让用户代表您的一个帐户进行 API 调用的代码示例:https://developers.google.com/api-client-library/php/guide/aaa_oauth2_service