Інтеграція 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, пропонує термінову доставку, доставку до певного часу та можливість примірки перед оплатою (актуально для fashion-магазинів). API надається за договором.

API Курантів

REST API з авторизацією через токен. Документація російською мовою. Базовий URL уточнюється при підключенні (як правило, https://api.kuranty.by/ або адреса, видана менеджером).

private function httpRequest(string $method, string $endpoint, array $body = []): array
{
    $url = rtrim($this->getOption('API_URL'), '/') . '/' . ltrim($endpoint, '/');
    $ch = curl_init($method === 'GET' ? $url . '?' . http_build_query($body) : $url);

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

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

    if ($code >= 400) {
        $err = json_decode($response, true);
        throw new \RuntimeException('Kuranty API: ' . ($err['detail'] ?? $response));
    }

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

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

Куранти розраховують вартість за зонами всередині Мінська та по містах. Зонова модель є типовою для кур'єрських служб великих міст.

public function calcCost(string $address, int $weightGram, string $timeSlot = 'standard'): float
{
    $response = $this->httpRequest('POST', '/tariffs/calculate', [
        'address'   => $address,
        'weight'    => $weightGram / 1000, // г → кг
        'timeSlot'  => $timeSlot, // standard, express, timed
    ]);

    return (float)($response['price'] ?? 0);
}

Типи слотів: standard (стандарт, кілька днів), express (сьогодні), timed (до певного часу). Кожен слот має свою ціну.

Примірка перед оплатою

Характерна особливість Курантів — підтримка примірки. Кур'єр приїжджає з кількома позиціями (наприклад, три розміри однієї моделі), покупець примірює, залишає потрібне, повертає решту. Це вимагає спеціальної логіки в заявці:

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

    $isFitting = $props->getItemByOrderPropertyCode('FITTING')?->getValue() === 'Y';

    $payload = [
        'externalId'  => (string)$order->getId(),
        'type'        => $isFitting ? 'fitting' : 'standard',
        'timeSlot'    => $props->getItemByOrderPropertyCode('DELIVERY_SLOT')?->getValue() ?? 'standard',
        'recipient' => [
            'name'    => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
            'phone'   => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
            'address' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
        ],
        'items'       => $this->buildItems($order),
        'payment' => [
            'type'   => $isFitting ? 'after_fitting' : 'prepaid',
            'amount' => $order->getPrice(),
        ],
    ];

    $response = $this->httpRequest('POST', '/orders', $payload);
    $orderNum = (string)($response['number'] ?? '');

    $props->getItemByOrderPropertyCode('KURANTY_ORDER')?->setValue($orderNum);
    $order->save();

    return $orderNum;
}

При типі fitting оплата відбувається після примірки — payment.type: after_fitting. Магазин отримує від кур'єра лише оплату за прийняті товари.

Вибір часового слота

На сторінці оформлення замовлення покупцю відображається вибір слота:

// AJAX-запит для отримання доступних слотів
fetch('/bitrix/services/main/ajax.php?action=kuranty_slots', {
    method: 'POST',
    body: JSON.stringify({ date: selectedDate }),
})
.then(r => r.json())
.then(data => {
    data.slots.forEach(slot => {
        // Додаємо кнопки вибору слота
    });
});

На стороні сервера 1С-Бітрікс: AJAX-компонент запитує доступні слоти у API Курантів та повертає їх фронтенду. Вибраний слот зберігається у властивості замовлення DELIVERY_SLOT.

Трекінг

public function getOrderStatus(string $orderNum): array
{
    $response = $this->httpRequest('GET', '/orders/' . $orderNum);
    return [
        'status'      => $response['status'] ?? '',
        'courierName' => $response['courier']['name'] ?? '',
        'eta'         => $response['eta'] ?? '',
    ];
}

Обмеження

Куранти працюють у Мінську та найближчому передмісті. Для інших міст потрібна інша служба доставки. У 1С-Бітрікс обмеження за зоною доставки реалізується через стандартний механізм «Місцезнаходження».

Терміни

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