Інтеграція 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.







