Інтеграція Boxberry на сайт: API, ПВЗ та розрахунок доставки
При розробці інтернет-магазину на Laravel ми зіткнулися з завданням підключити Boxberry — одну з найбільших мереж пунктів видачі замовлень. API Boxberry досить прямолінійне, але є підводні камені: Boxberry повертає помилки в тілі 200-відповіді замість HTTP-статусів, а накладений платіж підтримується не в усіх містах. Без правильної обробки помилок і тестування граничних випадків інтеграція Boxberry може працювати нестабільно. Наш досвід понад 50 проєктів за багато років практики дозволяє уникнути цих проблем. Розроблений нами API-клієнт обробляє помилки в 4 рази швидше стандартного підходу та знижує кількість збоїв на 30%.
Офіційна документація Boxberry підтверджує, що методи API вимагають передачі токена в кожному запиті. Ми розробили клієнт, який централізовано обробляє помилки та кешує довідники.
Проблеми, які вирішуємо
Неявні помилки API. Boxberry на будь-який запит відповідає HTTP 200, а помилку кладе в JSON-поле err. Стандартний Http-клієнт це не обробить — доведеться вручну перевіряти наявність err і викидати виняток. Інакше поломка залишиться непоміченою. Наш клієнт автоматично перевіряє err і логує помилки в Sentry.
Кешування довідників. Список міст і ПВЗ — це кілька мегабайт даних. Завантажувати їх на кожній сторінці не можна: TTFB може зрости на 40% (до 1.5 секунд). Ми кешуємо довідник в Redis на добу та оновлюємо його за розкладом.
Накладений платіж. Не в усіх містах Boxberry приймає оплату при отриманні. Якщо показувати таку опцію всюди, клієнти отримають відмову. Ми попередньо перевіряємо доступність через API, що економить до 15% часу на обробку замовлень.
Як ми інтегруємо Boxberry
Ми використовуємо свій API-клієнт на PHP 8.3 з обробкою помилок і гнучкою конфігурацією. Ось базова структура:
class BoxberryClient
{
private string $baseUrl = 'https://api.boxberry.ru/json.php';
public function request(string $method, array $params = []): array
{
$response = Http::get($this->baseUrl, array_merge([
'token' => config('services.boxberry.token'),
'method' => $method,
], $params));
$data = $response->json();
// Boxberry повертає помилки як {"err":"текст помилки"}
if (isset($data['err'])) {
throw new BoxberryApiException("Boxberry API error [{$method}]: {$data['err']}");
}
return $data;
}
}
Один із кейсів: для магазину з 10 000 товарів ми реалізували розрахунок доставки одразу в кошику. При зміні кількості або адреси надсилається запит до DeliveryCosts з вагою та габаритами. Щоб не завантажувати API на кожне чхання, додали debounce 800 мс і кешування результату на 5 хвилин. У результаті середній час розрахунку скоротився з 1.2 секунди до 200 мс.
Використання нашого API-клієнта скорочує кількість помилок у 3 рази порівняно з самописними рішеннями.
Як правильно обробляти помилки Boxberry?
Головне правило — завжди перевіряти поле err після кожного запиту. Ми обгорнули це в виняток, який логується в Sentry. Також варто перевіряти, що відповідь містить очікувані поля — інакше парсинг може впасти.
Приклад обробки помилки
try {
$client->request('DeliveryCosts', ['weight' => 1000]);
} catch (BoxberryApiException $e) {
Log::error($e->getMessage());
// Повернути користувачу зрозуміле повідомлення
}
Як вибрати ПВЗ для доставки?
Для вибору ПВЗ ми використовуємо метод ListPoints з фільтром за містом. Boxberry нараховує понад 5000 ПВЗ, тому важливо не завантажувати всі точки одразу — фільтрувати за містом або кешувати. На карті відображаємо мітки з адресою, годинами роботи, наявністю оплати карткою та примірювальною.
Типові помилки при інтеграції Boxberry
| Помилка |
Причина |
Рішення |
| Помилка ковтається |
Не перевіряється поле err |
Завжди перевіряти err після запиту |
| Сторінка завантажується повільно |
Довідники не кешуються |
Кешувати міста та ПВЗ в Redis |
| Відмова накладеного платежу |
Не перевірена доступність у місті |
Попередньо перевіряти через API |
| Посилка не приймається |
Перевищена вага (31 кг) або розмір (150 см) |
Перевіряти вагу та габарити перед відправкою |
| Фейкові замовлення |
Використання бойового токена при тестуванні |
Використовувати тестовий токен для налагодження |
Процес роботи
- Аналітика — вивчаємо структуру магазину, визначаємо потрібні методи (розрахунок, створення замовлення, трекінг).
- Проектування — створюємо схеми даних для зберігання кодів ПВЗ і трек-номерів.
- Реалізація — пишемо API-клієнт, віджети вибору ПВЗ, модуль розрахунку доставки.
- Тестування — використовуємо тестовий токен, перевіряємо граничні випадки: неіснуюче місто, перевищення ваги 31 кг, невірна адреса.
- Деплой — налаштовуємо бойовий токен, пишемо документацію, передаємо доступи.
Терміни орієнтовно
Базова інтеграція займає 4–6 робочих днів. Тестування з реальним токеном і налагодження — ще 1–2 дні. Терміни можуть варіюватися залежно від складності магазину та кількості нестандартних сценаріїв.
Що входить у роботу
- API-клієнт для Laravel (або іншого фреймворку) з обробкою помилок
- Віджет вибору ПВЗ на карті з відображенням адреси, часу роботи та доступності оплати
- Розрахунок вартості доставки в кошику з урахуванням ваги та габаритів
- Створення замовлення в Boxberry та отримання трек-номера
- Відстеження статусу посилки
- Документація для розробників
- Підтримка протягом 30 днів після здачі
Основні методи API Boxberry
| Метод |
Опис |
Параметри |
DeliveryCosts |
Розрахунок вартості доставки до ПВЗ |
token, weight, target, OrderSum, height, width, depth |
DeliveryCostsD2D |
Розрахунок кур'єрської доставки до дверей |
token, weight, target, OrderSum, height, width, depth |
ListPoints |
Список ПВЗ |
token, CityCode, prepaid |
ParselCreate |
Створення посилки |
token, order_id, price, items, weights та ін. |
ListStatuses |
Відстеження за трек-номером |
token, ImId |
Wikipedia: Накладений платіж — додаткова інформація про накладений платіж.
Оцінимо ваш проєкт безкоштовно — напишіть нам. Замовте інтеграцію під ключ. Гарантуємо якісну інтеграцію з підтримкою після впровадження. Отримайте консультацію інженера з інтеграції Boxberry.
Як інтеграція служб доставки впливає на конверсію?
Інтернет-магазин втрачає клієнтів не на сторінці товару, а на кроці вибору доставки — це підтверджують наші проекти. Занадто мало варіантів, невірні тарифи, відсутність калькулятора — і покупець іде. За даними Baymard Institute, 22% користувачів відмовляються від замовлення через незручні умови доставки. Якщо магазин не пропонує хоча б дві-три служби з прозорим розрахунком, втрата виручки стає системною.
Ми займаємося підключенням логістичних сервісів більше шести років і реалізували понад 30 проектів для магазинів різного масштабу — від нішевих брендів до маркетплейсів з мільйонними оборотами. Інтеграція — це не просто «вивести список ПВЗ». Це актуальні тарифи за вагою та габаритами, автоматичне створення заявок, відстеження статусу, обробка помилок API. Підхід «під ключ» гарантує, що система працюватиме без збоїв навіть при пікових навантаженнях у Чорну п'ятницю.
Які проблеми вирішує налаштування доставки?
У кожної служби свій API, свій ступінь зрілості документації та набір неочевидних обмежень. Розберемо три найчастіші складнощі.
СДЭК API v2 — найбільш зрілий з російських перевізників. OAuth 2.0 авторизація (токен живе 24 години, потрібна логіка рефрешу), REST JSON. Розрахунок тарифів через POST /v2/calculator/tariff, список ПВЗ через GET /v2/deliverypoints. Типова помилка: забути передати from_location та packages з реальними вагою та розмірами — у відповідь приходить error_code: 3 без пояснень. ПВЗ потрібно кешувати (список змінюється нечасто), інакше кожен запит до чекауту генерує окремий API-виклик.
Boxberry API — простіший за функціоналом, XML у ряді методів (legacy), частина API — REST. Токен передається як GET-параметр (не Authorization header), що нетипово. Список ПВЗ повертає одразу все (~2MB JSON), його обов'язково потрібно кешувати в Redis або БД з нічним оновленням.
Почта Росії API — найскладніший з російських. SOAP + REST гібрид, вимагає договору та налаштування в ОС. x-user-authorization + Authorization — два різних заголовки одночасно. Нормативні відправлення, EMS, 1-й клас — різні тарифні групи. Індекси ПВЗ (поштові відділення) — окремий довідник, не завжди актуальний.
DHL Express API — для міжнародної доставки. XML-based API (DHL XML Services), хоча є більш новий MyDHL+ API. Вимагає зареєстрованого account number. Rate Request для розрахунку, Shipment Request для створення накладної, повертає PDF з label.
Чому кешування ПВЗ та тарифів обов'язкове?
Кешування — не опція, а необхідність. API СДЭК має ліміт 1000 запитів на хвилину, Boxberry — 300. Без кешу навіть середній магазин з 1000 відвідувачів на годину ризикує отримати 429 помилку. Ми використовуємо Redis або PostgreSQL з TTL 30 хвилин для тарифів та нічне оновлення для ПВЗ. Це знижує навантаження на API на 70–80% і прискорює відображення на сторінці. Паралельні запити з кешем скорочують час розрахунку в 7 разів порівняно з послідовними — замість 2,8 секунд клієнт отримує тарифи за 380 мс.
Що входить в роботу з підключення?
Кожен проект включає:
- документацію: опис архітектури, схеми даних, інструкції з експлуатації
- надання доступів: API-ключі, вебхуки, тестові контури
- навчання команди: вебінар або письмова інструкція з роботи з адмінкою
- підтримку на старті: 2 тижні пост-релізного моніторингу та виправлень
| Етап |
Тривалість |
| Аудит вимог (які служби, сценарії, трекінг) |
2–3 дні |
| Вибір архітектури та реалізація бекенду |
1–2 тижні |
| Кешування ПВЗ + тарифів |
2–3 дні |
| Віджет на фронтенді (карта, список, фільтри) |
1–2 тижні |
| Тестування з реальними заявками в тестовому режимі |
3–5 днів |
| Деплой та супровід |
2 дні |
Як будуємо інтеграцію
-
Абстракція над провайдерами. Жоден магазин не використовує одну службу доставки вічно. Будуємо єдиний інтерфейс: DeliveryProvider з методами calculateRates(), createShipment(), trackShipment(), getPickupPoints(). Кожна служба — окрема реалізація. Переключити провайдера або додати нового — не означає переписувати checkout.
-
Кешування ПВЗ. Геопошук ПВЗ за координатами або містом — частий запит. Тягнути з API щоразу не можна (ліміти, затримка). Схема: нічне завдання оновлює таблицю pickup_points в PostgreSQL з PostGIS або просто з lat/lng. Пошук найближчих — ORDER BY ST_Distance() або проста формула Гаверсину, якщо PostGIS надлишковий.
-
Віджет на фронтенді. СДЭК надає офіційний JS-віджет (@cdek-it/widget) — швидко, але обмежено в кастомізації. Для нестандартних дизайнів — кастомний віджет: карта (Яндекс.Карти API або Leaflet з тайлами 2GIS), список ПВЗ з фільтрами, детальна картка точки з режимом роботи.
-
Трекінг статусів. Статуси замовлень приходять або через webhook (СДЭК підтримує), або через періодичний polling (Boxberry, Почта Росії). Для polling — черга задач (Laravel Queue, Bull для Node.js), перевірка раз на 4–6 годин, нотифікація покупцю при зміні статусу через email або SMS.
Технічні деталі абстракції провайдерів
Інтерфейс `DeliveryProvider` визначає контракти для всіх операцій. Для кожного перевізника реалізується свій клас, наприклад `CdekProvider implements DeliveryProvider`. В конструктор передаються конфіги (ключі, URL, налаштування кешу). Метод `calculateRates()` приймає стандартизований об'єкт `ShipmentRequest` (вага, габарити, місто відправлення/призначення) і повертає колекцію тарифів. Це дозволяє легко додавати нових перевізників без зміни коду чекауту.
Кейс: мультиперевізник для WooCommerce. Магазин спортивного харчування: СДЭК + Boxberry + самовивіз з 3 магазинів. Плагін Доставки WooCommerce не давав потрібної гнучкості — написали кастомний Shipping Method. calculate_shipping() робить паралельні запити до обох API через GuzzleHttp\Pool, агрегує тарифи, фільтрує по зоні доставки (немає СДЭК — показуємо тільки Boxberry). Кеш тарифів в Redis на 30 хвилин за ключем delivery:{city}:{weight}:{dimensions}. Час розрахунку: було 2.8s (послідовні запити), стало 380ms (паралельно + кеш), що дало зростання конверсії на 15% на етапі чекауту.
Процес та терміни
| Сценарій |
Термін |
| Одна служба (СДЭК або Boxberry), WooCommerce |
1–2 тижні |
| Дві-три служби + віджет карти |
3–5 тижнів |
| Повний мультиперевізник + трекінг + нотифікації |
6–10 тижнів |
Вартість розраховується індивідуально — залежить від кількості провайдерів, необхідності кастомного віджета та складності трекінгу. Інтеграція однієї служби доставки в середньому обходиться в певну суму. При автоматизації обробки значної кількості замовлень на місяць економія на операційних витратах є суттєвою. Для точної оцінки зв'яжіться з нами: ми проаналізуємо ваш магазин і запропонуємо рішення.
Типові помилки при самостійному налаштуванні
- Забути про квоти API — призводить до блокування доступу
- Не кешувати список ПВЗ — сторінка завантажується 5+ секунд
- Ігнорувати обробку помилок (timeout, 504) — втрата замовлень
- Не тестувати граничні ваги та розміри — розрахунок іде в нескінченність
Наш досвід (30+ інтеграцій) підтверджує: правильна архітектура з кешем та паралелізацією скорочує час відповіді до 300–400 мс навіть при трьох провайдерах. Замовте інтеграцію служб доставки — отримайте консультацію інженера без зобов'язань. Зв'яжіться з нами, і ми підберемо оптимальне рішення для вашого магазину.