Интеграция 1С-Битрикс со службой доставки Почта России

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс со службой доставки Почта России
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1230
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    843
  • 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
    580
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    749
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    980

Интеграция 1С-Битрикс со службой доставки Почта России

Почта России — единственная служба с покрытием всех населённых пунктов страны, что делает интеграцию с ней практически обязательной для магазинов, продающих в малые города и сёла. API Почты России (Отправка 2.0) значительно лучше старого, но всё ещё требует понимания специфики: нормализация адресов, виды отправлений, партионный режим, наложенный платёж.

API Почты России: принципы работы

Базовый URL: https://otpravka-api.pochta.ru. Авторизация: два токена одновременно — Authorization: AccessToken TOKEN и X-User-Authorization: Basic BASE64(login:password).

Ключевые группы методов:

  • /1.0/user/shipping-points — адреса отправки (откуда)
  • /1.0/clean/address — нормализация адреса
  • /1.0/tariff — расчёт тарифа
  • /1.0/user/backlog — партионная загрузка отправлений
  • /1.0/batch/{batchName}/shipment — создание отправлений в партии
  • /1.0/shipment/search — трекинг по баркоду

Нормализация адресов

Главная боль Почты России — качество адресов, которые вводят покупатели. API требует корректных адресов в формате ФИАС. Нормализация — первый шаг перед любой операцией:

private function normalizeAddress(string $rawAddress): array
{
    $response = $this->apiPost('/1.0/clean/address', [
        [
            'id'            => 'addr1',
            'original-address' => $rawAddress,
        ]
    ]);

    $normalized = $response[0] ?? [];

    if (($normalized['quality-code'] ?? '') === 'GOOD') {
        return $normalized;
    }

    // Если качество плохое — возвращаем ошибку, не создаём отправление
    throw new \RuntimeException(
        'Адрес не нормализован: ' . ($normalized['quality-code'] ?? 'unknown')
    );
}

Коды качества: GOOD — полностью нормализован, POSTAL_BOX — абонентский ящик, ON_DEMAND — до востребования, UNDEF_* — различные проблемы с нормализацией. Только GOOD даёт гарантию правильной доставки.

Расчёт тарифа

private function calcTariff(
    array $normalizedAddress,
    int $weightGram,
    string $mailType = 'POSTAL_PARCEL'
): float {
    $response = $this->apiPost('/1.0/tariff', [
        'object-type'        => $mailType,
        'mail-category'      => 'ORDINARY',
        'from-index'         => $this->getOption('FROM_INDEX'), // индекс отправки
        'to-index'           => $normalizedAddress['index'],
        'mass'               => $weightGram,
        'dimension'          => [
            'height' => 200,
            'length' => 300,
            'width'  => 200,
        ],
    ]);

    return ($response['total-rate'] ?? 0) / 100; // копейки → рубли
}

Почта России возвращает стоимость в копейках — не забываем делить на 100. Типы отправлений: POSTAL_PARCEL (посылка), EMS (экспресс), EMS_OPTIMAL (оптимальный ЕМС), FIRST_CLASS (первый класс).

Партионный режим: создание отправлений

Почта России работает через партии (batch). Нельзя создать одиночное отправление — нужно создать партию, добавить в неё отправления, отправить в печать.

public function createShipment(\Bitrix\Sale\Shipment $shipment): string
{
    $order = $shipment->getOrder();
    $props = $order->getPropertyCollection();

    // 1. Получаем или создаём партию
    $batchName = $this->getOrCreateBatch($shipment);

    // 2. Создаём отправление в партии
    $payload = [[
        'address-type-to'     => 'DEFAULT',
        'mail-type'           => 'POSTAL_PARCEL',
        'mail-category'       => 'ORDINARY',
        'mass'                => $this->getWeight($shipment),
        'index-to'            => $this->getNormalizedIndex($props),
        'recipient-name'      => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
        'tel-address'         => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
        'str-index-to'        => $this->getNormalizedIndex($props),
        'order-num'           => (string)$order->getId(),
        'payment'             => $this->getCashOnDelivery($order), // наложенный платёж
    ]];

    $response = $this->apiPost("/1.0/batch/{$batchName}/shipment", $payload);
    $barcode = $response['result-ids'][0] ?? null;

    if ($barcode) {
        $props->getItemByOrderPropertyCode('POCHTA_BARCODE')?->setValue($barcode);
        $order->save();
    }

    return $barcode ?? '';
}

Наложенный платёж

Наложенный платёж (COD — cash on delivery) — ключевая функция Почты России для e-commerce. Поле payment в запросе содержит сумму к получению с покупателя в копейках. Если наложенный платёж не нужен — передаём 0.

При наложенном платеже Почта удерживает комиссию (~2–3%) и перечисляет остаток на расчётный счёт магазина. Сроки перечисления — до 10 рабочих дней.

Трекинг через API Почты России

public function trackShipment(string $barcode): array
{
    $response = $this->apiGet('/1.0/shipment/search', ['query' => $barcode]);
    $events = $response['trackingData']['trackingItem']['trackingHistoryItem'] ?? [];

    $lastEvent = end($events);
    return [
        'status'    => $lastEvent['humanStatus'] ?? '',
        'date'      => $lastEvent['eventDateTime'] ?? '',
        'city'      => $lastEvent['cityName'] ?? '',
        'barcode'   => $barcode,
    ];
}

Трекинг через основной API ограничен по частоте запросов. Для высоконагруженных магазинов используется отдельный Tracking API с другой квотой.

Печать марок и форм

После добавления отправлений в партию доступна печать ф7 (адресный ярлык) и ф107/ф112 (сопроводительные документы):

GET /1.0/forms/{barcode}/f7pdf — адресный ярлык
GET /1.0/batch/{batchName}/checkin — сдача партии на почту

Сроки

Состав Срок
Расчёт тарифа + нормализация адресов 3–4 дня
+ Создание отправлений (партионный режим) +2 дня
+ Наложенный платёж + трекинг +2 дня
+ Печать марок в адм. части +1 день