Php 使用域范围的委派服务帐户从Google App Engine访问GDrive
这是我第一次使用谷歌应用程序引擎,所以我的一些术语可能有点不对劲,请耐心听我说 我在GAE之外的一个web应用程序中运行了一些php代码,该应用程序使用google api php客户端库访问gdrive文件夹并创建文件。它工作得很好 我正试图通过一个具有域范围授权的项目迁移到GAE,以便我的应用程序可以访问/创建我的gdrive帐户中的文件。例如,假设我的域名是kennyyland.com,我使用的谷歌账号是kenny@kennywyland.com. 我创建了我的谷歌客户端,如下所示: 然后我创建gdrive服务,如下所示:Php 使用域范围的委派服务帐户从Google App Engine访问GDrive,php,google-app-engine,google-drive-api,google-oauth,Php,Google App Engine,Google Drive Api,Google Oauth,这是我第一次使用谷歌应用程序引擎,所以我的一些术语可能有点不对劲,请耐心听我说 我在GAE之外的一个web应用程序中运行了一些php代码,该应用程序使用google api php客户端库访问gdrive文件夹并创建文件。它工作得很好 我正试图通过一个具有域范围授权的项目迁移到GAE,以便我的应用程序可以访问/创建我的gdrive帐户中的文件。例如,假设我的域名是kennyyland.com,我使用的谷歌账号是kenny@kennywyland.com. 我创建了我的谷歌客户端,如下所示: 然
$service = new Google_Service_Drive($client);
我没有从中得到任何错误,我能够在不抛出错误消息的情况下执行查询,但是,我得到的结果集是完全空的。我的gdrive帐户中有很多文件,因此我假设在我将以下代码发布到GAE并运行它时,我应该会看到它们(retreiveAllFiles()函数来自Google在此处找到的代码示例:):
但是,我得到一个空的结果集。print_r()打印空数组:
Array ( )
我错过了什么?我觉得我的项目/应用程序能够成功访问gdrive服务器,但它无法在我的帐户中看到与此工作域相关的任何文件。解决方案涉及一个主要更改,需要进一步更改。主要的变化是,我使用的是GoogleAPI php客户端v1,但我需要使用v2候选版本(它奇怪地位于分支中) 他们有一个从1.0升级到2.0所需的代码更改列表(谢谢,非常方便的githubers!) 最后,我用下面的代码配置了我的客户机,然后它立即能够访问gdrive,就好像它是当前登录的人一样(假设'kenny@kennywyland.com“在我的例子中,谁是我的特殊领域的一部分,拥有全领域的授权)
myapp-xxxxxxx.json文件是在我的开发者控制台中为我的应用程序的服务帐户生成的。解决方案涉及一个主要更改,需要进一步更改。主要的变化是,我使用的是GoogleAPI php客户端v1,但我需要使用v2候选版本(它奇怪地位于分支中)
他们有一个从1.0升级到2.0所需的代码更改列表(谢谢,非常方便的githubers!)
最后,我用下面的代码配置了我的客户机,然后它立即能够访问gdrive,就好像它是当前登录的人一样(假设'kenny@kennywyland.com“在我的例子中,谁是我的特殊领域的一部分,拥有全领域的授权)
myapp-xxxxxxx.json
文件是在我的开发者控制台中为我的应用程序的服务帐户生成的
$allfiles = retrieveAllFiles($service);
print_r($allfiles);
function retrieveAllFiles($service) {
$result = array();
$pageToken = NULL;
do {
try {
$parameters = array();
if ($pageToken) {
$parameters['pageToken'] = $pageToken;
}
$files = $service->files->listFiles($parameters);
$result = array_merge($result, $files->getItems());
$pageToken = $files->getNextPageToken();
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
$pageToken = NULL;
}
} while ($pageToken);
return $result;
}
Array ( )
require_once('vendor/autoload.php');
$client = new Google_Client();
$client->setAuthConfig('myapp-xxxxxxxx.json');
$user_to_impersonate = "kenny@kennywyland.com";
$client->setSubject($user_to_impersonate);
$client->addScope('https://www.googleapis.com/auth/drive');
$service = new Google_Service_Drive($client);