Интеграция 1С-Битрикс со службой доставки UkrPoshta (Украина)
Мы часто встречаем магазины, которым нужно доставлять товары в населённые пункты, где нет отделений Новой Почты. UkrPoshta — единственный государственный оператор, покрывающий всю Украину, включая сёла и маленькие города. После реструктуризации API стал современным: REST с авторизацией по JWT. Однако разработчики часто спотыкаются на обязательном последовательном создании объектов (адрес → клиент → отправление) и на парсинге адресной строки. Разберём реализацию на Битрикс. Каждый этап требует аккуратного подхода, иначе интеграция может затянуться на недели. Мы накопили опыт более чем с 10 проектами, где UkrPoshta была основным перевозчиком, и готовы поделиться деталями.
Как авторизоваться в API UkrPoshta?
Авторизация выполняется через Bearer-токен в заголовке Authorization: Bearer <token>. Чтобы получить токен, отправьте POST-запрос на /api/2.0/client-token, передав ключ из личного кабинета. Базовый URL API: https://www.ukrposhta.ua/ecom/0.0.1. Токен имеет ограниченный срок действия — его нужно периодически обновлять. В Битрикс удобно хранить его в настройках модуля и обновлять через агент. Таймаут токена — 30 минут, поэтому агент должен запускаться не реже чем раз в 25 минут. Проверьте, чтобы в настройках хостинга не было ограничения на выполнение агентов.
Создание отправления
UkrPoshta требует последовательного создания объектов: адрес → клиент → отправление. Ниже пример обработчика на PHP для компонента bitrix:sale.order.ajax:
class UkrPoshtaHandler
{
public function createShipment(\Bitrix\Sale\Shipment $shipment): string
{
$order = $shipment->getOrder();
$props = $order->getPropertyCollection();
// Шаг 1: создать адрес получателя
$addr = $this->apiPost('/addresses', [
'postcode' => $props->getItemByOrderPropertyCode('ZIP')?->getValue(),
'city' => $props->getItemByOrderPropertyCode('CITY')?->getValue(),
'street' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
'houseNumber' => '1',
]);
$addressUuid = $addr['uuid'];
// Шаг 2: создать получателя
$client = $this->apiPost('/clients', [
'firstName' => $this->parseFirstName($props),
'lastName' => $this->parseLastName($props),
'phoneNumber' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
'type' => 'INDIVIDUAL',
'addressId' => $addressUuid,
]);
$clientUuid = $client['uuid'];
// Шаг 3: создать отправление
$response = $this->apiPost('/shipments', [
'sender' => ['uuid' => $this->getOption('SENDER_UUID')],
'recipient' => ['uuid' => $clientUuid],
'deliveryType' => 'W2D',
'weight' => max((int)$shipment->getWeight(), 20),
'length' => (int)$this->getOption('DEFAULT_LENGTH', 20),
'width' => (int)$this->getOption('DEFAULT_WIDTH', 20),
'height' => (int)$this->getOption('DEFAULT_HEIGHT', 5),
'declaredPrice' => (int)round($order->getPrice()),
'description' => 'Товар',
'paidByRecipient' => false,
]);
return $response['uuid'] ?? '';
}
}
paidByRecipient: false — магазин оплачивает доставку. При true — получатель при вручении. Обратите внимание: UkrPoshta API возвращает ошибку, если поля houseNumber нет. В реальном проекте его нужно брать из свойства заказа, иначе парсинг может не сработать.
Типы доставки
| Код |
Описание |
W2W |
Склад → Отделение |
W2D |
Склад → Дверь |
D2W |
Дверь → Отделение |
D2D |
Дверь → Дверь |
Выбор типа влияет на стоимость и сроки доставки. По опыту, чаще всего используют W2D для интернет-магазинов — клиентам удобнее получать на дом.
Как реализовать трекинг отправлений?
После создания отправления сохраните его UUID. Затем настройте агент в Битрикс, который раз в 3–4 часа вызывает GET /shipments/{uuid}/statuses. Полученные статусы можно записывать в лог или отображать в административной панели заказа. Вот простая реализация:
// Агент вызывается каждые 3 часа
public function trackShipments(): string
{
$shipments = \Bitrix\Sale\Shipment::getList([
'filter' => ['!UKRPOSHTA_UUID' => null, '!=STATUS' => 'DELIVERED']
]);
foreach ($shipments as $shipment) {
$statuses = $this->apiGet("/shipments/{$shipment['UKRPOSHTA_UUID']}/statuses");
// Обновляем статус в заказе
if (!empty($statuses)) {
\Bitrix\Sale\Order::update($shipment['ORDER_ID'], [
'UKRPOSHTA_STATUS' => end($statuses)['code']
]);
}
}
return 'trackShipments();';
}
Такой подход позволяет видеть актуальное положение посылки без ручного обновления.
Получение марки
// Печать марки — кнопка в административной части заказа Битрикс
public function getLabel(string $shipmentUuid): string
{
$response = $this->apiGet("/shipments/{$shipmentUuid}/label");
return base64_decode($response['pdf_base64'] ?? '');
}
Метод возвращает PDF-файл, который можно сохранить или отобразить пользователю. В административной части удобно добавить кнопку «Печать марки» прямо в карточку отгрузки.
Что нужно знать о международных отправлениях?
Для направлений UA→BY, UA→PL и других: таможенная декларация CN22/CN23, ограничение веса до 30 кг, обязательный HS-код товара. Рекомендуется добавить пользовательское свойство UF_HS_CODE к товарам в инфоблоке и передавать его в декларацию автоматически. Без этого UkrPoshta отклонит запрос. Также обратите внимание: для международных отправлений требуется указать код country в адресе получателя и страны отправления.
Особенности адресного поля
УкрПошта ожидает раздельные поля: улица, номер дома, квартира. В Битрикс адрес обычно хранится одной строкой. Нужно либо добавить отдельные поля в форму заказа, либо реализовать парсинг строки адреса. Второй подход даёт ~85% точности, первый — надёжнее. В наших проектах мы используем кастомное свойство заказа «Улица», «Дом», «Квартира» — это исключает ошибки распознавания. Например, при парсинге часто путается номер дома с квартирой, особенно в адресах типа «ул. Гагарина, д. 10, кв. 5».
Что входит в интеграцию под ключ
- Настройка модуля доставки и получение токенов
- Создание пользовательских свойств заказа для раздельного адреса
- Реализация обработчика отправления с вызовом API UkrPoshta
- Формирование и печать накладной в формате PDF
- Настройка фонового трекинга (агент с периодичностью 3-4 часа)
- Интеграция таможенной декларации для международных посылок
- Подготовка документации и передача доступов
Этот список покрывает все типовые сложности. Мы гарантируем стабильную работу обмена и полную поддержку после внедрения. Если вам нужна интеграция с UkrPoshta — свяжитесь с нами для оценки вашего проекта. Получите консультацию по этапам и срокам, чтобы начать без лишних задержек.
Сроки
| Этап |
Срок |
| Базовая интеграция (создание отправления + печать марки) |
4–5 дней |
| Добавление трекинга |
+1–2 дня |
| Международные отправления (таможня, CN22/CN23) |
+2 дня |
Сроки указаны при условии готовности всех доступов со стороны клиента. В среднем проект занимает одну неделю. Мы работаем на Битрикс более 6 лет и реализовали более 10 интеграций с украинскими почтовыми службами. Обращайтесь — поможем настроить доставку через UkrPoshta в вашем магазине.
Интеграция доставки: от разрозненных API к единому калькулятору за 5 дней
Покупатель бросает корзину на этапе доставки — не видит расчёта или видит заведомо неверную цену. Каждый такой случай теряет конверсию. Автоматизация логистики в 1С-Битрикс решает эту проблему: мы подключаем службы доставки так, чтобы цена показывалась мгновенно, а трекинг обновлялся без участия менеджера. За 8 лет реализовано более 50 проектов с каталогами от 500 до 100 000 SKU. Среднее время подключения одной транспортной компании — 4 дня.
Как ускорить подключение служб доставки к 1С-Битрикс?
Главная сложность — не сам вызов API, а адаптация к логике каждого перевозчика. СДЭК, Boxberry, Почта России, ПЭК, DPD — у каждого свой формат запроса, тарификация и обработка ошибок. Мы используем готовые адаптеры под каждую ТК, что сокращает время интеграции втрое по сравнению с реализацией с нуля. Развернутый кейс: интернет-магазин товаров для дома (15 000 товаров) — подключили СДЭК и Boxberry за 5 дней, автоматизировали расчёт и создание заказов. Обращения в поддержку по доставке снизились на 60%, средний чек вырос на 8% за счёт индикатора бесплатной доставки.
Почему API каждой транспортной компании — отдельный квест?
СДЭК — объёмный вес и карта ПВЗ
API v2 (/api/v2/calculator/tarifflist) принимает габариты, вес и адреса — возвращает все доступные тарифы. Подводные камни: объёмный вес рассчитывается по формуле (Д × Ш × В) / 5000. Если физический вес 2 кг, а объёмный 8 кг — СДЭК берёт по объёмному. Не учтёте в калькуляторе — покупатель увидит одну цену, а заплатит другую. Карта ПВЗ загружается через /deliverypoints. Виджет СДЭК можно встроить, но он конфликтует со стилями Битрикс — рисуем свою карту на Яндекс.Картах. Автоматическое создание заказа через /api/v2/orders — при оформлении заявка улетает в СДЭК, возвращается трек-номер. Печать накладных и этикеток из админки — через /api/v2/print/orders. Тарифы: склад-склад, склад-дверь, дверь-дверь, экспресс, постамат.
Boxberry — широкая сеть ПВЗ в регионах
Самая широкая сеть пунктов выдачи в малых городах. API проще, чем у СДЭК, но есть нюансы с наложенным платежом и частичным выкупом. Карта ПВЗ с фильтрацией: примерка, оплата картой, работа в выходные. Обязательно проверяем корректную обработку ответа 0 при отсутствии ПВЗ.
Почта России — стабильность ценой скорости
API «Отправка» — расчёт стоимости, автоформирование бланков ф.103 и ф.116, трекинг по трек-номеру. Тарифы: посылка, бандероль, EMS. Международные отправления. API медленнее коммерческих ТК — закладываем таймауты 10 секунд, используем асинхронные агенты Битрикс для обновления статусов.
ПЭК — тяжёлые грузы и сбор
Когда нужно отправить диван или оборудование. Расчёт сборных грузов, страхование, обрешётка. Доставка до терминала и от двери до двери. Индексы терминалов ПЭК подгружаем в инфоблок для автоподстановки.
DPD — экспресс-доставка с временными слотами
DPD по России и за рубеж. Доставка в выбранный временной интервал, возврат подписанных документов. В расчёте учитываем объёмный вес по формуле (Д×Ш×В)/4000 — отличие от СДЭК.
Пример: типичные ошибки при интеграции Boxberry
Отсутствие фильтрации ПВЗ по признаку `onlyPrepaid` приводит к ошибкам при наложенном платеже. Игнорирование параметра `partialReturn` ломает частичный выкуп. API возвращает код города в формате "770000000000" — требуется маппинг на index города.
Как объединить разные ТК в едином калькуляторе?
Используем гибридный подход: модуль-агрегатор, который маршрутизирует запросы к разным API и нормализует ответы. Это позволяет сравнивать тарифы в реальном времени без переключения между личными кабинетами. В ответе модуля — единая структура: название тарифа, цена, срок, тип доставки. Кэширование тегированное: при изменении настроек модуля очищается только кэш расчёта для выбранного города, остальное остаётся. Событие OnBeforeDeliveryCalculate вешаем на кастомный обработчик — так подменяем стандартную логику доставки.
Расчёт стоимости: какие грабли встречаются?
Автоматический калькулятор суммирует физический и объёмный вес товаров в корзине, прибавляет вес упаковки, выбирает наибольший. Звучит просто, но:
- Габариты должны быть заполнены у каждого товара. Нет габаритов — нет расчёта. На каталоге в 10 000 SKU обязательно найдутся товары без размеров — для них заводим дефолтные значения (например, 0.1×0.1×0.1 м) и предупреждаем менеджера через почтовое событие.
- Промоакции и пороги бесплатной доставки — гибкая настройка: по сумме заказа, для VIP-клиентов, при конкретном способе оплаты. Реализуем через пользовательские свойства корзины.
- Индикатор «До бесплатной доставки осталось N руб.» — простая штука, но поднимает средний чек на 5–12%. Вычисляем по сумме корзины и ближайшему порогу, выводим в шаблоне корзины.
Как автоматизировать трекинг, самовывоз и курьерскую доставку?
Трекинг. Автоматический опрос API транспортных компаний — агент Битрикс каждые 30 минут проверяет статусы заказов, у которых STATUS_DELIVERY != 'DELIVERED'. При изменении — обновление статуса заказа в системе и уведомление покупателю (email, SMS, push). Встроенная страница трекинга в личном кабинете — покупателю не нужно идти на сайт ТК. Карта с текущим местоположением, прогнозируемая дата доставки, возможность переадресации.
Самовывоз. Собственные точки выдачи на карте: адреса, график, контакты. Поиск ближайшей по адресу покупателя. Проверка наличия в реальном времени, бронирование до определённого часа. QR-код для быстрого получения и SMS о готовности к выдаче.
Курьерская доставка. Зоны доставки с разной стоимостью. 2-часовые слоты, управление расписанием курьеров, ограничение заказов на слот. Доставка день в день — приём до 14:00, экспресс за 2-4 часа с наценкой за срочность. Интеграция с навигацией для оптимизации маршрутов.
Мультисклад. Несколько складов с адресами и зонами обслуживания. Автоматический выбор склада отгрузки по адресу покупателя — приоритет ближайшему, где есть все товары заказа. Если на одном складе всего нет — разделение заказа по складам (мультидоставка). Синхронизация остатков через 1С или WMS (CommerceML), используем события OnBeforeBasketAdd для проверки доступности.
Сравнение транспортных компаний
| Параметр |
СДЭК |
Boxberry |
Почта России |
ПЭК |
DPD |
| Покрытие |
Россия, СНГ |
Регионы, малые города |
Вся РФ |
РФ, тяжёлые грузы |
РФ, экспресс |
| Скорость доставки |
2–7 дней |
3–10 дней |
5–15 дней |
3–10 дней |
1–4 дня |
| Сложность API |
Средняя |
Низкая |
Высокая (XML) |
Средняя |
Средняя |
| Особенность |
Широкий набор тарифов, постаматы |
Самая широкая сеть ПВЗ |
Стабильный, но медленный ответ |
Страхование, обрешётка |
Временные интервалы |
Из каких этапов состоит подключение служб доставки?
-
Анализ логистики (1–2 дня) — география, средний вес, объём заказов, интеграция с 1С. Рекомендуем комбинацию ТК.
-
Подключение API (3–5 дней на ТК) — настройка расчётов, карт ПВЗ, автоматическое создание заказов через агенты и события.
-
Настройка трекинга (1–2 недели) — агенты обновления статусов, шаблоны уведомлений, страница трекинга.
-
Тестирование (2–3 дня) — проверка на реальных адресах, сравнение тарифов, контроль ошибочных расчётов, нагрузочное тестирование.
-
Деплой и обучение (1 день) — выгрузка модуля, передача доступов, обучение менеджеров.
-
Гарантийная поддержка (1 месяц) — исправление багов, корректировка конфигураций, донастройка кэширования.
Ориентировочные сроки реализации
| Этап |
Срок |
| Подключение одной ТК (API) |
3–5 дней |
| Карта выбора ПВЗ |
2–3 дня |
| Настройка самовывоза |
2–3 дня |
| Система трекинга |
1–2 недели |
| Мультисклад |
2–4 недели |
| Комплексная логистическая система |
4–8 недель |
Сроки зависят от количества ТК, сложности каталога и необходимости интеграции с 1С/ERP. Стоимость рассчитывается индивидуально — ориентируйтесь на экономию: снижение операционных затрат на доставку до 40% и сокращение обращений в поддержку на 60%. Например, один из клиентов с магазином электроники (20 000 товаров) вернул инвестиции за 3 месяца за счёт уменьшения числа «забытых» заказов.
Готовы ускорить логистику вашего интернет-магазина? Свяжитесь с нами — поможем подобрать оптимальную комбинацию ТК под ваш ассортимент и бюджет. Закажите консультацию, и мы подготовим предложение за 1 рабочий день.