Доставка СДЭК
Стоимость и срок доставки СДЭК на шаге оформления заказа — по калькулятору СДЭК для города покупателя, веса и габаритов корзины.
Назначение и совместимость
Расширение показывает покупателю на шаге «Способ доставки» реальную стоимость и срок доставки СДЭК: стоимость считает сам СДЭК по своему API (калькулятор v2) для города из адреса доставки, веса и габаритов товаров в корзине. Магазин выбирает, какие тарифы предлагать: «до двери» (курьер СДЭК привозит покупателю) и «до пункта выдачи» (покупатель забирает в пункте СДЭК или постамате).
Первая версия — калькулятор. Выбор конкретного пункта выдачи на карте и передача заказов в СДЭК (трек-номер, накладная) в неё не входят: менеджер оформляет отправление в кабинете СДЭК как обычно, а вариант «до пункта выдачи» в заказе означает, что пункт уточняется с покупателем.
Проверено на OpenCart 4.1.0.4 и PHP 8.2 (нужно расширение PHP cURL). Другие версии OpenCart 4 не проверялись. Ядро не меняется: это обычное расширение типа «Доставка».
Установка
- Расширения → Установщик → «Загрузить», файл
cdek_oc4.ocmod.zip(имя не менять: OpenCart 4 берёт из него код расширения). - В строке «Доставка СДЭК» — зелёная кнопка «Установить».
- Расширения → Расширения, тип «Доставка» → «Установить» у «Доставка СДЭК», затем «Редактировать».
Права получает группа пользователя, который нажал «Установить». Другим группам — Система → Пользователи → Группы пользователей, маршрут extension/cdek_oc4/shipping/cdek.
Ключи СДЭК и первая настройка
- Ключи. Идентификатор клиента (client_id) и секретный ключ (client_secret) выдаёт СДЭК: личный кабинет для бизнеса → Интеграция → API (нужен договор с СДЭК). Для знакомства с модулем подходит учебный контур СДЭК с тестовыми ключами из документации СДЭК (на момент выпуска: client_id
wqGwiQx0gg8mLtiEKsUinjVSICCjtTEP, client_secretRmAmgvSgSl1yirlz9QupbzOJVqhCxcP5; актуальные значения — в документации СДЭК, раздел о тестовой среде). Тестовые ключи работают только при включённом «Тестовом контуре»; стоимость на нём учебная. - Тестовый контур. Включён — запросы идут на
api.edu.cdek.ru; выключите его, когда введёте ключи своего договора (api.cdek.ru). - Город отправителя — как он называется в СДЭК («Москва», «Санкт-Петербург», «Нижний Новгород»). Код города модуль найдёт сам. Если название есть в нескольких регионах (например, «Москва» есть и в Псковской области), укажите «Код города отправителя» — его подставит кнопка проверки; при одинаковых названиях СДЭК первым возвращает крупнейший город.
- Проверить подключение. Кнопка берёт значения полей (сохранять не обязательно), получает токен, находит город и делает пробный расчёт посылки 1 кг 20×20×10 см до Санкт-Петербурга (из Санкт-Петербурга — до Москвы). Ниже кнопки — таблица тарифов с кодами, режимами, стоимостью и сроком: по ней видно, какие тарифы доступны вашему договору.
- Отметьте тарифы, задайте наценки, включите «Статус» и сохраните.
Настройки
Расширения → Расширения → Доставка → Доставка СДЭК → Редактировать.
| Настройка | По умолчанию | Смысл |
|---|---|---|
| Идентификатор клиента, Секретный ключ | пусто | Ключи интеграции СДЭК; обязательны при включённом статусе |
| Тестовый контур | включён | Учебная среда СДЭК (api.edu.cdek.ru) с тестовыми ключами; выключить для рабочих ключей |
| Город отправителя | Москва | Откуда отправляются заказы, по названию в СДЭК |
| Код города отправителя | пусто | Необязательно; нужен при неоднозначном названии |
| Доставка до двери, Тарифы до двери | включена, «Посылка склад-дверь» (137) | Курьер СДЭК доставляет покупателю. Отмеченные тарифы показываются отдельными вариантами; ничего не отмечено — все тарифы «до двери», которые вернёт СДЭК |
| Доставка до пункта выдачи, Тарифы до пункта выдачи | включена, «Посылка склад-склад» (136) | Покупатель забирает в пункте СДЭК или постамате |
| Другие коды тарифов | пусто | Коды тарифов через запятую, которых нет в списке (из таблицы проверки подключения) |
| Наценка, % | 0 | Прибавляется к стоимости СДЭК; можно отрицательную |
| Наценка, ₽ | 0 | Фиксированная сумма в рублях сверх стоимости и процентной наценки |
| Бесплатная доставка от суммы | 0 | Сумма товаров в основной валюте магазина, от которой доставка СДЭК бесплатна (варианты показываются с ценой 0); 0 — не применять |
| Срок кэша расчётов, часов | 24 | Одинаковый город и посылка считаются из кэша; 0 — считать каждый раз |
| Вес товара без веса, г | 500 | Для товаров, у которых в карточке не заполнен вес |
| Длина, Ширина, Высота, см | 20 × 15 × 10 | Для товаров без всех трёх габаритов в карточке |
| Географическая зона | Все зоны | Предлагать СДЭК только адресам из зоны |
| Налоговый класс | нет | Налог на стоимость доставки |
| Статус, Порядок сортировки | выключен, 2 | Как у штатных способов доставки |
| Подробный журнал | выключен | Писать в журнал каждый расчёт и ненайденные города; ошибки API пишутся всегда |
Как читать названия тарифов
В названии тарифа СДЭК слева — откуда СДЭК забирает посылку, справа — как получает покупатель:
- склад-дверь, склад-склад, склад-постамат — вы сами сдаёте посылку в пункт СДЭК (обычный вариант для небольшого магазина);
- дверь-дверь, дверь-склад, дверь-постамат — курьер СДЭК забирает посылку у вас (вызов курьера оформляется в кабинете СДЭК).
Тарифы «Посылка» предназначены для интернет-магазинов (до 30 кг), «Экспресс» и «Магистральный экспресс» — для любых отправлений, «Экономичная посылка» — дешевле и дольше. Доступность тарифа зависит от договора и направления: тарифы, которых СДЭК не вернул для города покупателя, просто не показываются.
Как считается стоимость
- По адресу доставки покупателя модуль находит код города в справочнике СДЭК (название, при нескольких совпадениях — индекс). Город не найден — СДЭК среди способов не показывается.
- Вес — сумма весов товаров с доставкой, переведённая в граммы по классам веса магазина; товар без веса считается по настройке «Вес товара без веса». Габариты — одна посылка на заказ: длина и ширина — наибольшие среди товаров, высота — сумма (товары «стопкой»); товар без габаритов берёт значения по умолчанию.
- СДЭК возвращает тарифы со стоимостью в рублях и сроком в рабочих днях. К стоимости прибавляются наценки, затем сумма переводится в основную валюту магазина по курсу рубля (если основная валюта не RUB, в магазине должна быть валюта RUB с курсом — например, от модуля «Курсы ЦБ РФ»).
- Если сумма товаров не меньше «Бесплатной доставки от суммы», все варианты СДЭК показываются с ценой 0.
- Варианты сортируются: сначала «до двери», затем «до пункта выдачи», внутри — по цене. В заказе способ записывается как «СДЭК — <название тарифа>, <срок>».
Журнал и ошибки
Ошибки обращения к СДЭК (неверные ключи, сайт недоступен, ответ не разобран, город отправителя не найден, нет валюты RUB) записываются в журнал ошибок магазина (Система → Обслуживание → Журнал ошибок) строкой CDEK shipping: …; способ СДЭК в этот момент не показывается, покупатель оформляет заказ другими способами. При включённом «Подробном журнале» записываются также каждый расчёт (города, посылка, число тарифов) и города покупателей, которых нет в справочнике СДЭК.
Удаление
Расширения → Расширения → Доставка → «Удалить» у «Доставка СДЭК», затем Расширения → Установщик → удалить пакет. Настройки удаляются; заказы с выбранной доставкой СДЭК остаются как есть (название способа хранится в заказе).
Типовые вопросы
- СДЭК не появляется при оформлении. Проверьте по порядку: статус включён; ключи введены и «Проверить подключение» проходит; тестовый контур соответствует ключам; геозона включает адрес покупателя; город покупателя есть в справочнике СДЭК (кнопка проверки с этим городом в поле «Город отправителя» покажет, находится ли он); в журнале ошибок нет строк
CDEK shipping. - «authorization failed (HTTP 401): invalid_client». Ключи не подходят к выбранному контуру: тестовые ключи работают только с включённым тестовым контуром, ключи договора — с выключенным.
- Стоимость отличается от кабинета СДЭК. Проверьте наценки, вес и габариты в карточках товаров (единицы магазина переводятся в граммы и сантиметры), значения по умолчанию для товаров без веса и габаритов, а также курс RUB, если основная валюта магазина другая. На тестовом контуре стоимость учебная.
- Нужен другой тариф. Нажмите «Проверить подключение» — в таблице есть коды всех доступных тарифов; впишите код в «Другие коды тарифов» нужного способа.
- Расчёт не обновился после смены настроек СДЭК. Расчёты хранятся в кэше заданное число часов; очистите кэш (Панель управления → кнопка очистки кеша) или временно поставьте срок 0.