2016-12-19 7 views
2

Я хочу написать серверный php-скрипт, который будет обращаться к моему приводу Google и скопировать туда файл. Сервер должен сохранять учетные данные для моего диска Google и не запрашивать авторизацию. Все примеры, которые я видел, описывают веб-приложения, различные пользователи могут выполнять действия на своих дисках. Например, здесь https://developers.google.com/drive/v3/web/quickstart/php Как сохранить все необходимые учетные данные на моем сервере.Как получить доступ к моему приводу Google из php-скрипта без авторизации вручную

ответ

3

Я рекомендую вам изучить учетную запись службы. Учетная запись службы похожа на фиктивного пользователя, который предварительно аутентифицирован. Это означает, что вы можете обмениваться папкой в ​​своей учетной записи Google с учетной записью службы, и учетная запись службы сможет загрузить ее. У меня есть статья о том, как работают учетные записи службы. Google Developers console Service account

Есть несколько вещей, которые необходимо помнить при работе с учетными записями служб. В основном разрешения, когда учетная запись службы загружает файл по умолчанию, он владеет файлом, поэтому вам нужно будет предоставить разрешения вашей личной учетной записи на файл после его загрузки. Это просто дополнительный шаг.

В клиентской библиотеке PHP есть образец для проверки подлинности учетной записи службы, но у него нет диска, вам придется изменить часть книг, чтобы быть приложением Google. Service-account.php

require_once __DIR__ . '/vendor/autoload.php'; 
// Use the developers console and download your service account 
// credentials in JSON format. Place the file in this directory or 
// change the key file location if necessary. 
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json'); 
/** 
* Gets the Google client refreshing auth if needed. 
* Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount 
* Initializes a client object. 
* @return A google client object. 
*/ 
function getGoogleClient() { 
    return getServiceAccountClient(); 
} 
/** 
* Builds the Google client object. 
* Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts 
* Scopes will need to be changed depending upon the API's being accessed. 
* array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS) 
* List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes 
* @return A google client object. 
*/ 
function getServiceAccountClient() { 
    try { 
     // Create and configure a new client object.   
     $client = new Google_Client(); 
     $client->useApplicationDefaultCredentials(); 
     $client->addScope([YOUR SCOPES HERE]); 
     return $client; 
    } catch (Exception $e) { 
     print "An error occurred: " . $e->getMessage(); 
    } 
} 

Это также может помочь моему google drive samples

4

После долгих исследований и чтения Google документацию и примеры, которые я нашел способ, который работает для меня.

  1. Вам нужна учетная запись службы. Эта учетная запись получит доступ к данным на диске Google.
  2. Я работаю с доменом google, поэтому мне нужно предоставить полномочия домена для этой учетной записи службы.
  3. Here you can find how to create a service account and grant it domain wide authority однако эта ссылка не имеет примеры PHP
  4. Here you can find the same instructions with PHP examples
  5. Пожалуйста, обратите внимание, что вам нужно типа JSON файл ключа при создании учетной записи службы.
  6. Я использовал Google Application Default Credentials.

Наконец это работает фрагмент кода:

<?php 
require_once '/path/to/google-api-php-client/vendor/autoload.php'; 

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json'); 

$client = new Google_Client(); 
$client->useApplicationDefaultCredentials(); 
$client->setScopes(['https://www.googleapis.com/auth/drive']); 
$client->setSubject('[email protected]_want_to_work.for'); 

$service = new Google_Service_Drive($client); 

//Create a new folder 
$fileMetadata = new Google_Service_Drive_DriveFile(
    array('name' => 'Invoices', 
      'mimeType' => 'application/vnd.google-apps.folder')); 
$file = $service->files->create($fileMetadata, array('fields' => 'id')); 
echo $file->id; 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^