Intereting Posts
Персонализированные, взвешенные рекомендации – рейтинг всех материалов PHP, Ошибка анализа: синтаксическая ошибка, неожиданный T_FUNCTION PHP – конвертировать миллисекунды в часы: минуты: секунды. Загрузка фотографий не работает в течение последних двух дней Поисковое ключевое слово (-ы), которое соответствует данным в MySQL Yii – «белый экран смерти», советы по отладке Zend Framework – последний код для выполнения перед компоновкой Портирование веб-сайта с Symfony 1.4 до 2.0 Соответствие символов символов Unicode в PCRE / PHP Как заменить смайлики еще после того, как пользователь написал текст и нажмите пробел Рекурсивная логика в PHP + MySQL PHP Добавление двух часов к дате в заданные часы с использованием функции API TTS Google: кодирование запроса GET с помощью PHP Создание php DLL из исходных файлов pecl Записанные файлы потеряны, когда пользователь повесил трубку в Asterisk

Не удалось получить доступ к моему файлу Google. Файлы с учетной записью службы.

Я хочу создать приложение, которое может добавлять файлы на диск Google и делиться этими файлами с другим пользователем: abc@gmail.com. этот пользователь abc@gmail.com должен войти в приложение, а затем он может просматривать и загружать все файлы, доступные на своем диске. в настоящее время я использовал учетную запись службы Google для этого. Я могу загрузить файл на Google диск, и я могу поделиться им с пользователем abc@gmail.com. но я столкнулся со следующими проблемами.

  1. используя электронную почту xyz@gmail.com, я зарегистрировался на диск и создал проект, но когда я создаю файл и передаю его пользователю abc@gmail.com с помощью API-диска, файл не отображается на диске xyz@gmail.com, но когда я пытается получить доступ к этому через API, я могу видеть файлы.

  2. для пользователя abc@gmail.com, что общие файлы доступны на его диске, и я вижу, что когда я обращаюсь к его диску через Интернет, но когда я пытался получить доступ к этому через API, он не показал мне никакого файла.

Пожалуйста, предложите мне, где я ошибаюсь. Возможно ли это для меня или нет?

for user **xyz@gmail.com $CLIENT_ID='xxxxxxxxx.apps.googleusercontent.com'; $SERVICE_ACCOUNT_EMAIL = 'xxxxxxxxxxxx@developer.gserviceaccount.com'; $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxxxxxxxxx-privatekey.p12';** For user **abc@gmail.com $CLIENT_ID='yyyyyyyyyyy.apps.googleusercontent.com'; $SERVICE_ACCOUNT_EMAIL = 'yyyyyyyyyyyy@developer.gserviceaccount.com'; $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'yyyyyyyyyyyy-privatekey.p12';** 

Используя user xyz @ gmail ID, я создал проект и использовал его выше clientID, адрес электронной почты для учетной записи, файл ключа создал файл:

 function insertFile($service, $title, $description, $parentId, $mimeType, $filename) { $file = new Google_DriveFile(); $file->setTitle($title); $file->setDescription($description); $file->setMimeType($mimeType); // Set the parent folder. if ($parentId != null) { $parent = new ParentReference(); $parent->setId($parentId); $file->setParents(array($parent)); } try { $data = file_get_contents($filename); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => $mimeType, 'convert' =>TRUE, ) ); $fileID = $createdFile->getId(); return $fileID; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); exit(); } } , function insertFile($service, $title, $description, $parentId, $mimeType, $filename) { $file = new Google_DriveFile(); $file->setTitle($title); $file->setDescription($description); $file->setMimeType($mimeType); // Set the parent folder. if ($parentId != null) { $parent = new ParentReference(); $parent->setId($parentId); $file->setParents(array($parent)); } try { $data = file_get_contents($filename); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => $mimeType, 'convert' =>TRUE, ) ); $fileID = $createdFile->getId(); return $fileID; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); exit(); } } 

Shared Этот файл для пользователя abc@gmail.com с помощью следующего кода:

 function insertPermission($service, $fileId, $value='abc@gmail.com', $type = 'user', $role = 'writer') { $newPermission = new Google_Permission(); $newPermission->setValue($value); $newPermission->setType($type); $newPermission->setRole($role); try { return $service->permissions->insert($fileId, $newPermission); } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } return NULL; } 

Затем, чтобы проверить файлы для abc@gmail.com, я вошел в систему, используя свой идентификатор clientID, accountEmail и файл закрытого ключа и для восстановления файлов, которые я использовал ниже кода

 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; } 

Что я думаю, что я использую разные clientID, accountEmail и закрытый ключ, из-за этого файлы не перечисляются на abc@gmail.com, но если я использую тот же идентификатор клиента, адрес электронной почты и закрытый ключ xyz@gmail.com, тогда я получить весь файл. Я хочу только некоторые файлы будут переданы abc@gmail.com, и он должен получить только эти файлы.

  1. Это потому, что xyz@gmail.com не принадлежит или не имеет никакого доступа к файлу. Учетная запись службы создала файл и, следовательно, является владельцем. Вы поделились файлом с abc@gmail.com, чтобы они могли видеть файл, но вы никогда не предоставляли xyz@gmail.com доступ к файлу. (Тот факт, что xyz@gmail.com создал учетную запись службы, здесь не имеет значения, файл явно принадлежит учетной записи службы, а не xyz@gmail.com).

  2. Если abc@gmail.com имеет доступ к файлу в пользовательском интерфейсе, он должен иметь доступ при аутентификации через API. Можете ли вы показать свой код здесь?