В кейсе описывается функционал расчета собственной службы доставки по Москве и Московской области.
Описание задачи
Необходимо сделать расчет собственной службы доставки по следующим условиям. В административной части сайта задается фиксированная стоимость доставки по Москве в зависимости от веса, а также стоимость доставки 1-го километра за пределы МКАД. Заказчик самостоятельно может менять стоимость. В оформлении заказа при выбранном регионе Москва и Московская Область, в установленном адресе доставки рассчитывается расстояние за пределы МКАД, в стоимость доставки устанавливается расчетная цена.
В пределах МКАД Стоимость доставки = Фиксированная стоимость (* зависит от веса груза)
За пределами МКАД Стоимость доставки = Фиксированная стоимость (* зависит от веса груза) +Xруб. *Nкм
Решение
Создание обработчика кастомной службы доставки
Написан класс обработчика собственной службы доставки доступный по пути local/php_interface/include/sale_delivery/custom/handler.php
Метод getConfigStructure описывает настройки стоимости доставки за километр за пределами МКАД и стоимость доставки в зависимости от веса.
В методе calculateConcrete идет расчет стоимости доставки.
Так как расчет расстояния от МКАД в сервисе DaData доступен только в платном тарифе, было решено использовать API Яндекс-карт.
После расчета расстояния, значение подставляется в скрытое поле name="mkad_dist", и при работе метода sendRequest передается на сервер для расчета стоимости: