Интеграция кастомной службы доставки в Bitrix с динамическим расчетом стоимости
Разработана кастомная служба доставки для Bitrix, которая предоставляет пользователю поле для ввода адреса с автодополнением через Яндекс Suggest API. После выбора адреса система определяет зону доставки и рассчитывает соответствующую стоимость.
Структура решения
Решение состоит из трех ключевых компонентов:
- PHP-класс службы доставки, интегрированный в Bitrix
- JavaScript-модуль для обработки ввода адреса и взаимодействия с API
- Механизм определения зоны доставки и установки финальной стоимости
Реализация PHP-класса службы доставки
Создан класс AddressByZones, наследующий базовый класс доставки Bitrix:
- Название и описание: "Доставка по зонам + поле ввода"
- Конфигурация: Включает настройки API и определение зон доставки через JSON
- Расчет стоимости: Метод
calculateConcrete()возвращает HTML-форму для ввода адреса
Интеграция Яндекс Suggest API
В файл order_ajax.js добавлен обработчик события onAjaxSuccess:
- Динамическая загрузка скрипта: Яндекс Suggest API загружается только при выборе конкретной службы доставки (ID: 765)
- Поле ввода с автодополнением: При вводе от 3 символов отправляется запрос к API и отображаются подсказки
- Обработка выбора адреса: При выборе адреса из подсказок значение сохраняется в поле ввода
Определение зоны доставки и стоимости
После выбора адреса выполняется последовательность действий:
- Выбранный адрес отправляется на Bitrix-обработчик
AddressByZonesGetCoordinate.php - Обработчик определяет зону доставки (например, возвращает "SPB_A")
- На основе определенной зоны должна быть установлена соответствующая стоимость доставки
Ключевой вопрос реализации
Основная задача, требующая решения: как установить рассчитанную стоимость доставки в интерфейсе оформления заказа Bitrix после получения данных о зоне.
Возможные подходы к решению:
- Использование Bitrix API для обновления стоимости доставки
- Отправка AJAX-запроса с расчетом стоимости и обновление интерфейса
- Интеграция с механизмом пересчета заказа Bitrix
Текущая реализация успешно решает задачи ввода адреса и определения зоны, но требует доработки механизма установки финальной стоимости в системе оформления заказа.