Інтеграція 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С-Бітрікс зі службою доставки Білпошта (Білорусь)

Білпошта — державний поштовий оператор Білорусі з покриттям всієї країни. Для e-commerce незамінна там, де кур'єрські служби не працюють: малі міста, агромістечка, районні центри. Білпошта надає API для роботи з відправленнями, але його функціональність більш обмежена порівняно з комерційними перевізниками.

API Білпошти: особливості

Білпошта надає SOAP та REST API через систему «Автоматизований обмін даними» (АОД). Доступ — за договором. REST API (більш новий): https://api.belpost.by/. Авторизація: токен у заголовку Authorization.

private function apiRequest(string $method, string $path, array $payload = []): array
{
    $url = 'https://api.belpost.by' . $path;
    $ch = curl_init($method === 'GET' ? $url . '?' . http_build_query($payload) : $url);

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST  => $method,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Authorization: ' . $this->getOption('API_TOKEN'),
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS => $method === 'POST' ? json_encode($payload) : null,
    ]);

    $body = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($code >= 400) {
        throw new \RuntimeException("Belpost API {$code}: {$body}");
    }

    return json_decode($body, true) ?? [];
}

Індексація адрес та поштові індекси

Ключовий параметр для Білпошти — поштовий індекс отримувача. Білоруська система індексації 6-значна (наприклад, 220036 — Мінськ). API надає пошук об'єктів за адресою:

public function findPostcode(string $city, string $street, string $house): ?string
{
    $cacheKey = 'belpost_idx_' . md5("{$city}_{$street}_{$house}");
    $cached = \Bitrix\Main\Data\Cache::createInstance();

    if ($cached->startDataCache(86400 * 30, $cacheKey, '/belpost')) {
        $result = $this->apiRequest('GET', '/addresses/index', [
            'city'   => $city,
            'street' => $street,
            'house'  => $house,
        ]);
        $index = $result['index'] ?? null;
        $cached->endDataCache(['index' => $index]);
    }

    return $cached->getVars()['index'];
}

Кеш на 30 днів — поштові індекси змінюються вкрай рідко.

Розрахунок вартості

public function calcCost(
    string $fromIndex,
    string $toIndex,
    int $weightGram,
    string $type = 'PARCEL'
): float {
    $response = $this->apiRequest('POST', '/tariffs/calculate', [
        'type'       => $type, // PARCEL, REGISTERED_LETTER, EMS
        'fromIndex'  => $fromIndex,
        'toIndex'    => $toIndex,
        'weight'     => $weightGram,
        'declared'   => true,
    ]);

    // Білпошта повертає тариф у білоруських копійках
    return ($response['price'] ?? 0) / 100;
}

Створення поштового відправлення

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

    $payload = [
        'type'           => 'PARCEL',
        'category'       => 'ORDINARY',
        'senderName'     => $this->getOption('SENDER_NAME'),
        'senderIndex'    => $this->getOption('SENDER_INDEX'),
        'senderAddress'  => $this->getOption('SENDER_ADDRESS'),
        'senderPhone'    => $this->getOption('SENDER_PHONE'),
        'recipientName'  => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
        'recipientIndex' => $props->getItemByOrderPropertyCode('BELPOST_INDEX')?->getValue(),
        'recipientAddress' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
        'recipientPhone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
        'weight'         => $this->getWeight($shipment),
        'declaredValue'  => (int)($order->getPrice() * 100), // у копійках
        'cashOnDelivery' => 0,
        'description'    => 'Товар з інтернет-магазину',
    ];

    $response = $this->apiRequest('POST', '/items', $payload);
    $barcode = $response['barcode'] ?? '';

    $props->getItemByOrderPropertyCode('BELPOST_BARCODE')?->setValue($barcode);
    $order->save();

    return $barcode;
}

Грошові значення у Білпошті — у білоруських копійках. Аналогічно Казпошті: при розрахунку та створенні відправлення множимо на 100, при відображенні ділимо на 100.

Накладений платіж

Білпошта підтримує накладений платіж. Поле cashOnDelivery — сума у копійках, яку пошта збирає з отримувача. Мінімальна сума НП і комісія уточнюються в договорі.

Трекінг

public function track(string $barcode): array
{
    $response = $this->apiRequest('GET', '/tracking', ['barcode' => $barcode]);
    $events = $response['events'] ?? [];
    $last = end($events);

    return [
        'status'   => $last['name'] ?? '',
        'date'     => $last['date'] ?? '',
        'place'    => $last['place'] ?? '',
    ];
}

Публічний трекінг Білпошти також доступний на track.belpost.by. Агент 1С-Бітрікс запитує статус активних відправлень 1–2 рази на день.

Терміни

Склад Термін
Розрахунок тарифу + пошук індексу 2–3 дні
+ Створення відправлень + трекінг +2 дні