Інтеграція 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 Ділових Ліній — REST з JWT-авторизацією. Документація російською мовою, охоплює основні операції.

API Ділових Ліній: структура

Базовий URL: https://api.dellin.ru/v3/. Авторизація двоетапна: спочатку отримуємо session token через /v3/auth/login.json, потім використовуємо його в заголовку Cookie: session=TOKEN або параметром.

private function getSession(): string
{
    $cacheKey = 'dellin_session_' . md5($this->appKey);
    $cached = \Bitrix\Main\Data\Cache::createInstance();

    if ($cached->startDataCache(3600 * 8, $cacheKey, '/dellin')) {
        $response = $this->httpPost('/v3/auth/login.json', [
            'appkey'   => $this->appKey,
            'login'    => $this->login,
            'password' => $this->password,
        ]);
        $session = $response['data']['sessionID'] ?? '';
        $cached->endDataCache(['session' => $session]);
    }

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

Сесія живе 8+ годин. Кешуємо на 8 годин, щоб не авторизуватися при кожному розрахунку.

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

private function calcCost(
    string $fromCity,
    string $toCity,
    float $weightKg,
    float $volumeM3
): float {
    $response = $this->apiPost('/v3/calculator.json', [
        'appkey'          => $this->appKey,
        'sessionID'       => $this->getSession(),
        'delivery'        => [
            'deliveryType' => ['type' => 'auto'],
            'arrival'      => ['variant' => 'address'],
            'dispatch'     => ['variant' => 'terminal'],
        ],
        'cargo'           => [
            'quantity'       => 1,
            'weight'         => $weightKg,
            'volume'         => $volumeM3,
            'totalEnvelopesWeight' => 0,
        ],
        'members'         => [
            'from' => ['terminalID' => $this->findTerminalId($fromCity)],
            'to'   => ['city'       => $toCity],
        ],
    ]);

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

Параметр delivery.dispatch.variant: terminal означає, що магазин сам привезе вантаж на термінал. arrival.variant: address — доставка покупцю до дверей. Комбінації variant впливають на ціну: термінал-термінал дешевше, адреса-адреса дорожче.

Пошук терміналу за містом

public function findTerminalId(string $cityName): string
{
    $response = $this->apiPost('/v3/public/terminals.json', [
        'appkey' => $this->appKey,
    ]);

    foreach ($response['data']['terminals'] ?? [] as $terminal) {
        if (mb_stripos($terminal['city']['name'], $cityName) !== false) {
            return $terminal['id'];
        }
    }

    return '';
}

Список терміналів великий — кешуємо результат пошуку на добу.

Створення замовлення

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

    $payload = [
        'appkey'    => $this->appKey,
        'sessionID' => $this->getSession(),
        'delivery'  => [
            'deliveryType' => ['type' => 'auto'],
            'dispatch'     => ['variant' => 'terminal'],
            'arrival'      => [
                'variant'  => 'address',
                'address'  => [
                    'search' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
                ],
            ],
        ],
        'cargo'     => $this->buildCargo($shipment),
        'members'   => [
            'from' => ['terminalID' => $this->getOption('FROM_TERMINAL_ID')],
            'to'   => [
                'contactPersons' => [[
                    'name'  => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
                    'phone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
                ]],
            ],
        ],
        'payment'   => [
            'type'   => 'cash',
            'payer'  => 'receiver', // отримувач сплачує доставку (накладений платіж)
        ],
    ];

    $response = $this->apiPost('/v3/orders.json', $payload);
    return (string)($response['data']['orderID'] ?? '');
}

Параметр payment.payer: receiver — доставку сплачує отримувач. sender — відправник (магазин). Вибір залежить від бізнес-моделі магазину.

Трекінг замовлень

public function getOrderState(string $orderId): array
{
    $response = $this->apiPost('/v3/orders/state.json', [
        'appkey'    => $this->appKey,
        'sessionID' => $this->getSession(),
        'orders'    => [['orderID' => $orderId]],
    ]);

    $state = $response['data'][0] ?? [];
    return [
        'status'       => $state['orderState']['name'] ?? '',
        'deliveryDate' => $state['deliveryDate'] ?? '',
    ];
}

Ділові Лінії не підтримують вебхуки для трекінгу. Агент 1С-Бітрікс раз на 3–4 години опитує статус активних відправлень.

Особливості для великогабаритних товарів

Ділові Лінії підтримують паллетні відправлення. Для магазинів меблів або будматеріалів потрібно розділяти відправлення на кілька місць з індивідуальними габаритами. Поле cargo.oversizedWeight використовується для нестандартних місць (> 80 кг або > 3 м у довжину).

Терміни

Склад Термін
Авторизація + розрахунок + маппінг терміналів 3–4 дні
+ Створення замовлень + трекінг +2 дні
+ Габаритний розрахунок + палети +1 день