Разработка модуля отслеживания доставки 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля отслеживания доставки 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1165
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля отслеживания доставки 1С-Битрикс

Покупатель оформил заказ и ждёт посылку. Если он каждый раз вынужден идти на сайт службы доставки, копировать трек-номер и искать статус — это плохой опыт. Модуль отслеживания доставки решает проблему: статус обновляется автоматически, пользователь видит его в личном кабинете и получает уведомления о смене.

Какие данные откуда берутся

Трек-номер появляется в заказе после его передачи в службу доставки. В Битрикс он хранится в поле TRACKING_NUMBER таблицы b_sale_order_delivery или в пользовательском свойстве заказа, в зависимости от того, как настроена доставка. Модули доставки (DPD, CDEK, Boxberry, Почта России) хранят трек-номер по-разному — это нужно учитывать при реализации.

Архитектура модуля

local/modules/vendor.tracking/
├── lib/
│   ├── Provider/           # Адаптеры для API служб доставки
│   │   ├── CdekProvider.php
│   │   ├── DpdProvider.php
│   │   └── RussianPostProvider.php
│   ├── TrackingService.php # Оркестратор
│   └── StatusMapper.php    # Нормализация статусов
├── install/
│   └── db/install.sql
└── cron/
    └── update_statuses.php

Таблица b_tracking_status — история статусов по каждому заказу:

Поле Тип Назначение
ID int auto_increment
ORDER_ID int ID заказа
TRACKING_NUMBER varchar(100) Трек-номер
PROVIDER varchar(50) Код службы доставки
STATUS_CODE varchar(50) Код статуса от провайдера
STATUS_TEXT text Человекочитаемый статус
LOCATION varchar(255) Текущее местонахождение
EVENT_TIME datetime Время события
NOTIFIED tinyint(1) Отправлено ли уведомление
CREATED_AT datetime Когда записан в БД

Интеграция с API служб доставки

Каждый провайдер реализует интерфейс:

interface DeliveryProviderInterface
{
    public function getStatuses(string $trackingNumber): array;
    public function getProviderCode(): string;
}

СДЭК использует REST API v2. Получение токена через POST /v2/oauth/token, статусы через GET /v2/orders?cdek_number={number}. Ответ содержит массив statuses с полями code, name, date_time, city.

Почта России предоставляет SOAP-сервис https://tracking.russianpost.ru/rtm34. Метод getOperationHistory возвращает XML с операциями по отправлению. Парсинг через SoapClient или через прямой разбор XML с помощью SimpleXMLElement.

DPD — REST API, трекинг через GET /api/tracing/order/{trackingNumber}.

Нормализация статусов

Каждый провайдер имеет свои коды статусов. StatusMapper приводит их к единому набору:

Внутренний статус Описание
CREATED Заказ создан в службе доставки
IN_TRANSIT В пути
AT_PICKUP Прибыл на пункт выдачи
DELIVERED Доставлен
RETURNED Возврат
FAILED Ошибка доставки

Это позволяет строить единый интерфейс трекинга независимо от службы доставки.

Автоматическое обновление статусов

Cron-задача запускается каждые 30 минут:

*/30 * * * * php /var/www/site/local/modules/vendor.tracking/cron/update_statuses.php

Скрипт выбирает заказы в статусах, предполагающих активную доставку (DELIVERY, DELIVERING), получает для каждого актуальные статусы от провайдера, сравнивает с последним записанным в b_tracking_status. Если статус изменился — пишет новую запись и ставит флаг NOTIFIED = 0.

Отдельный агент или следующий запуск cron обходит записи с NOTIFIED = 0 и отправляет уведомления.

Уведомления покупателю

При смене статуса покупатель получает:

  • Email — через почтовое событие TRACKING_STATUS_CHANGED. Шаблон содержит: текущий статус, трек-номер, ссылку на страницу заказа, кнопку «Отследить на сайте службы доставки».
  • Push-уведомление (если реализован web push на сайте) — короткое сообщение о смене статуса.

Виджет в личном кабинете

Страница заказа в личном кабинете показывает timeline доставки — все события в хронологическом порядке с иконками статусов. Данные берутся из b_tracking_status по ORDER_ID без обращения к API провайдера — это быстро и не зависит от доступности внешнего сервиса.

Сроки разработки

Масштаб Состав Срок
Базовый 1 провайдер, cron-обновление, таблица статусов, вывод в ЛК 5–7 дней
Стандартный + 3 провайдера, нормализация статусов, email-уведомления, timeline 10–14 дней
Расширенный + 5+ провайдеров, push-уведомления, карта трекинга, аналитика сроков 16–22 дня