Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用域范围的委派服务帐户从Google App Engine访问GDrive_Php_Google App Engine_Google Drive Api_Google Oauth - Fatal编程技术网

Php 使用域范围的委派服务帐户从Google App Engine访问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. 我创建了我的谷歌客户端,如下所示: 然

这是我第一次使用谷歌应用程序引擎,所以我的一些术语可能有点不对劲,请耐心听我说

我在GAE之外的一个web应用程序中运行了一些php代码,该应用程序使用google api php客户端库访问gdrive文件夹并创建文件。它工作得很好

我正试图通过一个具有域范围授权的项目迁移到GAE,以便我的应用程序可以访问/创建我的gdrive帐户中的文件。例如,假设我的域名是kennyyland.com,我使用的谷歌账号是kenny@kennywyland.com.

我创建了我的谷歌客户端,如下所示:

然后我创建gdrive服务,如下所示:

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