Для того, чтобы переопределять стоимость доставки, на ту которая была рассчитана своим плагином, необходимо добавить функцию-обработчик на два хука(крючка):
1. models_order_isvaliddata - хук определяется в конце проверки валидности данных в форме заказа;
2. controllers_order_getpaymentbydeliveryid - хук определяется после выбора вариантов оплаты и стоимости, для выбранного способа доставки.
Внутри функции, которая будет обрабатывать, указанные выше хуки, необходимо первым делом проверить какой способ доставки выбран и если нужный нам, то обработать его дальше.
Также мы можем сразу получить во входных параметрах сообщение об ошибке если какие-то данные заполнены не верно, в этом случае мы просто передаем элемент массива входных параметров 'result' дальше.
Данные при обработке этих хуков приходят в разной структуре, поэтому необходимо сначала определить структуру данных, либо вешать разные функции.
Зададим плагину шорткод, совпадающий с именем папки плагина, это необходимо для автоматического вывода шорткодов на странице оформления заказа (автоматически работает только в дефолтном шаблоне, в остальных шаблонах необходимо добавлять шорткод вручную).
Обработчик шорткода должен формировать верстку, для указания дополнительных данных доставки, например, "город/тип", "доставки/выбор" пункта выдачи.
После ввода дополнительных данных вызывается функция расчета стоимости доставки. В POST запросе нужно передать все введенные дополнительные данные. Переданные данные необходимо сохранить в сессию, для дальнейших проверок: $_SESSION['delivery'][идентификатор_способа_доставки]].
В функции, которая вызавается после заполнения дополнительных данных, проверим наличие необходимых данных и производим расчет стоимости, используя API сервиса с которым интегрируемся. Данная функция модифицирует и возвращает в качестве результата одно из полей массива-аргумента: $args['result']. Если произошла ошибка, то записываем её в $args['result']['error'], и в $args['result']['summDelivery'] устанавливаем значение "-1". Иначе записываем в $args['result']['summDelivery'], рассчитаную стоимость доставки.
После оформления заказа необходимо сохранить дополнительные данные по доставке в поле "delivery_options", таблицы содержащей заказы. Для этого необходимо реализовать еще одну функцию, которая будет вызываться после создания или изменения заказа.
Соответствующие для этого хуки:
1. models_order_addorder - добавлен новый заказ;
2. models_order_updateorder - изменен заказ.
Тут необходимо учитывать, что при обменене заказами с 1С и сервисом МойСклад также происходит обновление данных заказа, но необходимых данных для обработки в этом случае функция не получает.
Для работы с параметрами доставки из админки необходимо в Pactioner.php реализовать две функции.
1. getAdminDeliveryForm() - функция должна вернуть верстку и JavaScript, который будет обрабатывать взаимодействие пользователя с этой версткой. Поместить все это нужно в $this->data['form'], обычным текстом. В POST запросе, во время выполнения этой функции доступны следующие данные:
2. getPriceForParams() - функция пересчитывает стоимость доставки. Возвращаемые данные заносятся в объект $this->data. При наличии ошибки, её текст заносится в поле "error". Рассчитанная стоимость заносится в поле "deliverySum".