Компьютерная грамотность, помощь и ремонт

Битрикс: создание обработчика автоматизированной службы доставки. Автоматизированные службы доставки Битрикс v14 Получить дополнительные услуги службы доставки bitrix

Модуль имеет функционал автоматического расчета стоимости доставки на основе данных о товаре и адреса доставки.

Для расчета стоимости доставки постовых отправлений используется сервис postcalc.ru. Обратите внимание, что в бесплатном режиме данный сервис имеет ограничение на количество запросов в день. В случае, если вам требуется более 500 запросов в день, вам необходимо перейти на платный тарифный план. Подробную информацию по условиям использования сервиса postcalc.ru вы можете получить перейдя по ссылке .


Для того чтобы добавить на ваш сайт службу доставки "Почта России" с возможностью автоматического расчета стоимости выполните следующие шаги:
1. В административной панели вашего сайта перейдите по адресу Администрирование > Магазин > Настройки > Службы доставки .

2. На странице со списком служб доставок нажмите на кнопку "Добавить". В появившемся выпадающем списке выберите тип - "Автоматизированная служба доставки".

3. В открывшейся странице создания новой службы доставки перейдите во вкладку "Настройки обработчика".
4. В поле "Служба доставки" в выпадающем списке выберите пункт "Почта России " и сохраните выбор нажатием кнопки "Применить".

5. После сохранения созданной службы доставки, на странице редактирования появятся дополнительные вкладки:

  • Параметры
  • Профили
  • Ограничения
Вкладка "Параметры"


В данной вкладке содержаться параметры:

  • Прибавить к цене - в данном поле вы можете указать сумму дополнительной наценки, которая будет прибавлена с стоимости доставки.
  • Округление стоимости до 10 вверх - отметьте эту опцию чтобы включить округление стоимости доставки.
  • Выводить адрес почты - при отмеченной опции будет формироваться адрес почтового отделения получателя. В дальнейшем его можно будет вывести на странице оформления заказа.
  • Выводить телефоны почты - при включенной опции на будет формироваться телефон почтового отделения, в которое будет доставлено отправление.

При отмеченных опциях "Выводить адрес почты" и "Выводить телефоны почты" будет формироваться переменная $arResult["RESULT"]["TEXT"]. Вы можете вывести данную информацию в публичной части вставив код "echo $arResult["RESULT"]["TEXT"];" в шаблоне компонента, который вы используете для вывода информации о стоимости доставки.


Вкладка "Профили"




В данной вкладке содержаться предустановленные профили модуля "Почта России/EMS - расчет и отслеживание" . Вам доступен весь набор стандартных действий над профилями служб доставки: Копирование, Редактирование, Удаление. Действия доступны из меню индивидуальных действий записей списка профилей. Данный функционал является стандартным в системе Битрикс. Более подробную информацию вы можете получить на соответствующей странице документации системы Битрикс.

Вкладка "ограничения"




В данной вкладке содержаться настройки стандартного функционала Битрикс, позволяющего ввести ограничения на применение настраиваемой службы доставки.

Обращаем ваше внимание, что для корректных расчетов стоимости отправлений с помощью сервиса postcalc.ru необходима передача данных о весе и оценочной стоимости товаров, входящих в отправление. Удостоверьтесь в панели администрирования вашего сайта, что эти данные внесены корректно для товаров каталога. Также для расчетов необходима информация об адресе доставки отправления, а также об адресе отправителя. Информация об отправителе вносится в административном интерфейсе вашего магазина по адресу Администрирование - Настройки - Настройки Модулей - Интернет магазин. Далее на странице настроек магазина перейдите во вкладку "Адрес магазина". Для корректного расчета стоимости отправлений заполните поле "Индекс".



Возможны следующие варианты получения информации об адресе доставки:

  • Из поля "Индекс" в форме оформления - рекомендуемый вариант.
  • Из свойства "Город", полученного из поля "Местоположение" в форме оформления заказа
  • Из свойства "Индекс", полученного из поля "Местоположение" в форме оформления заказа - в случае если это свойство заполнено для местоположения.

Рекомендуем вам предусмотреть отдельное, обязательное для заполнения поле "Индекс" в форме оформления заказа. В этом случае покупатель должен будет явно указать почтовый индекс, на который требуется выполнить отправку, что позволит избежать возможных ошибок при расчетах стоимости отправления.

Автоматизированные обработчики служб доставки позволяют программным образом реализовать произвольную логику расчёта стоимости доставки на основе параметров заказа и собственных настроек. Алгоритмы расчёта могут быть произвольными - фиксированная стоимость, запросы к удаленным web-сервисам, расчёт на основе собственных таблиц данных и т.д.

Обработчик представляет собой класс или набор функций следующей структуры:

Метод Описание
Описание обработчика Функция, возвращающая описание обработчика, названия методов, список профилей обработчика и пр.
Настройки обработчика Функция, возвращающая массив настроек обработчика
Обработка настроек Набор функций, отвечающий за подготовку настроек к занесению в БД и обратное преобразование.
Проверка совместимости Метод, осуществляющий проверку совместимости профилей данного обработчика с заказом.
Функция расчёта Метод, осуществляющий расчёт стоимости доставки на основе настроек обработчика и параметров заказа.

Поскольку работать с набором отдельных функций неудобно, рекомендуется объединить их в класс (пространство имен). Исходя из этой рекомендации будет идти дальнейшее описание, а также, реализован приводимый пример. В примере обработчик "Курьерская доставки" реализован в виде класса CDeliveryMySimple .

Описание обработчика

Описание обработчика представляет собой метод, возвращающий ассоциативный массив следующей структуры:

Параметр Описание
SID Уникальный строковой идентификатор обработчика.
NAME Название обработчика.
DESCRIPTION Текстовое описание обработчика
DESCRIPTION_INNER Внутреннее описание обработчика, отображаемое при конфигурации обработчика в Панели Управления.
BASE_CURRENCY Идентификатор базовой валюты обработчика
HANDLER Путь к файлу обработчика. Нужен для корректного автоматического копирования обработчика (ещё не реализовано). В подавляющем большинстве случаев достаточно значения __FILE__
GETCONFIG Название метода, возвращающего массив настроек валидатора. В случае реализации обработчика в виде класса, значение представляет собой массив ("имя_класса", "имя_метода").
DBSETSETINGS Название метода, отвечающего за проверку настроек обработчика и преобразование массива настроек в строку для сохранения. В случае реализации обработчика в виде класса, значение представляет собой массив ("имя_класса", "имя_метода"). В случае отсутствия этого метода массив настроек будет сохранен в базу в сериализованном виде.
DBGETSETTINGS Название метода, отвечающего за обратное преобразование строки настроек обработчика в массив. В случае реализации обработчика в виде класса, значение представляет собой массив ("имя_класса", "имя_метода").
COMPABILITY Название метода, отвечающего за дополнительную проверку совместимости профилей обработки с параметрами заказа. Если метод отсутствует, дополнительная проверка не будет проводиться. В случае реализации обработчика в виде класса, значение представляет собой массив ("имя_класса", "имя_метода").
CALCULATOR Название метода, осуществляющего расчёт стоимости доставки. В случае реализации обработчика в виде класса, значение представляет собой массив ("имя_класса", "имя_метода").
PROFILES Массив профилей обработки. Должен содержать хотя бы один профиль. Формат описания см. ниже.

Описание профилей представляет собой массив следующего формата:

"строковой_идентификато_профиля " => array("TITLE" => "название_профиля ", "DESCRIPTION" => "описание_профиля ", // веса указываются в граммах "RESTRICTIONS_WEIGHT" => array(минимальный_вес , максимальный_вес ), // суммы указываются в базовой валюте обработчика "RESTRICTIONS_SUM" => array(минимальная_сумма_заказа , максимальная_сумма_заказа ));

Если массив RESTRICTIONS_WEIGHT или RESTRICTIONS_SUM содержит один элемент, то он считается минимальным значением. Если никаких ограничений не требуется, нужно указать array(0) .

Function Init() { return array(/* Basic description */ "SID" => "simple", "NAME" => "Доставка курьером", "DESCRIPTION" => "", "DESCRIPTION_INNER" =>
" .".", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Handler methods */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compability"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* List of delivery profiles */ "PROFILES" => array("simple" => array("TITLE" => "доставка", "DESCRIPTION" => "Срок доставки до 3 дней", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),)); }

Параметры валидатора

Метод, заданный элементом GETCONFIG , должен возвращать массив элементов вида:

Array("CONFIG_GROUPS" => array("идентификатор_группы1 " => "название_группы1 ", "идентификатор_группы2 " => "название_группы2 ", /* ...................... */), "CONFIG" => array("идентфикатор_параметра1 " => array("TITLE" = > "название_параметра1 ", "TYPE" => "тип_параметра1 ", "DEFAULT" => "значение_по_умолчанию_параметра1 ", "GROUP" => "идентфикатор_группы_параметра1 ", "VALUES" => array("значение1_параметра1 " => "наименование_значения1_параметра1 ", "значение2_параметра1 " => "наименование_значения2_параметра1 ", /* ....................... */)), /* ........................ */))

Группы параметров, описываемые в элементе массива с ключом " CONFIG_GROUPS " отображаются в виде отдельных вкладок в форме редактирования параметров обработчика, содержащих параметры, приписанные к этой группе. Элемент массива с ключом " CONFIG " задает список параметров. Тип параметра может принимать одно из следующих значений:

  • STRING - поле для ввода текста
  • PASSWORD - поле для ввода пароля
  • CHECKBOX - элемент типа "флажок" со значением "Y"
  • RADIO
  • DROPDOWN - набор вариантов в виде выпадающего списка
  • MULTISELECT - набор вариантов в виде списка со множественным выбором
  • RADIO - набор вариантов в виде радио-кнопок

Для типов параметра подразумевающий выбор из нескольких вариантов значений (DROPDOWN , MULTISELECT и RADIO ) список значений задается элементом описательного массива с ключом " VALUES ". Для остальных типов параметров этот элемент игнорируется.

Function GetConfig() { $arConfig = array("CONFIG_GROUPS" => array("all" => "Стоимость доставки",), "CONFIG" => array(),); // параметрами обработчика в данном случае являются значения стоимости доставки в различные группы местоположений. // для этого сформируем список параметров на основе списка групп $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) { $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Стоимость доставки в группу "\" " .$arLocationGroup["NAME"]."\" " .(".COption::GetOptionString("sale", "default_currency", "RUB").")", "GROUP" => "all",); } return $arConfig; }

Обработка параметров

Обработка параметров обработчика требует двух методов, задаваемых в описании параметрами DBSETSETTINGS и DBGETSETTINGS . Первый из них получает на вход массив значений параметров вида "идентфикатор_параметра " => "значение_параметра " и должен вернуть их строковое представление. Второй - совершить обратное преобразование. Оба метода могут также совершать произвольные манипуляции со значениями параметров.

Function SetSettings($arSettings) { // Проверим список значений стоимости. Пустые значения удалим из списка. foreach ($arSettings as $key => $value) { if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); } // вернем значения в виде сериализованного массива. // в случае более простого списка настроек можно применить более простые методы сериализации. return serialize($arSettings); } function GetSettings($strSettings) { // вернем десериализованный массив настроек return unserialize($strSettings); }

Проверка совместимости

Проверка совместимости профилей обработчика с заказом осуществляется методом, задаваемым в описании параметром " COMPABILITY ". Этот метод принимает на вход 2 параметра - описательный массив заказа и массив настроек обработчика. В качестве ответа метода ожидается массив, содержащий идентификаторы подходящих для данного заказа профилей доставки. Проверка, задаваемая значениями " RESTRICTIONS_WEIGHT " и " RESTRICTIONS_SUM " в настройках профиля, производится вне обработчика и здесь не требуется. Формат принимаемых на вход данных следующий:

Первый параметр - информация о заказе - представляет собой массив со следующими ключами:

Второй параметр представляет собой значение массива, заданного элементом с ключом " CONFIG " в обработчика, к каждому элементу которого добавлено значение параметра с ключом " VALUE ".

В рассматриваемом нами примере единственная условие совместимости - это наличие в настройках обработчика значения стоимости доставки хотя бы для одной из групп местоположений, в которые входит местоположение, передаваемое в заказе.

// введем служебный метод, определяющий группу местоположения и возвращающий стоимость для этой группы. function __GetLocationPrice($LOCATION_ID, $arConfig) { // получим список групп для переданного местоположения $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups->Fetch()) { if (array_key_exists("price_".$arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) { // если есть непустая запись в массиве настроек для данной группы, вернем ее значение return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; } } // если не найдено подходящих записей, вернем false return false; } // метод проверки совместимости в данном случае практически аналогичен рассчету стоимости function Compability($arOrder, $arConfig) { // проверим наличие стоимости доставки $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig); if ($price === false) return array(); // если стоимость не найдено, вернем пустой массив - не подходит ни один профиль else return array("simple"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки }

Обработчик

Основной метод расчёта стоимости доставки получает на вход следующие параметры:

  • идентификатор профиля доставки;
  • массив настроек обработчика доставки;
  • описательный массив заказа;
  • текущий шаг расчёта;
  • временные данные, переданные с прошлого шага расчёта.

На выход обработчик должен дать стоимость доставки в валюте, задаваемой в параметрах, либо массив следующей структуры:

Ключ Описание
RESULT Идентификатор ответа. Возможные значения:
  • "OK " - стоимость доставки успешно рассчитана;
  • "ERROR " - в процессе расчёта произошла ошибка;
  • "NEXT_STEP " - необходимо перейти на следующий шаг для продолжения расчёта.
VALUE Значение стоимости доставки в валюте, задаваемой в параметрах. (RESULT = "OK")
TRANSIT Длительность доставки в днях (RESULT = "OK"). Если отсутствует, то длительность не выводится.
periodFrom Строки доставки автоматизированных служб доставок. От указанного количества дней. Необходим для передачи сроков доставки в Яндекс.маркет. Используется при разработке собственных служб доставок.
periodTo Строки доставки автоматизированных служб доставок. До указанного количества дней. Необходим для передачи сроков доставки в Яндекс.маркет. Используется при разработке собственных служб доставок.
TEXT Текст ошибки или текст, сопровождающий переход на следующий шаг (RESULT = {"ERROR"|"NEXT_STEP"}).
TEMP Строка, содержащая промежуточные данные, передаваемые следующему шагу (RESULT = "NEXT_STEP").

В описываемом нами примере многошаговый процесс не подразумевается, потому, расчёт осуществляется просто.

Function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { // служебный метод рассчета определён выше, нам достаточно переадресовать на выход возвращаемое им значение. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); }

Интеграция обработчика

Путь к автоматически подключаемым файлам обработчиков устанавливается в настройках модуля "Интернет-магазин". Путь по умолчанию - /bitrix/php_interface/include/sale_delivery/ Такие файлы должны иметь префикс delivery_ , в противном случае, они будут проигнорированы. Если система обнаружит файл, имеющее то же название, что и системный, то он будет подключаться вместо системного. Подключение автоматизированной доставки в файле производится установкой описательного метода в качестве обработчика события onSaleDeliveryHandlersBuildList .

Пример

Подытожив все вышесказанное, сформируем обработчик простой доставки. Класс обработчика расположим в файле /bitrix/php_interface/include/sale_delivery/delivery_mysimple.php

"simple", "NAME" => "Доставка курьером", "DESCRIPTION" => "", "DESCRIPTION_INNER" => "Простой обработчик курьерской доставки. Для функционирования необходимо " ."наличие хотя бы одной группы местоположений. При настройке обработчика указывается " ."фиксированная стоимость доставки для каждой группы местоположений. Для того, чтобы " ."группа не участвовала в обработке, оставьте пустым поле стоимости для этой группы." ."
" ."" ."Редактировать группы местоположений" .".", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Методы обработчика */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compability"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Список профилей доставки */ "PROFILES" => array("simple" => array("TITLE" => "доставка", "DESCRIPTION" => "Срок доставки до 3 дней", "RESTRICTIONS_WEIGHT" => array(0), // без ограничений "RESTRICTIONS_SUM" => array(0), // без ограничений),)); } // настройки обработчика function GetConfig() { $arConfig = array("CONFIG_GROUPS" => array("all" => "Стоимость доставки",), "CONFIG" => array(),); // настройками обработчика в данном случае являются значения стоимости доставки в различные группы местоположений. // для этого сформируем список настроек на основе списка групп $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) { $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Стоимость доставки в группу \"" .$arLocationGroup["NAME"]."\" " ."(".COption::GetOptionString("sale", "default_currency", "RUB").")", "GROUP" => "all",); } return $arConfig; } // подготовка настроек для занесения в базу данных function SetSettings($arSettings) { // Проверим список значений стоимости. Пустые значения удалим из списка. foreach ($arSettings as $key => $value) { if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); } // вернем значения в виде сериализованного массива. // в случае более простого списка настроек можно применить более простые методы сериализации. return serialize($arSettings); } // подготовка настроек, полученных из базы данных function GetSettings($strSettings) { // вернем десериализованный массив настроек return unserialize($strSettings); } // введем служебный метод, определяющий группу местоположения и возвращающий стоимость для этой группы. function __GetLocationPrice($LOCATION_ID, $arConfig) { // получим список групп для переданного местоположения $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups->Fetch()) { if (array_key_exists("price_".$arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) { // если есть непустая запись в массиве настроек для данной группы, вернем ее значение return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; } } // если не найдено подходящих записей, вернем false return false; } // метод проверки совместимости в данном случае практически аналогичен рассчету стоимости function Compability($arOrder, $arConfig) { // проверим наличие стоимости доставки $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig); if ($price === false) return array(); // если стоимость не найдено, вернем пустой массив - не подходит ни один профиль else return array("simple"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки } // собственно, рассчет стоимости function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { // служебный метод рассчета определён выше, нам достаточно переадресовать на выход возвращаемое им значение. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); } } // установим метод CDeliveryMySimple::Init в качестве обработчика события AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryMySimple", "Init")); ?>

Post factum

Несколько советов в завершение:

  • Если Ваш обработчик использует какие-либо ресурсоемкие вычисления, обращения к базе данных, запросы к удаленным серверам и т.д., то категорически рекомендуется использовать тот или иной вариант кеширования результата, реализованный таким образом, чтобы запоминались результаты хотя бы для заказа с данными параметрами. Это необходимо из-за того, что в процессе оформления и обработки заказа запрос к обработчику на расчёт стоимости заказа может происходить несколько раз. В поставляемых обработчиках используется механизм управляемого кеширования, настроенный с учётом специфики алгоритма вычисления стоимости конкретной службой доставки.
  • Для кастомизации системного обработчика достаточно скопировать его файл (вместе с сопутствующими файлами, лежащими обычно в каталоге с тем же названием) в каталог /bitrix/php_interface/include/sale_deivery/ с сохранением имени. В этом случае он будет подключаться вместо системного.

Как загрузить конфигурационный файл:

Как настроить корзинный виджет:

    В личном кабинете Яндекс.Доставки перейдите по ссылке Настройки в правом верхнем углу страницы, затем перейдите на вкладку Интеграция → Виджеты .

    В блоке корзинного виджета нажмите кнопку Установить и скопируйте код виджета.

    Вернитесь в настройки модуля и вставьте код в поле Код корзинного виджета .

Не забудьте выбрать город, в котором располагается ваш склад. Если вы хотите отгружать заказы на единый склад, включите опцию Использовать склад Яндекс.Доставки .

Значения отправителя по умолчанию

В поле ID отправителя по умолчанию выберите магазин, из которого чаще всего отгружаются заказы.

Габариты товаров

Настройте габариты и вес товаров. Заданные габариты передаются в Яндекс.Доставку, и на их основе рассчитывается стоимость доставки.

Если вы не знаете, какие значения выбрать в этом блоке, обратитесь к администратору сайта.

Свойства заказа

В списке слева перечислены поля, которые заполняет пользователь при оформлении заказа. В списке справа выберите соответствующие свойства заказа. Список всех свойств находится на странице Магазин → Свойства заказа . Выбранные свойства используются на карточке заказа.

Если вы не знаете, что выбрать в этом блоке, обратитесь к администратору сайта.

Внимание. Если вы задаете настройки адреса автоматически, обязательно проверьте, какой Новый шаблон используется в последних версиях модуля «магазин» ."}}\">шаблон оформления заказа используется на вашем сайте. Если используется старый шаблон, отметьте соответствующую опцию.

Статусы заказа

В списке слева перечислены статусы заказа в системе Яндекс.Доставки. В полях справа выберите соответствующие значения в вашей системе.

Если для статуса в Яндекс.Доставке нет статуса в вашей системе, оставьте поле пустым.

Свойства товаров

Выберите свойство, которое соответствует артикулу заказа. Если вы не знаете, какое свойство выбрать, обратитесь к администратору сайта.

Настройки компонента

Включите эту опцию, чтобы при оформлении заказа покупатель видел корзинный виджет сразу, когда выбирает Яндекс.Доставку. Покупателю не потребуется делать лишние шаги при оформлении заказа.

Пример

Как отправлять заказы в Яндекс.Доставку

Чтобы отправить заказ в Яндекс.Доставку:

    Перейдите на вашем сайте на страницу Администрирование → Магазин → Заказы .

    Нажмите ID нужного заказа, а затем кнопку Яндекс.Доставка .

В окне отправки заказа может быть сообщение «Данные по заказу были изменены, необходимо пересчитать стоимость доставки» . Нажмите кнопку Изменить вариант доставки и выберите новый вариант.

Примечание. В модуле нет возможности управлять отгрузками - это можно делать в личном кабинете Яндекс.Доставки.

Установка виджетов

Вы можете установить на сайт гео-виджет или корзинный виджет .

Шаг 1. Создайте на сайте тестовую страницу

    Перейдите на вкладку Сайт и на верхней панели нажмите кнопку Создать страницу .

    В открывшемся окне выберите опции Перейти к редактированию страницы и Ограничить доступ к странице . Включите доступ только для администраторов.

    Больше ничего заполнять не нужно - нажмите кнопку Готово .

Шаг 2. Настройте виджет

    Разверните меню Магазин → Компоненты yandexmarketlab и перетащите Виджет Яндекс.Доставки в пустое поле слева.

    Вернитесь к настройкам модуля и вставьте код в соответствующее поле.

    Задайте остальные настройки и нажмите кнопку Сохранить . Если вы не знаете, какие значения выбрать, обратитесь к администратору сайта.

Шаг 3. Добавьте виджет на сайт

Решение проблем

Модуль не работает

Прежде всего убедитесь, что ваш сайт соответствует системным требованиям. Это можно сделать на странице Администрирование → Настройки → Инструменты → Диагностика → Настройки PHP . Должны отображаться следующие значения:

    В верхнем блоке - версия PHP 5.3–7.0.

    В первой таблице, в строке Server API - Apache 2.0 или выше.

    В таблице MySQL , в строке Client API version - версия 5.0 или выше.

    В таблице cURL , в строке cURL support - «enabled» .

Если сайт не удовлетворяет каким-то требованиям, обратитесь к хостеру сайта.

Дополнительно вы можете запустить проверку сайта на странице Администрирование → Настройки → Инструменты → Проверка системы , на вкладках Тестирование конфигурации и Проверка доступа .

При установке модуля появляется ошибка «Служба Яндекс.Доставки не найдена»

Добавьте службу вручную. Для этого:

    Перейдите на страницу Администрирование → Магазин → Настройки → Службы доставки .

    Нажмите кнопку Добавить и выберите вариант Автоматизированная служба доставки .

    На вкладке Настройки обработчика разверните выпадающий список Служба доставки и выберите Яндекс.Доставку.

Совет. Если вы не смогли решить проблему, обратитесь в службу поддержки в личном кабинете Яндекс.Доставки.

В способах доставки покупатель не видит Яндекс.Доставку или ссылку «Выбрать вариант доставки»

Шаг 1. Проверьте службы доставки

    Перейдите на страницу Администрирование → Магазин → Службы доставки и проверьте, что на странице есть Яндекс.Доставка и она активна.

    Нажмите на Яндекс.Доставку и убедитесь, что в открывшемся окне вкладка Ограничения пустая.

Шаг 2. Проверьте настройки модуля

Перейдите на страницу Администрирование Настройки продукта Настройки модулей → Яндекс.Доставка и убедитесь, что:

    все настройки в блоке Настройки обмена заданы правильно;

    в блоке Габариты товаров заданы все значения.

Шаг 3. Проверьте город по умолчанию

Проверьте, что в настройках задан город магазина:

    Перейдите на страницу Администрирование → Свойства заказа → Список свойств .

    Для каждого свойства с типом «Location» нажмите номер свойства и в открывшемся окне задайте город, в котором расположен ваш основной магазин или склад.

Шаг 4. Включите режим совместимости

Если на вашем сайте используется Новый шаблон используется в последних версиях модуля «магазин» .

"}}\">новый шаблон оформления заказа , включите режим совместимости:

Совет. Если вы не смогли решить проблему, обратитесь в службу поддержки в личном кабинете Яндекс.Доставки.

Пользователь не видит стоимость доставки при выборе Яндекс.Доставки

Совет. Если вы не смогли решить проблему, обратитесь в службу поддержки в личном кабинете Яндекс.Доставки.

В Яндекс.Доставку не попадают данные покупателя

Если на карточке заказа есть все данные покупателя, а в форме отправки заказа в Яндекс.Доставку их нет, проверьте настройки свойств заказа на странице Администрирование → Магазин → Свойства заказа → Список свойств .

"}}\">шаблона оформления заказа :
  • Новый шаблон
  • Старый шаблон

Сколько волка не корми, а поросенок вкуснее

Битрикс: создание обработчика автоматизированной службы доставки

В битриксе есть два типа служб доставки: настраиваемые и автоматизированные. В статье будет описано создание обработчика автоматизированной службы доставки.

Что такое этот автоматизированный обработчик

Все предустановленные обработчики располагаются в папке /bitrix/modules/sale/lang/ru/delivery/ . Свои обработчики следует располагать в папке /bitrix/php_interface/include/sale_delivery/ (этот путь можно изменить в свойствах модуля интернет-магазина).

Обработчик представляет собой класс определенной структуры со строкой подключения обработчика доставки по событию onSaleDeliveryHandlersBuildList .

Класс обработчика доставки должен иметь ряд методов, типы действий которых, описываются в методе Init класса.

1. Init — происходит инициализации основных полей.

2. DBGETSETTINGS — метод считывания значений параметров.

3. DBSETSETTINGS — метод установки значений параметров.

4. GETCONFIG — определение конфигурации настроек (их можно разбить на табы).

5. COMPABILITY — проверка совместимости профилей обработчика с заказом.

6. CALCULATOR — расчет стоимости доставки.

1. SID — Уникальный строковой идентификатор обработчика.
2. NAME — Название обработчика.
3. DESCRIPTION — Текстовое описание обработчика
4. DESCRIPTION_INNER — Внутреннее описание обработчика, отображаемое при конфигурации обработчика в Панели Управления.
5. BASE_CURRENCY — Идентификатор базовой валюты обработчика
6. HANDLER — Путь к файлу обработчика. Нужен для корректного автоматического копирования обработчика (ещё не реализовано). В подавляющем большинстве случаев достаточно значения __FILE__

Также должен быть задан хотя бы один профиль доставки.

"Plain", // Идентификатор службы доставки "NAME" => "Курьер Красная Пресня", "DESCRIPTION" => "Описание его для клиентов сайта", "DESCRIPTION_INNER" => "Описание для администраторов сайта", "BASE_CURRENCY" => "RUR", "HANDLER" => __FILE__, /* Определение методов */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), "GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "Compability"), "CALCULATOR" => array("CDeliveryPlain", "Calculate"), /* Список профилей */ "PROFILES" => array("all" => array("TITLE" => "Без ограничений", "DESCRIPTION" => "Профиль доставки без каких-либо ограничений", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),)); } /* Установка параметров */ function SetSettings($arSettings) { foreach ($arSettings as $key => $value) { if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); } return serialize($arSettings); } /* Запрос параметров */ function GetSettings($strSettings) { return unserialize($strSettings); } /* Запрос конфигурации службы доставки */ function GetConfig() { $arConfig = array("CONFIG_GROUPS" => array("all" => "Параметры",), "CONFIG" => array("DELIVERY_PRICE" => array(// "TYPE" => "STRING", // "DEFAULT" => "200", // "TITLE" => "Стоимость доставки", // "GROUP" => "all",)),); return $arConfig; } /* Проверка соответствия профиля доставки заказу */ function Compability($arOrder, $arConfig) { return array("all"); } /* Калькуляция стоимости доставки*/ function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { // получать стоимость корзины // Выведем актуальную корзину для текущего пользователя $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "QUANTITY")); while ($arItems = $dbBasketItems->Fetch()) { if (strlen($arItems["CALLBACK_FUNC"]) > 0) { CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); } $arBasketItems = $arItems; } // Печатаем массив, содержащий актуальную на текущий момент корзину foreach ($arBasketItems as $num => $item) { $TotalSumArr = $item["PRICE"]*$item["QUANTITY"]; } // сумма всех товаров с учетом количества $TotalSum = array_sum($TotalSumArr); // в зависимости от суммы делать наценку за доставку // от 1500 до 5000 доставка 750руб if($TotalSum >= 1500 && $TotalSum <= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $DeliveryCost = 0; return array("RESULT" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_PRICE"], "VALUE" => $DeliveryCost); } } AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>

В обрабочике есть код который считает содержимое корзины и в зависимости от цены предлагает разную стоимость доставки.

Похожие публикации