Ошибка авторизации со скриптом Google Apps - PullRequest
3 голосов
/ 08 октября 2019

У меня нет опыта работы со скриптом Google Apps. Мне нужно связаться с внешним API, но я продолжаю получать ответ {"error": "Authentication fail"}.

Я ценю, если кто-то может дать мне подсказку, что я должен изменить в своем коде. Я думаю, что я написал часть авторизации неправильно (в документации API написано: Authorization: WebpageToken realm = "api", apikey = "testkey123")

Ниже приведена документация API, которую я пытаюсь получитьна работу.

«API-документация: некоторые функции интерфейса: обязательства, сотрудники, корпорации, клиенты /: id

Связь через API выполняется RESTful-введите HTTPS-запросы, которые отправляются по адресу: https://the.webpage.com/{CUSTOMER_ID}/api/{ENDPOINT} Где {CUSTOMER_ID} - это персональный идентификатор, а {ENDPOINT} - это функция интерфейса. Формат ответа: JSON.

Пример запроса (из документации):

GET /1200/api/customers/1 HTTP/1.1
Host: the.webpage.com
Accept: application/json
Authorization: WebpageToken realm="api", apikey="testkey123"

Я попытался найти правильныйспособ написания авторизации с помощью поиска в stackoverflow и документации, но безуспешно.

МОЙ КОД в Google Apps Сценарий:

function getCorporates(){
  var ENDPOINT = "corporates";
  var apiKey = ”testkey123”; //example
  var CUSTOMER_ID = 1234; //example

  var options = {
    "method":"GET",
    "muteHttpExceptions": true,
    "Authorization":{
      "WebpageToken":{
        "realm":"api",
        "apikey" :apiKey     
         }
    }
  };
  var url = "https://the.webpage.com/" + CUSTOMER_ID + "/api/" + ENDPOINT;
  var response = UrlFetchApp.fetch(url, options); // get api endpoint
  var json = response.getContentText(); // get the response content as text
  Logger.log(json); //log data to logger to check
}

Этот код должен возвращать объект JSON. В настоящее время я получаю ответ {"error": "Ошибка аутентификации"}.

Обратите внимание, что мне пришлось "скрыть" название компании, поэтому в этом случае оно было изменено на the.webpage.com, который не являетсяреальный адрес API, на который я пытаюсь позвонить.

Спасибо за помощь!

1 Ответ

2 голосов
/ 08 октября 2019

Вам необходимо добавить Authorization в качестве заголовка , что делается так:

var headers = {
  "Authorization" : "Webpage realm='api', apikey='testkey123'"
};

var params = {
  "method": "GET",
  "muteHttpExceptions": true,
  "headers": headers
};

var response = UrlFetchApp.fetch(url, params);

Другими словами, заголовки HTTP являются их собственным объектом в params объект (из моего примера, options из вашего примера).

См. документацию [0] в разделе «Расширенные параметры»

[0] https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...