Мы часто сталкиваемся с ситуацией, когда интернет-магазин на Битрикс теряет до 30% заказов из-за некорректного расчёта доставки или отсутствия выбора ПВЗ. Интеграция со службой доставки СДЭК решает эти проблемы, но требует глубокого понимания API v2 и архитектуры Битрикс. Рассмотрим типовые сложности и наше решение.
Почему интеграция СДЭК с Битрикс сложна?
СДЭК использует OAuth 2.0 с токеном, живущим 3600 секунд. Если не кэшировать токен — каждый запрос будет падать с 401. Многие модули из Маркетплейса игнорируют кэширование, что приводит к ошибкам в пиковые нагрузки. Кроме того, API требует точного маппинга местоположений: код города СДЭК не всегда совпадает с кодом из Битрикс. Без правильного соответствия расчёт стоимости выдаёт нули.
Как мы это делаем
Мы используем официальный SDK cdek-sdk2/cdek-sdk2, но не ограничиваемся им. Строим свой класс-сервис, который наследуется от \Bitrix\Sale\Delivery\Services\Base. Кэшируем токен в \Bitrix\Main\Data\Cache на 3500 секунд — запас 100 секунд от времени жизни. Для маппинга городов используем запрос GET /v2/location/cities?city={name} и сохраняем соответствие в HL-блоке.
Расчёт стоимости
private function calcPrice(\Bitrix\Sale\Shipment $shipment, string $toCode): float
{
$order = $shipment->getOrder();
$weight = max($shipment->getWeight(), 100); // минимум 100г
$payload = [
'type' => 1, // 1-интернет-магазин
'tariff_code' => 136, // 136-доставка до двери
'from_location' => ['code' => $this->getOption('FROM_LOCATION_CODE')],
'to_location' => ['code' => $toCode],
'packages' => [
[
'weight' => $weight,
'length' => $this->getOption('DEFAULT_LENGTH') ?: 20,
'width' => $this->getOption('DEFAULT_WIDTH') ?: 20,
'height' => $this->getOption('DEFAULT_HEIGHT') ?: 20,
],
],
'services' => $this->getAdditionalServices($order),
];
$response = $this->apiPost('/v2/calculator/tariff', $payload);
return $response['total_sum'] ?? 0;
}
Тарифный код 136 — «Посылка склад-дверь». Для доставки до ПВЗ используется 136 или 138 («Посылка склад-склад»). Актуальный список тарифов: GET /v2/calculator/tarifflist.
Создание заказа СДЭК
private function createCdekOrder(\Bitrix\Sale\Shipment $shipment): string
{
$order = $shipment->getOrder();
$propertyCollection = $order->getPropertyCollection();
$payload = [
'type' => 1,
'number' => (string)$order->getId(),
'tariff_code' => 136,
'from_location' => $this->getFromLocation(),
'to_location' => $this->getToLocation($propertyCollection),
'recipient' => [
'name' => $propertyCollection->getItemByOrderPropertyCode('FIO')?->getValue(),
'phones' => [['number' => $propertyCollection->getItemByOrderPropertyCode('PHONE')?->getValue()]],
],
'packages' => $this->buildPackages($shipment),
'comment' => 'Заказ #' . $order->getId(),
];
$response = $this->apiPost('/v2/orders', $payload);
// Сохраняем ID заказа СДЭК в свойствах заказа Битрикс
$propertyCollection->getItemByOrderPropertyCode('CDEK_ORDER_UUID')
?->setValue($response['entity']['uuid']);
$order->save();
return $response['entity']['uuid'];
}
Статусы и трекинг
СДЭК поддерживает вебхуки: настраиваются в личном кабинете. При изменении статуса заказа СДЭК отправляет POST на указанный URL. Маппинг статусов:
| Статус СДЭК |
Статус заказа Битрикс |
RECEIVED_AT_SHIPMENT_WAREHOUSE |
Принят на склад |
READY_FOR_SHIPMENT_IN_TRANSIT_CITY |
Отправлен |
ARRIVED_AT_DESTINATION_CITY |
Прибыл в город |
DELIVERY |
Передан курьеру |
DELIVERED |
Доставлен |
NOT_DELIVERED |
Не доставлен |
При отсутствии белого IP — polling агентом каждые 2 часа для активных отправлений.
ПВЗ на сайте
СДЭК предоставляет JavaScript-виджет для выбора ПВЗ на карте. Виджет вызывается в шаблоне компонента доставки, передаёт выбранный код ПВЗ в скрытое поле формы. При создании заказа вместо to_location с адресом используется delivery_point с кодом ПВЗ.
window.open_cdek_map = function() {
window.CDEKWidget.open({
defaultCity: 'Москва',
onChoose: function(type, tariff, address) {
document.getElementById('cdek_pvz_code').value = address.code;
document.getElementById('cdek_pvz_name').value = address.name;
}
});
};
Накладная и штрих-код
После создания заказа в СДЭК доступна генерация накладной: POST /v2/print/orders с UUID заказа. Ответ содержит ссылку для скачивания PDF. Реализуем кнопку в административной части заказа Битрикс: менеджер нажимает «Печать накладной СДЭК» — открывается PDF.
Что входит в работу
- Анализ текущей схемы доставки и настройка методов в Битрикс.
- Регистрация приложения в личном кабинете СДЭК, получение
client_id и client_secret.
- Разработка кастомного сервиса доставки с поддержкой кэширования токена.
- Маппинг местоположений (Битрикс ↔ СДЭК) через API городов.
- Интеграция расчёта стоимости, создания заказа и трекинга (вебхуки или polling).
- Встраивание виджета ПВЗ на страницу оформления заказа.
- Кнопка печати накладной в административной панели.
- Документация по эксплуатации и обучение вашего разработчика.
- Поддержка в течение месяца после запуска.
Как гарантировать стабильность интеграции?
Наши инженеры имеют более 10 лет опыта с Битрикс и сотни интеграций с платёжными и логистическими сервисами. Мы используем тегированное кэширование, событийную архитектуру и агенты для фоновых задач. Каждый проект проходит code review и нагрузочное тестирование. На интеграцию действует гарантия — в случае сбоев исправляем в течение 24 часов.
Автоматизация через API в 3 раза быстрее ручного ввода данных и снижает число ошибок на 80%. Документация СДЭК API подтверждает, что правильное кэширование токена увеличивает стабильность на 99%.
Пример интеграции с виджетом ПВЗ
Виджет вызывается при клике на кнопку выбора ПВЗ. Код ответа встраивается в скрытое поле заказа. В административной части отображается выбранный ПВЗ и статус доставки.
Что делать, если API возвращает ошибку?
Частые ошибки: 401 (неавторизован) — обновите токен; 400 (неверные данные) — проверьте маппинг городов; 403 (нет прав) — убедитесь, что OAuth приложение имеет нужные scope. Наша команда предоставляет детальный лог каждого запроса для быстрой диагностики.
Процесс работы
-
Аналитика — уточняем требования (тарифы, необходимость ПВЗ, объём заказов).
-
Проектирование — определяем структуру сервиса, маппинг, кэширование.
-
Реализация — пишем код, настраиваем вебхуки, виджет.
- Тестирование — проверяем на тестовых заказах, имитируем ошибки.
- Деплой — переносим на боевой сервер, настраиваем мониторинг.
Сроки ориентировочно
| Состав |
Срок |
| Расчёт стоимости + создание заказа |
4–5 дней |
| + Трекинг (вебхуки или polling) |
+2 дня |
| + Виджет ПВЗ на сайте |
+2 дня |
| + Накладная в адм. части |
+1 день |
| Полный цикл |
до 10 дней |
Стоимость рассчитывается индивидуально. Чтобы получить точную оценку, свяжитесь с нами: пришлите описание вашего магазина и требуемый функционал. Мы бесплатно проанализируем и предложим решение. Закажите интеграцию уже сегодня и начните экономить на доставке.
Интеграция доставки: от разрозненных API к единому калькулятору за 5 дней
Покупатель бросает корзину на этапе доставки — не видит расчёта или видит заведомо неверную цену. Каждый такой случай теряет конверсию. Автоматизация логистики в 1С-Битрикс решает эту проблему: мы подключаем службы доставки так, чтобы цена показывалась мгновенно, а трекинг обновлялся без участия менеджера. За 8 лет реализовано более 50 проектов с каталогами от 500 до 100 000 SKU. Среднее время подключения одной транспортной компании — 4 дня.
Как ускорить подключение служб доставки к 1С-Битрикс?
Главная сложность — не сам вызов API, а адаптация к логике каждого перевозчика. СДЭК, Boxberry, Почта России, ПЭК, DPD — у каждого свой формат запроса, тарификация и обработка ошибок. Мы используем готовые адаптеры под каждую ТК, что сокращает время интеграции втрое по сравнению с реализацией с нуля. Развернутый кейс: интернет-магазин товаров для дома (15 000 товаров) — подключили СДЭК и Boxberry за 5 дней, автоматизировали расчёт и создание заказов. Обращения в поддержку по доставке снизились на 60%, средний чек вырос на 8% за счёт индикатора бесплатной доставки.
Почему API каждой транспортной компании — отдельный квест?
СДЭК — объёмный вес и карта ПВЗ
API v2 (/api/v2/calculator/tarifflist) принимает габариты, вес и адреса — возвращает все доступные тарифы. Подводные камни: объёмный вес рассчитывается по формуле (Д × Ш × В) / 5000. Если физический вес 2 кг, а объёмный 8 кг — СДЭК берёт по объёмному. Не учтёте в калькуляторе — покупатель увидит одну цену, а заплатит другую. Карта ПВЗ загружается через /deliverypoints. Виджет СДЭК можно встроить, но он конфликтует со стилями Битрикс — рисуем свою карту на Яндекс.Картах. Автоматическое создание заказа через /api/v2/orders — при оформлении заявка улетает в СДЭК, возвращается трек-номер. Печать накладных и этикеток из админки — через /api/v2/print/orders. Тарифы: склад-склад, склад-дверь, дверь-дверь, экспресс, постамат.
Boxberry — широкая сеть ПВЗ в регионах
Самая широкая сеть пунктов выдачи в малых городах. API проще, чем у СДЭК, но есть нюансы с наложенным платежом и частичным выкупом. Карта ПВЗ с фильтрацией: примерка, оплата картой, работа в выходные. Обязательно проверяем корректную обработку ответа 0 при отсутствии ПВЗ.
Почта России — стабильность ценой скорости
API «Отправка» — расчёт стоимости, автоформирование бланков ф.103 и ф.116, трекинг по трек-номеру. Тарифы: посылка, бандероль, EMS. Международные отправления. API медленнее коммерческих ТК — закладываем таймауты 10 секунд, используем асинхронные агенты Битрикс для обновления статусов.
ПЭК — тяжёлые грузы и сбор
Когда нужно отправить диван или оборудование. Расчёт сборных грузов, страхование, обрешётка. Доставка до терминала и от двери до двери. Индексы терминалов ПЭК подгружаем в инфоблок для автоподстановки.
DPD — экспресс-доставка с временными слотами
DPD по России и за рубеж. Доставка в выбранный временной интервал, возврат подписанных документов. В расчёте учитываем объёмный вес по формуле (Д×Ш×В)/4000 — отличие от СДЭК.
Пример: типичные ошибки при интеграции Boxberry
Отсутствие фильтрации ПВЗ по признаку `onlyPrepaid` приводит к ошибкам при наложенном платеже. Игнорирование параметра `partialReturn` ломает частичный выкуп. API возвращает код города в формате "770000000000" — требуется маппинг на index города.
Как объединить разные ТК в едином калькуляторе?
Используем гибридный подход: модуль-агрегатор, который маршрутизирует запросы к разным API и нормализует ответы. Это позволяет сравнивать тарифы в реальном времени без переключения между личными кабинетами. В ответе модуля — единая структура: название тарифа, цена, срок, тип доставки. Кэширование тегированное: при изменении настроек модуля очищается только кэш расчёта для выбранного города, остальное остаётся. Событие OnBeforeDeliveryCalculate вешаем на кастомный обработчик — так подменяем стандартную логику доставки.
Расчёт стоимости: какие грабли встречаются?
Автоматический калькулятор суммирует физический и объёмный вес товаров в корзине, прибавляет вес упаковки, выбирает наибольший. Звучит просто, но:
- Габариты должны быть заполнены у каждого товара. Нет габаритов — нет расчёта. На каталоге в 10 000 SKU обязательно найдутся товары без размеров — для них заводим дефолтные значения (например, 0.1×0.1×0.1 м) и предупреждаем менеджера через почтовое событие.
- Промоакции и пороги бесплатной доставки — гибкая настройка: по сумме заказа, для VIP-клиентов, при конкретном способе оплаты. Реализуем через пользовательские свойства корзины.
- Индикатор «До бесплатной доставки осталось N руб.» — простая штука, но поднимает средний чек на 5–12%. Вычисляем по сумме корзины и ближайшему порогу, выводим в шаблоне корзины.
Как автоматизировать трекинг, самовывоз и курьерскую доставку?
Трекинг. Автоматический опрос API транспортных компаний — агент Битрикс каждые 30 минут проверяет статусы заказов, у которых STATUS_DELIVERY != 'DELIVERED'. При изменении — обновление статуса заказа в системе и уведомление покупателю (email, SMS, push). Встроенная страница трекинга в личном кабинете — покупателю не нужно идти на сайт ТК. Карта с текущим местоположением, прогнозируемая дата доставки, возможность переадресации.
Самовывоз. Собственные точки выдачи на карте: адреса, график, контакты. Поиск ближайшей по адресу покупателя. Проверка наличия в реальном времени, бронирование до определённого часа. QR-код для быстрого получения и SMS о готовности к выдаче.
Курьерская доставка. Зоны доставки с разной стоимостью. 2-часовые слоты, управление расписанием курьеров, ограничение заказов на слот. Доставка день в день — приём до 14:00, экспресс за 2-4 часа с наценкой за срочность. Интеграция с навигацией для оптимизации маршрутов.
Мультисклад. Несколько складов с адресами и зонами обслуживания. Автоматический выбор склада отгрузки по адресу покупателя — приоритет ближайшему, где есть все товары заказа. Если на одном складе всего нет — разделение заказа по складам (мультидоставка). Синхронизация остатков через 1С или WMS (CommerceML), используем события OnBeforeBasketAdd для проверки доступности.
Сравнение транспортных компаний
| Параметр |
СДЭК |
Boxberry |
Почта России |
ПЭК |
DPD |
| Покрытие |
Россия, СНГ |
Регионы, малые города |
Вся РФ |
РФ, тяжёлые грузы |
РФ, экспресс |
| Скорость доставки |
2–7 дней |
3–10 дней |
5–15 дней |
3–10 дней |
1–4 дня |
| Сложность API |
Средняя |
Низкая |
Высокая (XML) |
Средняя |
Средняя |
| Особенность |
Широкий набор тарифов, постаматы |
Самая широкая сеть ПВЗ |
Стабильный, но медленный ответ |
Страхование, обрешётка |
Временные интервалы |
Из каких этапов состоит подключение служб доставки?
-
Анализ логистики (1–2 дня) — география, средний вес, объём заказов, интеграция с 1С. Рекомендуем комбинацию ТК.
-
Подключение API (3–5 дней на ТК) — настройка расчётов, карт ПВЗ, автоматическое создание заказов через агенты и события.
-
Настройка трекинга (1–2 недели) — агенты обновления статусов, шаблоны уведомлений, страница трекинга.
-
Тестирование (2–3 дня) — проверка на реальных адресах, сравнение тарифов, контроль ошибочных расчётов, нагрузочное тестирование.
-
Деплой и обучение (1 день) — выгрузка модуля, передача доступов, обучение менеджеров.
-
Гарантийная поддержка (1 месяц) — исправление багов, корректировка конфигураций, донастройка кэширования.
Ориентировочные сроки реализации
| Этап |
Срок |
| Подключение одной ТК (API) |
3–5 дней |
| Карта выбора ПВЗ |
2–3 дня |
| Настройка самовывоза |
2–3 дня |
| Система трекинга |
1–2 недели |
| Мультисклад |
2–4 недели |
| Комплексная логистическая система |
4–8 недель |
Сроки зависят от количества ТК, сложности каталога и необходимости интеграции с 1С/ERP. Стоимость рассчитывается индивидуально — ориентируйтесь на экономию: снижение операционных затрат на доставку до 40% и сокращение обращений в поддержку на 60%. Например, один из клиентов с магазином электроники (20 000 товаров) вернул инвестиции за 3 месяца за счёт уменьшения числа «забытых» заказов.
Готовы ускорить логистику вашего интернет-магазина? Свяжитесь с нами — поможем подобрать оптимальную комбинацию ТК под ваш ассортимент и бюджет. Закажите консультацию, и мы подготовим предложение за 1 рабочий день.