Php Google API列表文件权限不足

Php Google API列表文件权限不足,php,google-api,google-drive-api,google-api-php-client,Php,Google Api,Google Drive Api,Google Api Php Client,我正在尝试创建一个应用程序(使用驱动器服务帐户)列出给定文件夹中的文件,并允许用户搜索这些文件的内容。我收到一个403权限不足错误,我无法解释 我已从以下位置编辑代码: $client_id='[REMOVED]'//客户端ID $service_account_name='[已删除]'//电子邮件地址 $key_file_location='key.p12'//图例1.p12 $client=新的Google_客户端(); $client->setApplicationName(“客户机库示例

我正在尝试创建一个应用程序(使用驱动器服务帐户)列出给定文件夹中的文件,并允许用户搜索这些文件的内容。我收到一个
403权限不足
错误,我无法解释

我已从以下位置编辑代码:

$client_id='[REMOVED]'//客户端ID
$service_account_name='[已删除]'//电子邮件地址
$key_file_location='key.p12'//图例1.p12
$client=新的Google_客户端();
$client->setApplicationName(“客户机库示例”);
服务=新的谷歌服务驱动器($client);
如果(isset($_会话['service_token'])){
$client->setAccessToken($_会话['service_token']);
}
$key=file\u get\u contents($key\u file\u location);
$cred=新的谷歌认证断言(
$service\u account\u name,
排列(
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file'
),
$key
);
$client->setAssertionCredentials($cred);
如果($client->getAuth()->isAccessTokenExpired()){
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$\会话['service\u token']=$client->getAccessToken();
$result=array();
$pageToken=NULL;
做{
试一试{
$parameters=array();
如果($pageToken){
$parameters['pageToken']=$pageToken;
}
$files=$service->files->listFiles($parameters);
$result=array_merge($result,$files->getItems());
$pageToken=$files->getNextPageToken();
}捕获(例外$e){
echo“
发生错误:“..e->getMessage(); $pageToken=NULL; } }而($pageToken); 回声“; 打印(结果); 回声“; echo“
执行已完成。”;

确切的错误消息(
catch
中的
e->getMessage()
)是调用GET的
错误https://www.googleapis.com/drive/v2/files: (403)权限不足
-我以为/drive和/drive.file作用域给了我所有需要的权限?

首先,快速提示:您正在请求
驱动器
作用域和
驱动器.File
作用域。后者是前者的子集,因此不需要请求它。您应该删除
'https://www.googleapis.com/auth/drive.file“


至于权限不足,这可能是由于开发人员控制台配置不正确造成的。您应该仔细检查API和SDK是否都已为此特定项目启用。

我也遇到了同样的问题。我在Google开发者控制台中创建了一个新的秘密,并重新验证了它。这解决了问题。

可能需要再添加一个作用域“”。有关更多详细信息,请参阅此问题:以及。希望有帮助!
$client_id = '[REMOVED]'; //Client ID
$service_account_name = '[REMOVED]'; //Email Address
$key_file_location = 'key.p12'; //key.p12

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
service = new Google_Service_Drive($client);

if (isset($_SESSION['service_token'])) {
    $client->setAccessToken($_SESSION['service_token']);
}

$key  = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array(
        'https://www.googleapis.com/auth/drive',
        'https://www.googleapis.com/auth/drive.file'
    ),
    $key
);

$client->setAssertionCredentials($cred);

if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}

$_SESSION['service_token'] = $client->getAccessToken();

$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) {
        echo "<br/>An error occurred: " . $e->getMessage();
        $pageToken = NULL;
    }
} while ($pageToken);

echo "<pre>";
print_r($result);
echo "</pre>";

echo "<br />Execution completed.";