Доставка СДЭК

Стоимость и срок доставки СДЭК на шаге оформления заказа — по калькулятору СДЭК для города покупателя, веса и габаритов корзины.

Назначение и совместимость

Расширение показывает покупателю на шаге «Способ доставки» реальную стоимость и срок доставки СДЭК: стоимость считает сам СДЭК по своему API (калькулятор v2) для города из адреса доставки, веса и габаритов товаров в корзине. Магазин выбирает, какие тарифы предлагать: «до двери» (курьер СДЭК привозит покупателю) и «до пункта выдачи» (покупатель забирает в пункте СДЭК или постамате).

Стоимость и срок от СДЭККаждый выбранный тариф — отдельный вариант доставки с названием, сроком в рабочих днях и ценой.
Наценки и бесплатная доставкаПроцент и фиксированная сумма сверх стоимости СДЭК; бесплатная доставка от суммы заказа.
Тестовый контурПроверка без договора на учебной среде СДЭК; кнопка «Проверить подключение» показывает доступные тарифы.
Кэш расчётовОдинаковые запросы не уходят в СДЭК повторно; срок хранения — настройка.

Первая версия — калькулятор. Выбор конкретного пункта выдачи на карте и передача заказов в СДЭК (трек-номер, накладная) в неё не входят: менеджер оформляет отправление в кабинете СДЭК как обычно, а вариант «до пункта выдачи» в заказе означает, что пункт уточняется с покупателем.

Проверено на OpenCart 4.1.0.4 и PHP 8.2 (нужно расширение PHP cURL). Другие версии OpenCart 4 не проверялись. Ядро не меняется: это обычное расширение типа «Доставка».

В сборке OCM Store расширение уже установлено и выключено: откройте Расширения → Расширения → Доставка → Доставка СДЭК → Редактировать, введите ключи, проверьте подключение и включите статус.

Установка

  1. Расширения → Установщик → «Загрузить», файл cdek_oc4.ocmod.zip (имя не менять: OpenCart 4 берёт из него код расширения).
  2. В строке «Доставка СДЭК» — зелёная кнопка «Установить».
  3. Расширения → Расширения, тип «Доставка» → «Установить» у «Доставка СДЭК», затем «Редактировать».

Права получает группа пользователя, который нажал «Установить». Другим группам — Система → Пользователи → Группы пользователей, маршрут extension/cdek_oc4/shipping/cdek.

Ключи СДЭК и первая настройка

  1. Ключи. Идентификатор клиента (client_id) и секретный ключ (client_secret) выдаёт СДЭК: личный кабинет для бизнеса → Интеграция → API (нужен договор с СДЭК). Для знакомства с модулем подходит учебный контур СДЭК с тестовыми ключами из документации СДЭК (на момент выпуска: client_id wqGwiQx0gg8mLtiEKsUinjVSICCjtTEP, client_secret RmAmgvSgSl1yirlz9QupbzOJVqhCxcP5; актуальные значения — в документации СДЭК, раздел о тестовой среде). Тестовые ключи работают только при включённом «Тестовом контуре»; стоимость на нём учебная.
  2. Тестовый контур. Включён — запросы идут на api.edu.cdek.ru; выключите его, когда введёте ключи своего договора (api.cdek.ru).
  3. Город отправителя — как он называется в СДЭК («Москва», «Санкт-Петербург», «Нижний Новгород»). Код города модуль найдёт сам. Если название есть в нескольких регионах (например, «Москва» есть и в Псковской области), укажите «Код города отправителя» — его подставит кнопка проверки; при одинаковых названиях СДЭК первым возвращает крупнейший город.
  4. Проверить подключение. Кнопка берёт значения полей (сохранять не обязательно), получает токен, находит город и делает пробный расчёт посылки 1 кг 20×20×10 см до Санкт-Петербурга (из Санкт-Петербурга — до Москвы). Ниже кнопки — таблица тарифов с кодами, режимами, стоимостью и сроком: по ней видно, какие тарифы доступны вашему договору.
  5. Отметьте тарифы, задайте наценки, включите «Статус» и сохраните.

Настройки

Расширения → Расширения → Доставка → Доставка СДЭК → Редактировать.

НастройкаПо умолчаниюСмысл
Идентификатор клиента, Секретный ключпустоКлючи интеграции СДЭК; обязательны при включённом статусе
Тестовый контурвключёнУчебная среда СДЭК (api.edu.cdek.ru) с тестовыми ключами; выключить для рабочих ключей
Город отправителяМоскваОткуда отправляются заказы, по названию в СДЭК
Код города отправителяпустоНеобязательно; нужен при неоднозначном названии
Доставка до двери, Тарифы до дверивключена, «Посылка склад-дверь» (137)Курьер СДЭК доставляет покупателю. Отмеченные тарифы показываются отдельными вариантами; ничего не отмечено — все тарифы «до двери», которые вернёт СДЭК
Доставка до пункта выдачи, Тарифы до пункта выдачивключена, «Посылка склад-склад» (136)Покупатель забирает в пункте СДЭК или постамате
Другие коды тарифовпустоКоды тарифов через запятую, которых нет в списке (из таблицы проверки подключения)
Наценка, %0Прибавляется к стоимости СДЭК; можно отрицательную
Наценка, ₽0Фиксированная сумма в рублях сверх стоимости и процентной наценки
Бесплатная доставка от суммы0Сумма товаров в основной валюте магазина, от которой доставка СДЭК бесплатна (варианты показываются с ценой 0); 0 — не применять
Срок кэша расчётов, часов24Одинаковый город и посылка считаются из кэша; 0 — считать каждый раз
Вес товара без веса, г500Для товаров, у которых в карточке не заполнен вес
Длина, Ширина, Высота, см20 × 15 × 10Для товаров без всех трёх габаритов в карточке
Географическая зонаВсе зоныПредлагать СДЭК только адресам из зоны
Налоговый класснетНалог на стоимость доставки
Статус, Порядок сортировкивыключен, 2Как у штатных способов доставки
Подробный журналвыключенПисать в журнал каждый расчёт и ненайденные города; ошибки API пишутся всегда

Как читать названия тарифов

В названии тарифа СДЭК слева — откуда СДЭК забирает посылку, справа — как получает покупатель:

Тарифы «Посылка» предназначены для интернет-магазинов (до 30 кг), «Экспресс» и «Магистральный экспресс» — для любых отправлений, «Экономичная посылка» — дешевле и дольше. Доступность тарифа зависит от договора и направления: тарифы, которых СДЭК не вернул для города покупателя, просто не показываются.

Как считается стоимость

  1. По адресу доставки покупателя модуль находит код города в справочнике СДЭК (название, при нескольких совпадениях — индекс). Город не найден — СДЭК среди способов не показывается.
  2. Вес — сумма весов товаров с доставкой, переведённая в граммы по классам веса магазина; товар без веса считается по настройке «Вес товара без веса». Габариты — одна посылка на заказ: длина и ширина — наибольшие среди товаров, высота — сумма (товары «стопкой»); товар без габаритов берёт значения по умолчанию.
  3. СДЭК возвращает тарифы со стоимостью в рублях и сроком в рабочих днях. К стоимости прибавляются наценки, затем сумма переводится в основную валюту магазина по курсу рубля (если основная валюта не RUB, в магазине должна быть валюта RUB с курсом — например, от модуля «Курсы ЦБ РФ»).
  4. Если сумма товаров не меньше «Бесплатной доставки от суммы», все варианты СДЭК показываются с ценой 0.
  5. Варианты сортируются: сначала «до двери», затем «до пункта выдачи», внутри — по цене. В заказе способ записывается как «СДЭК — <название тарифа>, <срок>».
Пример: отправитель Москва, покупатель в Санкт-Петербурге, товар 10 кг без габаритов (20×15×10 см), наценка 10 % и 50 ₽. СДЭК вернул «Посылка склад-дверь» 540 ₽ и «Посылка склад-склад» 345 ₽, 1–2 раб. дн. Покупатель видит «Посылка склад-дверь, 1–2 раб. дн. — 644 ₽» и «Посылка склад-склад, 1–2 раб. дн. — 429,50 ₽».

Журнал и ошибки

Ошибки обращения к СДЭК (неверные ключи, сайт недоступен, ответ не разобран, город отправителя не найден, нет валюты RUB) записываются в журнал ошибок магазина (Система → Обслуживание → Журнал ошибок) строкой CDEK shipping: …; способ СДЭК в этот момент не показывается, покупатель оформляет заказ другими способами. При включённом «Подробном журнале» записываются также каждый расчёт (города, посылка, число тарифов) и города покупателей, которых нет в справочнике СДЭК.

Удаление

Расширения → Расширения → Доставка → «Удалить» у «Доставка СДЭК», затем Расширения → Установщик → удалить пакет. Настройки удаляются; заказы с выбранной доставкой СДЭК остаются как есть (название способа хранится в заказе).

Типовые вопросы