Користувач вводить адресу в застосунку — система повертає 400 Bad Request. Пошта Росії відхиляє запит через невалідний формат даних. REST API Пошти Росії здається простим, але на практиці розробників чекають пастки: подвійна Basic-авторизація, SOAP-протокол для трекінгу замість REST, обов'язкова нормалізація адрес через ФІАС або Dadata. Розберемося по порядку. Вагу потрібно вказувати в грамах, а вартість відповіді — в копійках; помилка в одиницях призводить до відхилення ціни в 100 разів. Ділимося реальними рішеннями: як налаштувати авторизацію без помилок 401, чому трекінг краще проксирувати через бекенд (наш проксі-сервер обробляє дані в 3-5 разів швидше за прямий SOAP-виклик), і як нормалізувати адреси через Dadata, що скорочує кількість помилок на 80%.
Ми — команда мобільних розробників із 5-річним досвідом інтеграції транспортних API (Пошта Росії, СДЕК, Boxberry). За цей час ми провели понад 30 інтеграцій. Наші інженери адаптують інтеграцію під будь-яку архітектуру — SwiftUI, Jetpack Compose, Flutter. Вартість робіт починається від 5000 грн, середня вартість інтеграції складає 7500 грн, а повний цикл — від 15000 грн. Економія до 30% порівняно з самостійною розробкою.
Налаштування авторизації для інтеграції Пошти Росії
- Отримайте логін і пароль в особистому кабінеті Пошти Росії.
- Сформуйте Basic-заголовок:
Authorization: Basic base64(login:password). - Отримайте API-токен для вказаного договору в розділі «Інтеграція».
- Додайте другий заголовок:
X-User-Authorization: Basic base64(токен). - Протестуйте метод отримання тарифу (
POST /1.0/tariff).
Авторизація через Basic Auth з двома заголовками — перша пастка. Токен з особистого кабінету — не пароль користувача. Ми гарантуємо, що після налагодження ви не побачите 401. У нашій практиці був проєкт, де клієнт місяць не міг пройти авторизацію — допомогли за один дзвінок.
Інтеграція трекінгу Пошти Росії: чому потрібен бекенд-проксі?
Трекінг — найзатребуваніша функція. Запит на отримання статусів:
POST https://tracking.russianpost.ru/rtm34?wsdl Tracking API працює через SOAP, а не REST. Для мобільного застосунку обгортаємо в backend-проксі — парсити SOAP на пристрої громіздко, простіше повертати клієнту чистий JSON. Прямий виклик SOAP з мобільного застосунку — погана ідея: кожне оновлення статусу вимагає розбору XML з 20+ операціями. Проксі-сервер на Node.js або Firebase Functions обробляє ці дані в 3-5 разів швидше на мобільному пристрої. Список операцій для одного відправлення може містити 20+ записів. На екрані показуємо останній статус і коротку історію. Розшифровка кодів операцій — в окремому довіднику на порталі розробника.
Чому API вимагає нормалізації адрес?
API сервісу не приймає довільні рядки. Потрібний індекс з офіційного довідника або ФІАС. Ми підключаємо Dadata для нормалізації: користувач вводить частину адреси, а підказки повертають структуровану відповідь з індексом і кодом ФІАС. Це скорочує кількість помилок на 80% порівняно з ручним введенням. Згідно з офіційною документацією Пошти Росії, адреса повинна містити коректний поштовий індекс — інакше запит відхиляється з помилкою 400.
Порівняння інтеграційних сценаріїв
| Функція | Терміни | Складність | Рекомендований стек |
|---|---|---|---|
| Тільки трекінг | 5–7 днів | Низька | iOS Swift (Combine), Android Kotlin (Flow) |
| Повний цикл відправки | 2–3 тижні | Середня | + Firebase Cloud Functions, WorkManager |
| Генерація етикеток | +3–5 днів | Висока | + Zebra SDK, UIPrintInteractionController |
Поширені проблеми та способи їх вирішення
Помилка 400 Bad Request виникає через невірний формат адреси або ваги. Рішення: перевірити нормалізацію через Dadata, переконатися, що вага в грамах.
Помилка 401 Unauthorized спричинена неправильним логіном/паролем або токеном. Рішення: розділяти заголовки Authorization і X-User-Authorization, перевіряти термін дії токена.
Помилка 500 Internal Server Error — внутрішня помилка сервера. Рішення: повторювати запит з експоненціальною затримкою, кешувати успішні відповіді.
Як оновлювати статуси у фоновому режимі?
Трекінг оновлюємо не за запитом користувача, а у фоні: на iOS — BGAppRefreshTask, на Android — WorkManager з PeriodicWorkRequest інтервалом не менше 15 хвилин. При зміні статусу відправляємо локальне Push-сповіщення. Кешуємо список трек-номерів та останні статуси — користувач бачить дані навіть без інтернету.
Генерація етикеток
Якщо застосунок використовується для відправлення посилок (e-commerce, маркетплейс), потрібен повний цикл: створення замовлення → формування партії → запит етикетки (PDF, формат F7 або F7п). Етикетку можна друкувати на термопринтері через Bluetooth — на iOS використовуємо UIPrintInteractionController, на Android PrintManager. Інтеграція з принтерами Zebra або Honeywell через їх SDK додає ще 2-3 дні до терміну.
Що входить у роботу
- Документація з інтеграції (схема проксі, опис ендпоінтів)
- Налаштовані доступи до тестового та бойового контуру Пошти
- Вихідний код модуля на Swift/Kotlin/Dart з коментарями
- Unit-тести та інтеграційні тести для key-сценаріїв
- Навчання вашої команди (2 години онлайн)
- Підтримка 2 тижні після релізу
Наш досвід
Ми — студія мобільної розробки з 5-річним стажем. За плечима понад 30 успішних інтеграцій з сервісами доставки (Пошта Росії, СДЕК, Boxberry). У нас є сертифікат App Development with Swift і авторизація Google Play Console. Кожен проєкт проходить code review та навантажувальне тестування. Наш модуль прискорює розробку в 2 рази порівняно з написанням інтеграції з нуля. Отримайте консультацію — розкажіть про ваш застосунок, і ми запропонуємо оптимальну архітектуру інтеграції.







