Плагин доставки

Для того, чтобы переопределять стоимость доставки, на ту которая была рассчитана своим плагином, необходимо добавить функцию-обработчик на два хука(крючка):

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 запросе, во время выполнения этой функции доступны следующие данные: 

  • order_id - id заказа;
  • deliveryId - id способа доставки;
  • firstCall - флаг, который указывает, первый ли раз мы выполняем запрос с этой страницы. Это необходимо, чтобы не подключать на страницу js по несколько раз, а подключить только при первом запросе.


2. getPriceForParams() - функция пересчитывает стоимость доставки. Возвращаемые данные заносятся в объект $this->data. При наличии ошибки, её текст заносится в поле "error". Рассчитанная стоимость заносится в поле "deliverySum".

Примеры реализованых плагинов для интеграции с сервисами доставок: