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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс со службой доставки UkrPoshta (Украина)
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

УкрПошта — государственный почтовый оператор Украины. Актуальна для небольших городов и сельской местности, где у Новой Почты нет отделений, а также для международных отправлений. После реструктуризации API стал современным: REST + JWT.

API UkrPoshta

Авторизация: Bearer-токен в заголовке Authorization: Bearer <token>. Токен получается через POST /api/2.0/client-token с ключом из личного кабинета. Базовый URL: https://www.ukrposhta.ua/ecom/0.0.1.

Основные операции:

  • POST /addresses — создать адрес
  • POST /clients — создать клиента
  • POST /shipments — создать отправление
  • GET /shipments/{uuid}/statuses — трекинг

Создание отправления

UkrPoshta требует последовательного создания объектов: адрес → клиент → отправление:

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 — получатель при вручении.

Типы доставки

Код Описание
W2W Склад → Отделение
W2D Склад → Дверь
D2W Дверь → Отделение
D2D Дверь → Дверь

Получение марки и трекинг

// Печать марки — кнопка в административной части заказа Битрикс
public function getLabel(string $shipmentUuid): string
{
    $response = $this->apiGet("/shipments/{$shipmentUuid}/label");
    return base64_decode($response['pdf_base64'] ?? '');
}

// Трекинг — агент Битрикс раз в 3–4 часа
public function getStatuses(string $shipmentUuid): array
{
    return $this->apiGet("/shipments/{$shipmentUuid}/statuses") ?? [];
}

Особенности международных отправлений

Для направлений UA→BY, UA→PL и других: таможенная декларация CN22/CN23, ограничение веса до 30 кг, обязательный HS-код товара. Рекомендуется добавить пользовательское свойство UF_HS_CODE к товарам в инфоблоке и передавать его в декларацию автоматически.

Особенности адресного поля

УкрПошта ожидает раздельные поля: улица, номер дома, квартира. В Битрикс адрес обычно хранится одной строкой. Нужно либо добавить отдельные поля в форму заказа, либо реализовать парсинг строки адреса. Второй подход даёт ~85% точности, первый — надёжнее.

Сроки

Состав Срок
Создание отправления + печать марки 4–5 дней
+ Трекинг +1–2 дня
+ Международные отправления (таможня) +2 дня