AI · 8 мин чтения

СДЭК интеграция с сайтом на WordPress: расчёт доставки и заказы

Сдэк интеграция с сайтом на WordPress обычно нужна по одной из двух причин. Либо клиент должен видеть точную стоимость и сроки доставки прямо на странице оформления заказа, либо мне как разработчику магазина нужно создавать заказы в личном кабинете СДЭК без ручного переноса адресов, веса и габаритов посылок. За практику я подключал СДЭК к WooCommerce разными способами: от готового плагина, который встаёт за час, до прямой работы с API v2 с автоматическим созданием заказа при смене статуса оплаты. У каждого варианта своя цена ошибки, и ниже разберу, какой выбрать под конкретную задачу.

Зачем считать доставку СДЭК на сайте, а не ставить фиксированную цену

Фиксированная стоимость доставки работает, пока у магазина один город отправления и однородный товар. Как только в ассортименте появляются позиции с разным весом или доставка идёт по всей России, фиксированная цена начинает либо занижать реальные расходы на дальние регионы, либо завышать доставку по соседним городам и отпугивать покупателя на этапе корзины. На практике разница между доставкой посылки 0,5 кг из Москвы в Питер и той же посылки в Владивосток может быть трёхкратной, и если показывать одну цифру всем, часть заказов уходит в минус, а часть клиентов уходит из корзины, увидев завышенную сумму.

Расчёт через СДЭК на странице заказа решает это сразу: покупатель вводит город или выбирает пункт выдачи, видит реальную стоимость и срок, и на этапе оплаты уже нет сюрпризов. На одном из проектов после замены фиксированной доставки на расчёт через СДЭК конверсия в оплаченный заказ выросла примерно на 12%, просто потому что покупатели перестали видеть завышенную сумму на дальние регионы уже на чекауте.

Три варианта подключения СДЭК к WordPress

На WooCommerce я использую три схемы, и выбор зависит от того, нужен ли просто калькулятор на витрине или полноценная работа с заказами и статусами.

  • Виджет расчёта СДЭК: калькулятор стоимости и выбор ПВЗ на странице товара или в корзине, без создания заказов. Подходит для лендинга или витрины, где заказ оформляется через звонок или мессенджер.
  • Плагин для WooCommerce: расчёт доставки в корзине, выбор тарифа и ПВЗ на чекауте, заказ уходит в СДЭК автоматически после оформления. Хватает для стандартного интернет-магазина без нестандартной логики оплаты и склада.
  • Интеграция по API v2: расчёт, автосоздание заказа при оплате, статусы и трек-номер в личном кабинете клиента. Нужна магазину с оплатой на сайте, складским учётом или интеграцией с CRM.

Виджет расчёта доставки СДЭК на страницах сайта

Виджет от СДЭК это готовый JS-скрипт, который вставляется на страницу товара или в отдельный блок и показывает калькулятор стоимости с картой ПВЗ. Для WordPress его добавляют либо через код темы, либо через блок HTML в редакторе Gutenberg.

<div id="cdek-map"></div>
<script src="https://cdn.jsdelivr.net/npm/@cdek-it/widget@3"></script>
<script>
  new window.CDEKWidget({
    root: 'cdek-map',
    from: 'Москва',
    defaultLocation: 'Москва',
    apiKey: 'КЛЮЧ_ЯНДЕКС_КАРТ',
    servicePath: 'https://example.com/service.php'
  });
</script>

Два параметра здесь путают чаще всего. apiKey это ключ Яндекс.Карт, а не ключ СДЭК: без него карта с пунктами выдачи просто не отрисуется. servicePath это адрес файла service.php на вашем сервере, который и ходит в API СДЭК с вашими ключами. Параметр обязательный, так что одной вставкой скрипта в блок HTML виджет не поднять, серверная часть на PHP нужна в любом случае.

Ключевое ограничение виджета в том, что он только считает стоимость и показывает пункты выдачи, но не создаёт заказ в СДЭК и не связан с оплатой. Для лендинга или сайта-визитки, где заказ всё равно обрабатывается вручную, этого достаточно. Для магазина с автоматической оплатой виджет обычно ставят как первый слой, а заказ потом создают через плагин или API.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Плагин СДЭК для WooCommerce: быстрая настройка без разработчика

Для WooCommerce есть несколько плагинов интеграции с СДЭК, официальный называется CDEKDelivery, рядом с ним есть аналоги от сторонних разработчиков. Разница между ними в основном в стабильности обновлений под актуальную версию API и в том, насколько гибко настраиваются тарифы. Официальный плагин умеет и расчёт с выбором ПВЗ на карте, и автоматическую отправку заказа в СДЭК после оформления на сайте, вручную заводить отправление в кабинете не нужно.

Личный кабинет и API-ключи

Для работы плагина нужен аккаунт в личном кабинете СДЭК для интернет-магазинов, это отдельная регистрация, не курьерский заказ через обычный сайт, и пара client_id и client_secret, которую выдают в разделе интеграции. Термины account и secure password остались в инструкциях под API 1.5, в актуальной второй версии авторизация идёт по OAuth 2.0 с client_id и client_secret. У СДЭК есть тестовый sandbox контур с отдельными ключами, на нём стоит проверить весь цикл расчёта и заказа перед тем, как переключаться на боевые ключи, потому что тестовые заказы в sandbox не попадают к реальным курьерам и не портят статистику склада.

Тарифы, ПВЗ и вес товаров

Плагин запрашивает список доступных тарифов СДЭК (посылка склад-склад, курьер дверь-дверь, экспресс и так далее), и в настройках нужно вручную выбрать, какие показывать покупателю, иначе на чекауте появится десяток вариантов, из которых половина неактуальна для конкретного региона. Второй момент, который у меня чаще всего давал сбой на старте, это вес и габариты товаров: если у позиций в WooCommerce не заполнено поле веса, СДЭК либо откажет в расчёте, либо посчитает по дефолтному значению 0,5 кг, что для крупногабарита даёт заниженную и нерабочую стоимость доставки. Это первое, что проверяю при жалобе на неправильный расчёт доставки.

Интеграция СДЭК по API: расчёт, заказы и статусы вручную

Прямая работа с API v2 нужна, когда типового плагина не хватает: например, заказ в СДЭК должен создаваться автоматически только после оплаты через T‑Bank, а не при оформлении заказа, или нужно синхронизировать статусы доставки с CRM. СДЭК API v2 работает через OAuth 2.0: сначала получаете токен по client_id и client_secret, дальше обращаетесь к нужным эндпоинтам с этим токеном в заголовке запроса.

Практическая реализация обычно строится на хуке смены статуса заказа в WooCommerce, например woocommerce_order_status_completed, внутри которого собирается адрес, вес и тариф и уходит POST-запрос на /v2/orders. В рабочем коде добавляются обработка ошибок API, логирование ответа и запись номера заказа СДЭК и трек-номера в мета заказа, чтобы показывать его клиенту в личном кабинете. Отдельно советую подписаться на вебхуки СДЭК (раздел webhooks в личном кабинете): через них приходят обновления статуса посылки, и без них статус в заказе на сайте будет отставать от реального до тех пор, пока кто-то не зайдёт и не обновит вручную.

Если писать полноценный PHP-код не хочется, тот же сценарий (заказ оплачен, отправление создано в СДЭК, статус записан обратно в заказ) можно собрать в n8n на вебхуках без разработки с нуля, я так делаю для клиентов, у которых уже есть n8n под другие процессы. Но когда нужна связка с эквайрингом, складским остатком и несколькими тарифами одновременно, комплексную интеграцию СДЭК с сайтом под ключ обычно быстрее заказать, чем разбираться с документацией API в одиночку.

Уведомления о статусах доставки и хранение данных клиента

Когда заказ в СДЭК создаётся автоматически, менеджеру магазина неудобно постоянно проверять статусы в личном кабинете СДЭК или в WooCommerce отдельно. На нескольких проектах я выводил уведомления о смене статуса (заказ передан курьеру, посылка прибыла в пункт выдачи) в Telegram через бота на aiogram: вебхук СДЭК дёргает эндпоинт на сервере, тот формирует сообщение и отправляет в рабочий чат. Это быстрее, чем открывать кабинет СДЭК по каждому заказу вручную, и разница особенно заметна на объёме от 20-30 заказов в день.

Адреса и телефоны покупателей, которые уходят в СДЭК и обратно, это персональные данные. Хранить их в иностранных облачных таблицах вроде Google Sheets я не рекомендую: для такой интеграции лучше использовать сервер или CRM с размещением в России, это требование локализации персональных данных по 152-ФЗ, а не только вопрос удобства.

Частые ошибки при подключении СДЭК к сайту

Вот что чаще всего ломает интеграцию на практике.

  • Тестовые ключи API остаются на боевом сайте: расчёт вроде работает, а заказы не доходят до курьеров, потому что уходят в sandbox
  • У товаров не заполнены вес и габариты, и калькулятор либо не отвечает, либо считает по дефолтным значениям
  • Виджет или плагин не обрабатывает пустую корзину или отсутствие города, и на чекауте виснет расчёт вместо явной ошибки для покупателя
  • Нет тайм-аута и повтора запроса к API СДЭК: при кратковременной недоступности сервиса весь чекаут магазина встаёт, если запрос к СДЭК блокирующий
  • Кэширование страницы товара замораживает и стоимость доставки, посчитанную для одного города, поэтому её потом видят все посетители из других регионов

Каждая из этих проблем по отдельности лечится за 30-60 минут, но вместе они обычно всплывают только на реальных заказах, а не в тестовом режиме, поэтому перед запуском стоит прогнать несколько заказов с разными городами, весом и тарифами вручную.

Частые вопросы

Сколько стоит интеграция СДЭК с сайтом на WordPress

Простая доработка вроде донастройки готового плагина под конкретные тарифы обычно укладывается в рамки типовых работ по сайту. Комплексная интеграция с автосозданием заказов по API, привязкой к оплате и статусами доставки в личном кабинете клиента стоит от 40 000 ₽, в эту цену входит работа с API v2, обработка ошибок и вебхуки для статусов.

Можно ли подключить СДЭК бесплатно, через готовый плагин

Да, для типового магазина на WooCommerce бесплатный плагин с калькулятором и выбором ПВЗ закрывает большинство задач, а учётная запись в личном кабинете СДЭК для интернет-магазинов тоже открывается без абонентской платы. Ограничение в том, что плагин не умеет нестандартных сценариев вроде условного создания заказа только после подтверждённой оплаты.

Что делать, если виджет СДЭК считает доставку неправильно

В первую очередь проверяю вес и габариты товара в карточке WooCommerce: если поле пустое, расчёт уходит либо в ошибку, либо в дефолтные 0,5 кг. Дальше смотрю, не подключены ли тестовые sandbox ключи вместо боевых, и не кэшируется ли страница со старой стоимостью доставки для другого города.

Нужен ли отдельный договор с СДЭК для интеграции по API

Да, для работы по API нужна регистрация в личном кабинете СДЭК для интернет-магазинов и подписанный договор на доставку, это отдельная процедура от обычного оформления посылки через сайт cdek.ru. Тестовый контур для отладки интеграции при этом доступен и до подписания боевого договора.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно