Веб-приложение скрипта Google Apps и авторизация OAuth (PHP)

Мне нужно вызвать мое веб-приложение GAS из моей службы php без какого-либо взаимодействия с пользователем:

  1. Скрипт связан с проектом
  2. Все учетные данные, которые я получаю с консоли разработчика ( http://note.io/1dq51gI )
  3. В php я получаю токен доступа (токен работает нормально для других сервисов Google)
  4. Я пытаюсь отправить запрос get в мой скрипт, всегда получая 401 ответ ( http://puu.sh/hX9VJ/fdce874ff5.png )
  5. Это развертывание настроек — http://puu.sh/hXa5h/a4c8ad4ff2.png (выполнить как пользователь, имеющий доступ к приложению, получить доступ к любому)
  6. В php я использую клиентскую библиотеку google php

Это мой php код:

    $client = new Google_Client();
$client->setApplicationName('my app');
$client->setClientId('my-id.apps.googleusercontent.com');

$cred = new Google_Auth_AssertionCredentials(
'[email protected]',
['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive.scripts'],
file_get_contents(__DIR__ . '/google-app-key.p12')
);

$client->setAssertionCredentials($cred);

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

$objToken  = json_decode($client->getAccessToken());
$accessToken = $objToken->access_token;

$curl = curl_init();

$header = [];
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: Bearer '.$accessToken;

curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
curl_setopt($curl, CURLOPT_POST,true);
curl_setopt($curl, CURLOPT_URL, 'https://script.google.com/macros/s/script-id/exec?query-params');

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9");

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

curl_setopt($curl, CURLOPT_SSLVERSION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);


$rest  = curl_exec($curl);
$error = curl_error($curl);
$info  = curl_getinfo($curl);

curl_close($curl);

Я всегда получаю 401 ответ от Google, и это проблема.

Спасибо!

0

Решение

   Сценарии контентной службы, вызываемые со стороны сервера, не работают с «Пользователем, имеющим доступ к веб-приложению». Это связано с тем, что для запуска скрипта им требуется дополнительная информация из SID, HSID и SSID cookie-файла пользователя. Вот почему вы можете протестировать код в чем-то вроде hurl.it, и похоже, что это возможно, но тот же вызов из cURL не удастся.

   Если вы вызываете скрипт с сервера, он должен быть установлен как execute как «me». Токен Oauth, который вы передаете в заголовке, будет использоваться для опции «У кого есть доступ к приложению».

0

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

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

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