我正在用PHP开发一个市场应用程序。一旦域管理员将我的应用程序安装到他们的域中,我的应用程序需要访问域中所有用户的日历和驱动器,并对日历和驱动器范围进行适当的授权(我假设这是可能的,没有每个用户都有授予访问权限)。
我正在关注https://developers.google.com/google-apps/marketplace/tutorial_php
的示例,并且能够使用教程中的Zend_Gdata库访问登录用户的Google日历约会。很棒,到目前为止!
现在我正在尝试让我的应用与用户的驱动器通信,这是我遇到问题的地方。在应用清单中,除了日历范围之外,我的应用还请求访问驱动器范围(https://www.googleapis.com/auth/drive
)。我正在尝试使用当前Google APIs Client Library for PHP来访问登录域用户的驱动器。代码看起来像这样 -
<?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()函数,这会导致不同的错误。
我的问题:
谢谢!