Интеграция 1С-Битрикс со службой доставки Яндекс Доставка

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс со службой доставки Яндекс Доставка
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1230
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    843
  • 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 Appointment Booking Widget for a Medical Center
    580
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    749
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    980

Интеграция 1С-Битрикс со службой доставки Яндекс Доставка

Яндекс Доставка доступна как самостоятельный B2B-сервис для интернет-магазинов. Основные сценарии: экспресс-доставка в пределах города (1–3 часа), курьерская доставка день-в-день или на следующий день, доставка через ПВЗ. Интеграция с Битрикс — через 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 дня