Интеграция 1С-Битрикс со службой доставки UkrPoshta (Украина)

Магазинам, которые доставляют товары в небольшие населённые пункты Украины, часто не хватает возможностей частных перевозчиков. Мы разрабатываем интеграцию 1С-Битрикс с UkrPoshta, автоматизируя создание отправлений, трекинг и печать марок. Наша команда реализует проект под ключ — от настройки API до последующей поддержки, обеспечивая надёжную работу без срыва сроков.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция 1С-Битрикс со службой доставки UkrPoshta (Украина)
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1481
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1026
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    779
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    885
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    819
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1178

Интеграция 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 в вашем магазине.