1

我正在用 PHP 开发一个市场应用程序。一旦域管理员将我的应用程序安装到他们的域中,我的应用程序需要访问域中所有用户的日历和驱动器,并具有对日历和驱动器范围的适当授权(我假设这是可能的,而不是每个用户都拥有授予访问权限)。

我正在关注示例,https://developers.google.com/google-apps/marketplace/tutorial_php并且已经能够使用教程中的 Zend_Gdata 库访问登录用户的谷歌日历约会。太好了,到目前为止!

现在我正试图让我的应用程序与用户的驱动器对话,这是我遇到问题的地方。在应用程序清单中,我的应用程序请求访问驱动器范围 ( https://www.googleapis.com/auth/drive) 以及日历范围。我正在尝试使用当前用于 PHP 的 Google API 客户端库来访问已登录的域用户的驱动器。代码如下所示 -

<?php

require_once 'common.php'; // has all the IDs, keys, secrets etc.
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$client = new Google_Client();
$client->setClientId($OAUTH_2_CLIENT_ID);
$client->setClientSecret($OAUTH_2_CLIENT_SECRET);
$client->setDeveloperKey($OAUTH_2_DEVELOPER_KEY);
$client->setRedirectUri('http://dev.mydomain.com/g/display.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));

$driveService = new Google_DriveService($client);
$files = $driveService->files->listFiles();

以上产生了这个错误 -

Fatal error: Uncaught exception 'Google_ServiceException' with message 
'Error calling GET https://www.googleapis.com/drive/v2/files?key={my_dev_key}: (401) Login Required' 
in /***/google-api-php-client/src/io/Google_REST.php:66 

我无法得到 200 响应的事实告诉我,我的身份验证不正确,或者使用了错误的身份验证模式,或者类似的东西。我收集到 setDeveloperKey() 是必需的,我使用的值是我在 API 控制台中生成的服务器应用程序的密钥(具有 IP 锁定)。我不确定我这样做是否正确。

我还认为请求需要确定我想要文件的域用户。我尝试将参数传递array('xoauth_requestor_id' => $_SESSION['email'])给 listFiles() 函数,这会导致不同的错误。

我的问题:

  1. 如何正确设置 Google_Client() 对象,以便我的应用可以使用它来访问用户的驱动器?我需要使用 setDeveloperKey() 吗?如果是这样,我应该使用什么值?
  2. 如何将当前登录用户的电子邮件地址传递给 Google_DriveService(),以便它知道只返回该用户的文件?

谢谢!

4

0 回答 0