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

Яндекс Доставка доступна як самостійний B2B-сервіс для інтернет-магазинів. Основні сценарії: експрес-доставка в межах міста (1–3 години), кур'єрська доставка день у день або наступного дня, доставка через ПВЗ. Інтеграція з 1С-Бітрікс — через Delivery API v2.

Структура API

Авторизація: OAuth-токен з Яндекс Паспорта в заголовку Authorization: Bearer <token>. Базовий URL: https://b2b.taxi.yandex.net/b2b/cargo/integration/v2.

Основні операції:

  • POST /check-price — попередній розрахунок вартості
  • POST /claims — створення заявки
  • GET /claims/info — статус заявки
  • POST /claims/accept — підтвердження заявки (без цього кроку кур'єр не призначається)

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

class YandexDeliveryHandler extends \Bitrix\Sale\Delivery\Services\Base
{
    protected function calculateConcrete(
        \Bitrix\Sale\Shipment $shipment
    ): \Bitrix\Sale\Delivery\CalculationResult {
        $result  = new \Bitrix\Sale\Delivery\CalculationResult();
        $order   = $shipment->getOrder();
        $props   = $order->getPropertyCollection();
        $address = $props->getItemByOrderPropertyCode('ADDRESS')?->getValue();

        if (!$address) {
            $result->addError(new \Bitrix\Main\Error('Адресу доставки не вказано'));
            return $result;
        }

        $payload = [
            'items'        => $this->buildItems($shipment),
            'route_points' => [
                ['coordinates' => $this->getOption('FROM_COORDS'), 'type' => 'source',      'visit_order' => 1],
                ['address'     => ['fullname' => $address],        'type' => 'destination', 'visit_order' => 2],
            ],
        ];

        $response = $this->apiPost('/check-price', $payload);
        if (!empty($response['price'])) {
            $result->setDeliveryPrice((float)$response['price']);
        }

        return $result;
    }
}

Особливість: check-price — орієнтовна вартість. Реальна ціна фіксується при створенні заявки. При розбіжності більше 20% рекомендується показувати «ціна від».

Двоетапне створення заявки

Яндекс Доставка вимагає явного підтвердження після створення:

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

    $claim = $this->apiPost('/claims?request_id=' . uniqid(), [
        'items'               => $this->buildItems($shipment),
        'route_points'        => $this->buildRoutePoints($shipment),
        'comment'             => 'Замовлення #' . $order->getId(),
        'callback_properties' => ['callback_url' => $this->getOption('WEBHOOK_URL')],
    ]);
    $claimId = $claim['id'];

    // Без цього виклику кур'єр не буде призначений
    $this->apiPost('/claims/accept?claim_id=' . $claimId, [
        'version' => $claim['version'],
    ]);

    return $claimId;
}

request_id — ідемпотентний ключ: повторний запит з тим самим значенням поверне вже існуючу заявку.

Вебхуки статусів

Яндекс Доставка підтримує push-сповіщення на callback_url. Статуси життєвого циклу:

Статус Значення
new Заявку створено
accepted Підтверджено
performer_found Кур'єра знайдено
pickuped Вантаж забрано зі складу
delivery_arrived Прибув до отримувача
delivered Доставлено
returning Повернення
cancelled Скасовано

Кейс: експрес-доставка в Москві

Магазин косметики, завдання — показувати «доставимо через 2 години» для замовлень до 15:00. Реалізували два методи: стандартний (наступного дня) та експрес (2–3 години, доплата 350 руб.). Експрес доступний при оформленні до 15:00 МСК та сумі від 1500 руб. Перевірка в методі isCompatible() обробника. При статусі cancelled у вебхуку сповіщаємо менеджера і пропонуємо клієнту найближчий доступний слот.

Терміни

Склад Термін
Розрахунок + створення заявки + підтвердження 3–4 дні
+ Вебхуки статусів +1 день
+ Експрес/стандарт з часовими умовами +1–2 дні
+ Інтерфейс відстеження для покупця +2 дні