Розробка модуля відстеження доставки 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С-Bitrix

Покупець оформив замовлення та чекає посилку. Якщо він кожен раз змушений йти на сайт служби доставки, копіювати номер треку та шукати статус — це погана користувацька кількість. Модуль стеження за доставкою вирішує проблему: статус оновлюється автоматично, користувач бачить його в особистому кабінеті та отримує сповіщення про зміни.

Джерела даних

Номер треку з'являється в замовленні після передачі служба доставки. У Bitrix він зберігається у полі 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;
}

CDEK використовує 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) — коротке повідомлення про зміну статусу.

Віджет у особистому кабінеті

Сторінка замовлення в особистому кабінеті показує часову шкалу доставки — всі подіï в хронологічному порядку з іконками статусів. Дані беруться з b_tracking_status за ORDER_ID без звернення до API провайдера — це швидко та не залежить від доступності зовнішнього сервісу.

Терміни розроблення

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