Я пытаюсь запустить скрипт Google Apps, используя метод API скриптов Google Apps scripts.run
.Однако я получаю сообщение об ошибке 403 со следующим сообщением об ошибке:
{
"error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
Вот заголовки отправляемого POST-запроса:
authorization: Bearer my-oauth-token
Content-Type: application/json
Origin: http://localhost:5000
Referer: http://localhost:5000/static/test.html
User-Agent: Mozilla/5.0...
Я отправляю запрос на https://script.googleapis.com/v1/scripts/my_script_id:run?key=my_api_key
Есть идеи?Я пробовал искать примеры, но все, что я получаю, это те, которые вы клиентские библиотеки API Google, когда мне нужно использовать API REST.Я точно знаю, что мои токены oauth правильны, так как я делаю запросы к другим API Google с таким же токеном.
Это мой текущий поток:
- Перенаправить пользователя на URL-адрес oauthи получите код обмена.URL моего перенаправления
"https://accounts.google.com/o/oauth2/v2/auth?"
"scope=https://www.googleapis.com/auth/drive&"
"state=%s&"
"redirect_uri=redirect_uri&"
"client_id=id&"
"response_type=code&"
"access_type=offline&"
"prompt=consent"
Код обмена для токена обновления Используйте токен обновления для получения токена доступа oAuth.Для этого я отправляю запрос POST по номеру
https://www.googleapis.com/oauth2/v4/token
. Я использую токен доступа для получения миниатюр от слайдов пользователя Google.Этот запрос успешно выполнен. Я отправил запрос на выполнение скрипта Google Apps.Вот краткий код этого запроса:
xhr.open("POST", "https://script.googleapis.com/v1/scripts/id:run", true);
xhr.setRequestHeader("authorization", "Bearer " + oauth_token);
xhr.onload = function() { // do stuff }
xhr.onerror = function() { // print error }
xhr.send(JSON.stringify({
"function": "run",
"parameters": [
id1,
id2
]
}));
Это дает мне 401 ошибку.Я также получаю сообщение «Предварительные заголовки показаны».Я посмотрел на это, и это не похоже на мою проблему.
Это скрипт, который я пытаюсь запустить:
function doGet(e) {
if(!(e.parameter.source && e.parameter.destination)) {
throw new Error("Not all parameters specified");
}
copySlides(e.parameter.source, e.parameter.destination);
}
function copySlides(sourceId, destinationId) {
var src = SlidesApp.openById(sourceId);
var dest = SlidesApp.openById(destinationId);
src.getSlides().forEach(function(slide, index) {
dest.appendSlide(slide);
});
return ContentService.createTextOutput("Done Copying Slides");
}