Вызов API-интерфейса выполнения скрипта приложений Google из PHP с использованием учетной записи службы

Я пытаюсь вызвать очень простой скрипт приложений Google из php с использованием служебной учетной записи, чтобы к нему мог получить доступ только мой сервер, а не пользователи веб-сайта.

Вот как я это делаю. Я создаю сценарий здесь https://script.google.com

function get() {
return  ContentService.createTextOutput('get method');
}

и новый проект автоматически ассоциируется, когда я сохраняю его.
Тогда я открываю File > Project Properties чтобы получить scriptId = MM8zQqofS1OIcnFiNSlm1CGEl5qMrMVBt

Я захожу в консоль разработчика соответствующего проекта Resources > Project Developers console нажав на ссылку проекта в верхней части всплывающего окна.

Затем я нажимаю «Активировать и управлять API» и активировать «API выполнения скриптов Google Apps». Я нажимаю «Учетные данные» и вижу, что предыдущая операция автоматически создала учетные данные OAuth2. Но мне нужны учетные данные службы. Тогда я создаю один Add credentials > Service account и загрузите сгенерированный файл p12. Я получаю clientId = 109160023321840004240 а также clientMail = [email protected] для этой учетной записи службы.

Я возвращаюсь к своему сценарию и делюсь им с адресом электронной почты учетной записи службы для чтения&доступ для записи File > Share, Прежде всего, я получаю письмо в своем личном почтовом ящике, которое уведомляет меня, что

Delivery to the following recipient failed permanently:

[email protected]

Затем я публикую сценарий как API выполнения Publish > Publish as an execution API с доступом ко всем.

Теперь давайте перейдем на сторону сервера PHP. Используя клиентскую библиотеку API Google для PHP, доступную здесь https://github.com/google/google-api-php-client Я пытаюсь вызвать функцию скрипта из PHP:

$client = new Google_Client();
$client->setClientId('109160023321840004240');
$client->setApplicationName('myScript');

$cred = new Google_Auth_AssertionCredentials(
'[email protected]',
[/*no scope nedeed for this simple script*/],
file_get_contents('path_to_myScript.p12')
);
$client->setAssertionCredentials($cred);

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

$service = new Google_Service_Script($client);
$scriptId = 'MM8zQqofS1OIcnFiNSlm1CGEl5qMrMVBt';

// Create an execution request object.
$request = new Google_Service_Script_ExecutionRequest();
$request->setFunction('get');
$response = $service->scripts->run($scriptId, $request);

И вот ответ, который я получаю все время

Error calling POST https://script.googleapis.com/v1/scripts/MM8zQqofS1OIcnFiNSlm1CGEl5qMrMVBt:run: (403) The caller does not have permission

Если при развертывании сценария я решу предоставить доступ «Только мне», я получу следующий ответ.

Error calling POST https://script.googleapis.com/v1/scripts/MM8zQqofS1OIcnFiNSlm1CGEl5qMrMVBt:run: (404) Requested entity was not found.

Я был бы так счастлив, если бы у кого-нибудь из вас была идея помочь мне 🙂

1

Решение

Сценарий приложения еще не поддерживает учетные записи служб с API-интерфейсом выполнения. увидеть https://code.google.com/p/google-apps-script-issues/issues/detail?id=5461

Google сказал, что они изучают это, но очевидно не скоро произойдет (на основе ответов Google на Google + сообщения об этом как https://plus.google.com/+MartinHawksey/posts/Zquix9XqzkK)

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]