Почему CDEK выдает v2_bad_request?

Я написал следующий скрипт для работы калькулятора:
function logInCDEK() {
  var url = "https://api.edu.cdek.ru/v2/oauth/token"
  let options = {
    method: "POST",
    muteHttpExceptions: true,
    headers: {
      "Content-type": "application/json",
      "Accept": "application/json"
    }
  };

  let queryParams = {
      grant_type : "client_credentials",
      client_id : "EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI",
      client_secret : "PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG",
  };

  url+=Object.keys(queryParams).length?`?${getQueryString(queryParams)}`:"";

  let response = UrlFetchApp.fetch(url, options);
  return JSON.parse(response.getContentText());
}

/**
 * Преобразует object в query-строку для подстановки в url
 *
 * @author Boew Grigory (ff.nspu@gmail.com)
 * @param {Object} data Объект для преобразования
 * @return Возвращает query строку
 */
function getQueryString(payload) {
  let payloadData = Object.entries(payload);
  return encodeURI(
    payloadData
      .filter(o=>o[1]!==undefined)
      .map(v=>`${v[0]}=${v[1]}`)
      .join("&")
    );
};

function getCDEK(pointA, pointB, userId) {
  var token = logInCDEK().access_token;
  var url = "https://api.edu.cdek.ru/v2/calculator/tarifflist";

  var options = {
    method: "POST",
    muteHttpExceptions: true,
    headers: {
      "Content-type": "application/json",
      "Accept": "application/json",
      "Authorization": "Bearer " + token,
    },
    "type": 1,
    "currency": 1,
    "lang": "rus",
    "from_location": {
        "code": 270
    },
    "to_location": {
        "code": 44
    },
    "packages": [
        {
            "height": 10,
            "length": 10,
            "weight": 4000,
            "width": 10
        }
    ]
  }

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response)
  return response;
}


Буду благодарен, если кто-то поможет мне
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
У Вас та же ошибка.
Все эти параметры должны как-то передаваться. Скорее всего так:
function getCDEK(pointA, pointB, userId) {
  var token = logInCDEK().access_token;
  var url = "https://api.edu.cdek.ru/v2/calculator/tarifflist";

let payload = {
    "type": 1,
    "currency": 1,
    "lang": "rus",
    "from_location": {
        "code": 270
    },
    "to_location": {
        "code": 44
    },
    "packages": [
        {
            "height": 10,
            "length": 10,
            "weight": 4000,
            "width": 10
        }
    ]
};

  var options = {
    method: "POST",
    muteHttpExceptions: true,
    headers: {
      "Content-type": "application/json",
      "Accept": "application/json",
      "Authorization": "Bearer " + token,
    },
    payload : payload, // или JSON.strigify(payload), проверяйте
  }

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response)
  return response;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы