Мне нужно вызвать мое веб-приложение GAS из моей службы 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, и это проблема.
Спасибо!
Сценарии контентной службы, вызываемые со стороны сервера, не работают с «Пользователем, имеющим доступ к веб-приложению». Это связано с тем, что для запуска скрипта им требуется дополнительная информация из SID, HSID и SSID cookie-файла пользователя. Вот почему вы можете протестировать код в чем-то вроде hurl.it, и похоже, что это возможно, но тот же вызов из cURL не удастся.
Если вы вызываете скрипт с сервера, он должен быть установлен как execute как «me». Токен Oauth, который вы передаете в заголовке, будет использоваться для опции «У кого есть доступ к приложению».
Других решений пока нет …