我正在尝试使用服务帐户通过 Google API 查看和访问共享云端硬盘。
我使用 PHP 和
google/apiclient
版本 v2.16.0
库来访问 API。
这是我的代码示例:
$client = new \Google\Client();
$client->setApplicationName('My App');
$client->setAuthConfig(<contents of $jsonKey file>);
$client->setScopes([
\Google\Service\Drive::DRIVE,
\Google\Service\Drive::DRIVE_APPDATA,
\Google\Service\Drive::DRIVE_FILE,
\Google\Service\Drive::DRIVE_METADATA
]);
$service = new \Google\Service\Drive($client);
$optParams = [
'useDomainAdminAccess' => true,
'q' => 'name contains Clients',
];
$result1 = $service->drives->listDrives();
$result2 = $service->drives->listDrives($optParams);
$result1
返回以下内容:
Google\Service\Drive\DriveList Object
(
[internal_gapi_mappings:protected] => Array
(
)
[modelData:protected] => Array
(
)
[processed:protected] => Array
(
)
[collection_key:protected] => drives
[drivesType:protected] => Google\Service\Drive\Drive
[drivesDataType:protected] => array
[kind] => drive#driveList
[nextPageToken] =>
[drives] => Array
(
)
)
列表为空,因为这是一个服务帐户,但确认身份验证正常工作。
$result2
返回错误:
{
"error": {
"code": 400,
"message": "Invalid Value",
"errors": [
{
"message": "Invalid Value",
"domain": "global",
"reason": "invalid",
"location": "q",
"locationType": "parameter"
}
]
}
}
我为
'q'
参数尝试了许多不同类型的字符串,但总是得到无效值。 我还尝试省略查询参数并仅传递 useDomainAdminAccess
参数,但这返回相同的错误。
尽管经过几个小时的搜索,我还是无法弄清楚为什么会出现此错误。 任何和所有的帮助将不胜感激。
在您的显示查询中,需要用单引号或双引号将
Clients
括起来。所以,请修改如下并再次测试。
'q' => 'name contains Clients',
'q' => 'name contains "Clients"',
或
'q' => "name contains 'Clients'",
$service
可以使用Drive API的“方法:files.list”。请注意这一点。