API Нової пошти, Шлях до створення клієнтами експрес накладних Нової Пошти через веб інтерфейс за мене.

Зміст
Частина 1

Всім привіт. По моєму задуму це один з модулів , а може комусь буде просто окремим інстурментом який допоможе зняти навантаження при створенні накладних НП і передати цю справу клієнту.

Реалізація планується через сервер на node.js , від клієнта ми отримуємо дані про його місто, адресу, номер телефону та ПІБ , а на стороні серверу створюється накладна і з’являється у Вашому додатку НП.

Буду поступово доповнювати шматками кода цю статтю, або буду створювати окремі довгочити з “модулями” отримання даних, та відправляти сюди посилання на них.

Спочатку Вам треба буде створити свій ключ для роботи з АПІ Нової Пошти

Створити або скопіювати api key можна за посиланням https://new.novaposhta.ua/ , після входу чи реєстрації заходимо :

  • Налаштування / Безпека / СТВОРИТИ КЛЮЧ (або копіюємо створений якщо нема або строк не вийшов).

Де знайти \ створити ключ АПІ \API Нової Пошти

Звернутися до документації можна за адресою https://developers.novaposhta.ua/

Ідентифікатор (REF) контактної особи

Я сам не дуже файний розробник, та любитель читати апі, та перше з чим я стикнувся це де взяти.

Параметр

Тип

Опис

Ref

string[36]

Ідентифікатор (REF) контактної особи

Бо коли я зміг отримати місто, там теж є Ref, та вони відрізняються від того що я отримав завдяки виводу в консоль завдяки цьому коду.

Вивід в консоль Ідентифікатор (REF) контактної особи Нової пошти за допомогою Java Script та POST

//Отримуємо Ref контрагета


async function getCounterparties(apiKey, counterpartyProperty, page) {
  try {
    const url = "https://api.novaposhta.ua/v2.0/json/";
    const requestBody = {
      apiKey: apiKey,
      modelName: "Counterparty",
      calledMethod: "getCounterparties",
      methodProperties: {
        CounterpartyProperty: counterpartyProperty,
        Page: page,
      },
    };

    const response = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(requestBody),
    });

    const responseData = await response.json();

    if (responseData.success) {
      console.log("Дані контрагента:");
      console.log(responseData.data);
    } else {
      console.error(
        "Помилка при отриманні даних контрагента:",
        responseData.errors
      );
    }
  } catch (error) {
    console.error("Помилка виконнаня запиту:", error);
  }
}

// Вкажіть API ключ
const apiKey = "Ваш апі ключ";

// Вкажіть тип контрагента (Sender чи Recipient) та сторінку для запиту
const counterpartyProperty = "Sender"; // чи 'Recipient' якщо отримувач
const page = "1";

getCounterparties(apiKey, counterpartyProperty, page);

Дані що отримуємо "Sender" :

Дані контрагента:
[{…}]
0: 
City: "00000000-0000-0000-0000-000000000000"
CityDescription: ""
Counterparty: "208a60fa-45fc-48ef-98e5-55f0854ebf4f"
CounterpartyFullName: ""
CounterpartyType: "PrivatePerson"
Description: "Приватна особа"
EDRPOU: ""
FirstName: "Приватна особа"
LastName: ""
MiddleName: ""
OwnershipFormDescription: ""
OwnershipFormRef: ""
Ref: "6ab27d93-11f1-11eb-8513-b87601659df5"
TrustedCounterpartyType: ""
[[Prototype]]: Object
length: 1
[[Prototype]]: Array(0)

Якщо встановлюємо “Recipient”

const counterpartyProperty = "Recipient";
(2) [{…}, {…}]
0: 
City: "00000000-0000-0000-0000-000000000000"
CityDescription: ""
Counterparty: "208a60fa-45fc-48ef-98e5-55f0854ebf4f"
CounterpartyFullName: ""
CounterpartyType: "PrivatePerson"
Description: "Приватна особа"
EDRPOU: ""
FirstName: "Приватна особа"
LastName: ""
MarketplacePartnerDescription: "Мобільний додаток"
MiddleName: ""
OwnershipFormDescription: "Фізична особа"
OwnershipFormRef: "d558bfcb-7456-11df-ad53-000c74116aa7"
Ref: "6ab27d93-11f1-11eb-8513-b87601659df5"
[[Prototype]]: Object
1: 
City: "8d5a980d-391c-11dd-90d9-001a92566626"
CityDescription: "Київ"
Counterparty: "f00c4ba3-bfd2-11e7-ba66-004556b2fc3d"
CounterpartyFullName: "NP GLOBAL СLАSSІС С2С"
CounterpartyType: "Organization"
Description: "NP GLOBAL CLASSIC C2C"
EDRPOU: "8803034955"
FirstName: "NP GLOBAL CLASSIC C2C"
LastName: ""
MarketplacePartnerDescription: "Мобільний додаток"
MiddleName: ""
OwnershipFormDescription: "ІншФорми"
OwnershipFormRef: "84a5539e-4f94-11e8-a3de-004556b2fc3d"
Ref: "ad302654c-698f-11ee-a60f-48df37b921db"
[[Prototype]]: Object
length: 2
[[Prototype]]: Array(0)

Ще як я отримував Місто та адреси відділень з поштоматами для отримання сіті реф та іншого, з можливістю вводу даних

Місто та ручне введення:

      <label for="city">Місто:</label>
      <input list="city-list" id="city" name="city" />
      <datalist id="city-list"></datalist>
function updateCityList(inputValue) {
  var cityList = document.getElementById("city-list");
  cityList.innerHTML = "";

  fetch("https://api.novaposhta.ua/v2.0/json/", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify({
      apiKey: "Ваш ключ апі",
      modelName: "Address",
      calledMethod: "searchSettlements",
      methodProperties: {
        CityName: inputValue,
      },
    }),
  })
    .then((response) => {
      if (!response.ok) {
        throw new Error(
          "Помилка отримання списку населених пунктів:",
          response.status
        );
      }
      return response.json();
    })
    .then((data) => {
      data.data[0].Addresses.forEach((city) => {
        var option = document.createElement("option");
        option.text = city.Present;
        option.value = city.Present;
        cityList.appendChild(option);
      });

      console.log("Відповідь від сервера (наеслені пункти):", data);


      updateOfficeList(data.data[0].Addresses[0].DeliveryCity);
    })
    .catch((error) => {
      console.error(error);
    });
}

document.getElementById("city").addEventListener("input", function () {
  var inputValue = this.value;
  updateCityList(inputValue);
});

Адреси відділень та поштоматів обраного міста, ручне введення та випадаючий список:

      <label for="office">Номер відділення:</label>
      <input list="office-number" id="office" name="office" />
      <datalist id="office-number"></datalist>
function updateOfficeList(cityRef) {
  var officeList = document.getElementById("office-number");
  officeList.innerHTML = "";

  fetch("https://api.novaposhta.ua/v2.0/json/", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify({
      apiKey: "Ваш апі ключ",
      modelName: "Address",
      calledMethod: "getWarehouses",
      methodProperties: {
        CityRef: cityRef,

        Language: "UA",
      },
    }),
  })
    .then((response) => {
      if (!response.ok) {
        throw new Error(
          "Помилка при отриманні адрес офісів та поштоматів:",
          response.status
        );
      }
      return response.json();
    })
    .then((data) => {
      data.data.forEach((office) => {
        var option = document.createElement("option");
        option.text = office.Description;
        option.value = office.Description;
        officeList.appendChild(option);
      });

      console.log("Відповідь від сервера (офіси та поштомати):", data);
    })
    .catch((error) => {
      console.error(error);
    });
}

document.getElementById("office").addEventListener("input", function () {
  var officeValue = this.value;
  console.log("Обране відділеня:", officeValue);
});

Поки що на цьому все :) так ви зможете отпримати необхідні данні тільки маючі api key Нової пошти.

Пішов розбиратися далі ;)
Дані деякі були змінені.

ПОСИЛАННЯ НА ЧАСТИНУ 2

https://drukarnia.com.ua/articles/api-novoyi-poshti-shlyakh-do-stvorennya-kliyentami-ekspres-nakladnikh-novoyi-poshti-cherez-veb-interfeis-za-me-NEAjq


Підпишіться щоб не пропустити подальші мої спроби створення такого веб інтерфейсу де на стороні серверу у вас будуть ваші данні в яку будуть приходити дані від клієнта для автостворення накладної )

Також я буду радий якщо підтримаєте мене донатом на монобанку.


Одяг для котів сфінксів як для власних дітей https://www.instagram.com/floksi_pet/
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Floksi Pet
Floksi Pet@Floksipet

Сфінкси + программування :D

475Прочитань
2Автори
9Читачі
На Друкарні з 12 квітня

Більше від автора

  • 3д модель в браузері

    Бібліотека за допомогою якої можете інтегрувати 3д модель, або створити її математично, створити частинки і анімацію до них, фізику і будь що інше. потужна і цікава штука яка не лишить байдужими будь кого.

    Теми цього довгочиту:

    3д Графіка
  • FaviPaint.com - малювання іконок та фавіконок :) https://favipaint.com/

    Різноманітні інструменти які мають закрити більшість потреб при створенні фавікон та збереженні його в форматі *.ico чи *.png, скачати іконку з іншого сайта якщо вона дотсупна в коді сторінки.

    Теми цього довгочиту:

    Favicon

Вам також сподобається

Коментарі (2)

Я теж не дуже шарю, чат GPT в допомогу :) З комп’ютера можете зайти на https://jsbin.com/ щоб протестувати код. Вмикайте через F12 та дивіться консоль :) перша частина ставите в body вікна HTML , а сам скрипт в вікно JavaScript. Та запускайте ) Не забувайте вставляти апі ключ з особистого кабінету Нової Пошти. Дякую за побажання <3

Вам також сподобається