new

ms_CDEK2

Добавляет методы доставки СДЭК, расчет цены и времени доставки по индексу и городу
Автор дополнения
Артур Шевченко
Пакетов
11
Закачек
3 203
Обычно отвечает в течение суток
Автор дополнения
Пакетов
11
Закачек
3 203
Обычно отвечает в течение суток
Версия 2.9.0-pl
Дата выпуска 28.05.2026
Загрузки 1 360
Просмотры 19 113
Внимание, этот компонент несовместим с MODX 3.
ВНИМАНИЕ Не обновляйте компонент, если текущая версия ниже 2.х.х Удалите текущую версию полностью и установите новую.
ВНИМАНИЕ При использовании SendIt 2.4.0+ на странице оформления заказа должен быть хотя один ЛЮБОЙ html-элемент с атрибутом data-si-form
ВНИМАНИЕ Компонент не работает с PHP 8
Данный компонент не реализует функционал отправки заказов в личный кабинет CDEK — только расчёт стоимости!

Требования:
  • Версия PHP >=7.4
  • Версия modx >=2.6
  • Версия miniShop2 >=3.0.7

Зависимости:
  • miniShop2
  • SendIt
  • pdoTools

ВАЖНО
Если вы обновляете компонент ОБЯЗАТЕЛЬНО укажите коды тарифов для используемых способов доставки в описании способа доставки или на вкладке Параметры.
Если вы устанавливаете компонент впервые убедитесь, что коды способов доставки соответствуют вашему договору со СДЭК.

Быстрый старт

После установки компонента ОБЯЗАТЕЛЬНО выполнить первые 6 пунктов из списка ниже:

1. Перейдите в системные настройки и выберите пространство имён ms_cdek2;
2. Установите свои значения в поля с ключами ms_cdek2_login и ms_cdek2_password;
3. Установите индекс отправителя в поле ms_cdek2_sender_index;
4. Убедитесь, что в поле ms_cdek2_deliveries установлены правильные ID способов доставки (door — доставка до двери, pvz — доставка в ПВЗ);
5. Убедитесь, что в поле ms_cdek2_tariffs установлены правильные ID способов доставки и ID тарифов СДЭК (доставка до двери для ИМ тариф 137, доставка в ПВЗ — 136);
6. Установите номер шаблона с формой оформления заказа в поле ms_cdek2_template (чтобы скрипты фронтэнда подключались только на страницах с этим шаблоном);
7. Если используете доставку до ПВЗ, то в чанке с формой оформления заказа добавьте код
<div data-mscdek-list></div>
Для того, чтобы сработал расчёт стоимости доставки, пользователь должен ввести почтовый индекс.
8. Для вывода выбранного ПВЗ в письме, добавьте в чанк
{$address.properties.point}


Вывод карты со списком ПВЗ

Начиная с версии 2.9.0 поддерживаются два провайдера карт. Выбор задаётся системной настройкой ms_cdek2_map_provider (значения osm по умолчанию или yandex), а ключ хранится в унифицированной
настройке ms_cdek2_map_api_key (нужен только для Яндекса).

К пунктам из быстрого старта выполнить следующие действия:
Вариант 1. OpenStreetMap + Leaflet (по умолчанию, без ключа)
1. Убедитесь, что ms_cdek2_map_provider имеет значение osm (так и стоит после чистой установки).
2. В шаблон с формой оформления заказа вставьте код .
Leaflet и плагин leaflet.markercluster подтягиваются с публичного CDN (cdn.jsdelivr.net) автоматически — никаких дополнительных подключений в шаблоне делать не нужно.

Вариант 2. Яндекс.Карты
1. Получите ключ для JavaScript API и HTTP Геокодер на developer.tech.yandex.ru.
2. В системной настройке ms_cdek2_map_provider укажите yandex.
3. Установите полученный ключ в системную настройку ms_cdek2_map_api_key.
4. В шаблон с формой оформления заказа вставьте код .
ВНИМАНИЕ Если карта Яндекса с ПВЗ не выводится, проверьте настройки ключа в ЛК Яндекса: если есть привязка к домену — уберите, если нет — сделайте. Если это не помогло, попробуйте создать новый
ключ. Также может помочь ограничение по HTTP Referer для домена cdek.ru. Если и это не помогло, пишите в ТП Яндекс.Карт.

Миграция со старых версий
До 2.9.0 ключ Яндекс.Карт хранился в настройке ms_cdek2_yandex_map_api_key. При обновлении пакета значение автоматически переносится в ms_cdek2_map_api_key, а ms_cdek2_map_provider выставляется в
yandex. Если ключа не было — провайдер останется osm. Старая настройка удаляется.

Лицензия OpenStreetMap
Карта в режиме osm рендерится на бесплатных тайлах tile.openstreetmap.org. Согласно лицензии ODbL и OSM Tile Usage Policy, требуется видимое указание авторства данных. В пакетных стилях стандартный
блок атрибуции Leaflet скрыт (для аккуратности UI), поэтому разместите в шаблоне рядом с картой или в подвале страницы текст «© OpenStreetMap contributors». Кроме того, OSM Tile Usage Policy не
рекомендует высоконагруженное коммерческое использование с публичных тайлов — при росте трафика подключите свой кеш/прокси тайлов или платный тайл-сервис.

Подсказки при вводе адрес

К пунктам из быстрого старта выполнить следующие действия:
1. Получить токен в сервисе DaData и установить его в системную настройку с ключом ms_cdek2_dadata_token;
2. Полю, в которое пользователь будет вводить адрес добавить атрибут data-mscdek-suggest-field;
3. В шаблон с формой оформления заказа вставить код
<ul class="hide" data-mscdek-suggest-list></ul>
для вставки подсказок.

2.9.0-pl

  • Добавил поддержку OpenStreetMap (Leaflet) в качестве провайдера карт.
  • Новые системные настройки: ms_cdek2_map_provider (значения "osm" по умолчанию или "yandex") и ms_cdek2_map_api_key (унифицированный ключ; нужен только для Yandex). Старая настройка ms_cdek2_yandex_map_api_key удалена.
  • При обновлении пакета запускается миграция: если в ms_cdek2_yandex_map_api_key был ключ — он переносится в ms_cdek2_map_api_key, а провайдер автоматически выставляется в "yandex"; иначе остаётся "osm". Старая настройка удаляется.
  • В webConfig добавлено поле mapProvider; модуль map.js теперь ветвит инициализацию, кластеризацию и маркеры по выбранному провайдеру.
  • Для OSM подключаются Leaflet 1.9.4 и leaflet.markercluster 1.5.3 с CDN jsdelivr (без API-ключа).
  • Карта корректно поднимается даже если контейнер виден после initMap (например, лениво открываемая модалка): через ResizeObserver на mapBlock автоматически дёргается invalidateSize, тайлы и кластеры пересчитываются под актуальный viewport.
  • В response при неудачном расчёте стоимости (mscdek_getstatus → success=false) добавлено поле data.debug с конкретной причиной: tariff_code, отправленный request, ответ CDEK API и, при наличии, api_error из ExternalApi\Base::$lastError. Сообщение пользователю остаётся прежним (ms_cdek2_error), детализация — для разработчика в DevTools/Network.
  • Исправил двойную регистрацию ассетов в HTML при повторном срабатывании OnLoadWebDocument в рамках одного request: loadJSCSS теперь идемпотентный через placeholder ms_cdek2_jscss_loaded.
  • Для Leaflet поправил CSS-конфликт .mscdek-cluster { position: relative } (выражение конкретизировано до :not(.leaflet-marker-icon)), из-за которого кластеры визуально съезжали по карте.

2.8.6-pl

  • Расширил список полей адреса при сборке to_location для курьерской доставки: теперь в строку адреса попадают building (дом), room (квартира/офис) и metro (ориентир). Поле index убрано из склейки, так как передаётся отдельно в postal_code.
  • Добавил fallback в поиске ПВЗ для случая, когда поле города на форме не заполнено, а по введённому индексу СДЭК не возвращает ни одного ПВЗ. Логика трёхуровневая: сначала прямой запрос по postal_code; затем перебор всех city_code, которые СДЭК отдаёт по этому индексу через /v2/location/cities; если и там ничего не нашлось — резолв индекса в название города через DaData с последующим запросом ПВЗ по этому городу. Лечит кейсы вроде 300016 (Тула), к которому в базе СДЭК не привязан ни один ПВЗ и который их API резолвит только в окрестные деревни.
  • Добавил скрытие статуса при обновлении суммы заказа.

2.8.5-pl

  • Исправил совместимость с PHP 8.0+ при установке пакета (get_parent_class).

2.8.4-pl

  • Исправил ошибку при получении свойств товара.

2.8.3-pl

  • Вынес получение пункта назначения в отдельный метод.

2.8.2-pl

  • Внёс изменения для работы с компонентом cdekIntegrate

2.8.1-pl

  • Исправил ошибку при отсутствии ответа от API СДЭКа
  • Добавил динамический импорт с версионированием во все JS модули
  • Убрал проверку на бота для всех пресетов
  • Изменил метод определения версии скриптов

2.8.0-pl

  • Добавил новй метод sendRequest() в классе MsCdek2 для отправки запросов
  • Добавил системное событие msCdek2OnSendRequest для доступа к ответам от API СДЭКа

2.7.10-pl

  • Добавил передачу полной стоимости доставки в чанк вывода статуса.

2.7.9-pl

  • Исправил ошибку не срабатывающих системных событий.

2.7.8-pl

  • Изменил порядок проверки минимальной суммы до бесплатной доставки.

2.7.7-pl

  • Исправил ошибку получения размеров не из стандартного поля size.

2.7.6-pl

  • Добавил ещё один способ расчёта количества пакетов (ms_cdek2_packages_calc_type - 5): вес равен сумме весов товаров, а размеры из системных настроек.

2.7.5-pl

  • Добавил возможность передавать код страны с фронта без использования ДаДата.
  • Добавил системную настройку ms_cdek2_use_individual_weight для использования индивидуальных весов в калькуляторе.
  • Изменил порядок расчёта доп.стоимости доставки: теперь можно указать доп.стоимость в процентах от рассчитанной стоимости доставки; если стоимость доставки не рассчитана, то и доп.стоимость не будет учтена.

2.7.4-pl

  • Добавил обновление стоимости заказа при факапе с индексом.

2.7.3-pl

  • Исправил ошибку при отсутствии поля country.
  • Сделал добавление индекса перед проверкой статуса доставки, на случай, когда в поле индекс введён, а на сервере в данных заказа его нет.

2.7.2-pl

  • Вынес в конфиг js шаблон для кластера на карте и стили перенёс в файл стилей.
  • Сделал так, чтобы не удалялось введенное значение в поле адреса.
  • Добавил проверку существования поля point в методе сортировки списка ПВЗ.
  • Добавил поиск ПВЗ по городу: если ПВЗ не найдены по индексу, то будет произведён поиск по городу.
  • Переписал параметры расчёта стоимости доставки: теперь в запрос передаются все данные адреса, но приоритет остался за индексом.

2.7.1-pl

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

2.7.0-pl

  • Добавил пятый способ расчёта количества пакетов (ms_cdek2_packages_calc_type_desc = 4), при котором количество вообще не рассчитывается а берётся один пакет с размерами и весом из системных настроек.

2.6.2-pl

  • Исправил ошибку в методе сортировки ПВЗ.
  • Добавил в стили для блока карты ширину 100%;

2.6.1-pl

  • Исправил расчёт размеров пакета для вариантов, учитывающих количество.

2.6.0-pl

  • Добавил возможность тонкой настройки расчёта количества пакетов.

2.5.0-pl

  • Добавил учёт дополнительной стоимости из настроек способа доставки.
  • Сделал так, чтобы индекс был получен даже если не указан дом, а только улица.
  • Добавил системную настройку для ms_cdek2_point_value_field_name для возможности изменить передаваемое в заказ значение адреса ПВЗ.
  • Добавил расчёт дистанции по прямой до ПВЗ.
  • Добавил событие msCdek2OnResetStatus.
  • Добавил сохранение информации о выбранном ПВЗ в properties адреса доставки (msOrderAddress)

2.4.6-pl

  • Исправил баг с установкой параметров для SendIt.

2.4.5-pl

  • Поменял тип поля системной настройки sender_country.
  • Добавил смену версий скриптов и стилей при обновлении компонента.

2.4.4-pl

  • Добавил запуск расчёта стоимости при изменении страны.

2.4.3-pl

  • Добавил возможность указывать несколько способов доставки требующих получения списка ПВЗ.

2.4.2-pl

  • Добавил учёт количества каждого товара при расчёте веса и габаритов.

2.4.1-pl

  • Bug-fix.

2.4.0-pl

  • Доработал систему JavaScript событий.
  • Связал список и карту.
  • Добавил чанки для элемента списка подсказок и для статуса.
  • Перенёс пресеты в файл.

2.3.1-pl

  • Избавился от зависимости от компонента msDeliveryProps.

2.3.0-pl

  • Добавил js событие mscdek:address:select:suggestion.

2.2.2-pl

  • Добавил явные размеры маркеру ПВЗ на карте.
  • Добавил возможность выводить подсказки по разным странам.

2.2.1-pl

  • Добавил определение страны получателя в сервисе ДаДата.

2.2.0-pl

  • Зачистил компонент от устаревших файлов и настроек
  • Переписал JS и PHP код.
  • Подключил автодополнения от DaData.

2.2.0-beta4

  • Исправил значение системной настройки ms_cdek2_main_css_path.
  • Добавил проверку существования родительского блока в JS.
  • Добавил проверку на наличие поля с именем city для подключения автодополнений.

2.2.0-beta3

  • Исправил ошибку с изменением значения способа доставки.

2.2.0-beta

  • Переписан JS код, jQuery больше не требуется.
  • Автокомплит отключить нельзя, так как требуется обязательное получение кода города от сервиса СДЭК.
  • Для автодополнений используется самописный плагин.
  • Можно указать пути к своим стилям в системных настройках.
  • В JS появились события 'mscdek:init', 'mscdek:status:before', 'mscdek:status:after'.

2.1.2-pl

  • Совместимость с miniShop2-4.x.x

2.1.1-pl

  • Добавлен Content-type к запросу API

2.1.0-pl

  • Реализована совместимость с компонентом cdekIntegrate

2.0.31-pl

  • Задержка отображения стоимости доставки, чтобы индекс успел сохраниться (фикс ПВЗ)

2.0.30-pl

  • Исправлена калькуляция при дробном количестве
  • Выбор кода города по приоритету
  • Исправлена калькуляция при изменении города

2.0.29-pl

  • Добавлен timeout на случай недоступности сервера CDEK
  • Добавлен location по умолчанию, если не удалось определить по индексу

2.0.28-pl

  • Определение точного индекса пункта выдачи

2.0.27-pl

  • Автодополнение от CDEK - выбор самого первого индекса из списка

2.0.26-pl

  • Исправлено отображение лексикона для поля mscdek_size

2.0.25-pl

  • Добавлена системная настройка для указания URL servicepath для виджета

2.0.24-pl

  • Исправлено неверное отображение веса корзины.

2.0.23-pl

  • Исправлено отображение пустой ошибки, если метод CDEK стоит первым.

2.0.22-pl

  • Добавлено заполнение региона и индекса при выборе ПВЗ для корректного рассчёта.

2.0.21-pl

  • Добавлена проверка на пустую корзину.

2.0.20-pl

  • Код города теперь всегда будет запрашиваться через боевой URL API.

2.0.19-pl

  • Исправлен рассчёт веса отправления.

2.0.18-pl

  • Исправлено определение кода города в случае, если в ответе несколько городов.

2.0.17-pl

  • Запрос GET отправляется строкой вместо массива (исправление empty location_to).

2.0.16-pl

  • Добавлен ID пункта выдачи.

2.0.15-pl

  • Вес товаров округляется для соответствия требованиям API (вес должен быть целым числом).

2.0.14-pl

  • Изменён приоритет выбора места назначения. Теперь сначала проверяется индекс.

2.0.13-pl

  • Добавлена обработка ошибок

2.0.12-pl

  • Исправление рассчёта минимальной стоимости тарифа

2.0.11-pl

  • Исправление учёта тарифа для методов с ПВЗ

2.0.10-pl

  • При обновлении с версии 1.х.х правильно копируем индекс отправителя

2.0.9-pl

  • По умолчанию добавлено обязательное поле point при выборе доставки до ПВЗ

2.0.8-pl

  • Выбор конкретного тарифа на вкладке "Параметры" у каждого метода доставки

2.0.7-pl

  • Исправление рассчёта с учётом добавочной стоимости доставки

2.0.6-pl

  • Автоматическое добавление блока [div id="ms_cdek2_map"]

2.0.5-pl

  • Добавлена проверка на существование [div id="ms_cdek2_map"]

2.0.4-pl

  • Возвращена модель для расширения адреса полем с пунктом выдачи

2.0.3-pl

  • Добавлена настройка для окрругления стоимости доставки

2.0.2-pl

  • Скролл к стоимости доставки после выбора пункта выдачи

2.0.1-pl

  • Фикс рассчёта с добавочной стоимостью

2.0.0-pl

  • Компонент переписан с нуля

1.2.4-beta

  • Добавлена возможность учета габаритов корзины [setting_cdek_allow_size]
  • Добавлена возможность учета веса в граммах [setting_cdek_weight]
  • Исправлена ошибка со статусом СДЭК
  • Теперь если индекс не заполнен при выборе города сдэк пытается подставить индекс самостоятельно
  • Повышена стабильность Front-end части
  • Совместимость с msRussianPost3

1.2.3-beta

  • Добавлена настройка которая позволяет отключить учитывание стоимости доставки в конечной цене корзины [php]
  • Статус доставки больше не пишется при цене корзины 0 [php]

1.2.2-beta

  • Добавлена обработка клика по балуну карты [js]
  • Исправлено получение id доставки в хандлере доставки [php]

1.2.1-beta

  • Исправлена ошибка с выбором города возникающая в браузере Safari (PC) [js]
  • Исправлен вывод пунктов самовывоза если выбранном городе только один пункт [php]

1.2.0-beta

  • Добавлен сниппет вывода пунктов доставки
  • Улучшен установщик, если вы еще не настраивали компонент "под себя" рекомендую удалить старую версию и установить новую с нуля (это вовсе не обязательно, но универсальность будет лучше)
  • Улучшен js - код
  • Компонент добавляет новое поле в msOrderAdress
  • Более подробный анонс изменений смотрите на modx.pro

1.1.1-beta

  • Исправлен перерасчет при выборе города мышкой
  • Добавлена настройка которая позволяет отключить спам в лог пользовательских ошибок (cdek_debug)
  • Добавлена поддержка html тегов оформления ошибки

1.1.0-beta

  • Значительно изменен front-end код дополнения
  • Больше не сбрасывает метод доставки при изменении полей
  • Уведомляет пользователя при обновлении цены доставки
  • Производит расчет даже если страница была обновлена
  • Улучшена совместимость с другими методами доставки
  • Компонент теперь даже не инициализируется если метод доставки выбран НЕ сдэк
  • Расчет не запускается если не заполнено ни одно из полей (индекс или город)
  • Подготовка к следующему глобальному обновлению

1.0.3-beta

  • Интегрирована защита от пиратских версий
  • Изменения front-end части кода

1.0.2-beta

  • Исправление расчета дополнительной цены

1.0.1-beta

  • Небольшие исправления

1.0.0-beta

  • Первый релиз

Последние обсуждения в сообществе MODX.pro