Інтеграція 1С-Бітрікс зі службою доставки Пошта Росії

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс зі службою доставки Пошта Росії
Середня
~1-2 тижні
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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