Настройка WooCommerce СДЭК обычно начинается одинаково: магазин уже принимает заказы, но доставка считается вручную или вообще не считается, а менеджер каждый раз списывается с курьерской службой отдельно. За разработку интернет-магазинов на WooCommerce мне регулярно приносят именно такую задачу: подключить тарифы СДЭК в корзину, вывести карту пунктов выдачи на оформление заказа и сделать так, чтобы статус доставки из личного кабинета СДЭК сам долетал до заказа в WooCommerce. Дальше разберу, как это устроено на практике: какие узлы WooCommerce за что отвечают и где обычно теряют время.
Как подключить СДЭК к WooCommerce: плагин или интеграция через API
Для WooCommerce есть готовые плагины, которые добавляют СДЭК как способ доставки прямо в стандартные зоны доставки WooCommerce (Shipping Zones) и подключаются к личному кабинету СДЭК через API-ключи: обычно это client_id и client_secret из раздела интеграций личного кабинета. После подключения плагин берёт на себя три вещи: считает стоимость доставки по тарифам СДЭК прямо в корзине, показывает виджет с картой пунктов выдачи на странице оформления заказа и позволяет из админки WooCommerce создать заказ на доставку и получить трек-номер, не заходя в личный кабинет СДЭК отдельно. Для большинства магазинов этого достаточно, и я в первую очередь смотрю именно в эту сторону: меньше кода, меньше того, что может сломаться после очередного обновления WooCommerce.
Прямая интеграция через API СДЭК версии 2 (авторизация по OAuth2, client_credentials) имеет смысл, если у магазина нестандартная логика: несколько складов с разными правилами отгрузки, автоматическая маршрутизация по регионам, синхронизация со своей учётной системой или маркетплейсом. Тогда пишется отдельный обработчик на PHP, который обращается к эндпоинтам расчёта тарифа и создания заказа напрямую, потому что готовому плагину просто некуда встроить такую логику. Перед боевым запуском у СДЭК есть тестовый контур API с отдельными учётными данными: через него стоит прогнать все сценарии расчёта и создания заказа, прежде чем переключаться на боевые ключи.
Тарифы СДЭК в WooCommerce: расчёт стоимости доставки по весу и региону
WooCommerce из коробки поддерживает зоны доставки в разделе «Настройки → Доставка»: внутри зоны можно добавить несколько способов доставки, и СДЭК становится одним из них наравне с фиксированной ставкой или самовывозом. Дальше стоимость зависит от трёх вещей: веса и габаритов товаров (это стандартные поля «Вес» и «Размеры» на вкладке «Доставка» карточки товара, а не специфика самого плагина СДЭК), выбранного типа тарифа (дверь-дверь, дверь-склад, склад-склад и их сочетаний) и региона доставки, который берётся из адреса покупателя на чекауте.
На практике всегда прошу клиента сразу внести вес и габариты хотя бы для ходовых товаров: если у позиции в каталоге эти поля пустые, плагин либо подставляет тариф по умолчанию, либо вообще не может посчитать доставку и просит ввести данные вручную, что на чекауте выглядит как ошибка. Второй момент: расчёт тарифа это внешний запрос к API СДЭК, и если дёргать его при каждом обновлении корзины без кеширования, оформление заказа заметно тормозит. Разумно кешировать результат на короткое время по связке «город плюс вес плюс сумма заказа»: большинство готовых плагинов это уже делают сами, но в самописной интеграции кеш приходится добавлять отдельно, иначе на чекауте с высокой посещаемостью упрётесь в лимиты запросов к API.
Виджет пунктов выдачи СДЭК в корзине WooCommerce
Когда покупатель выбирает доставку до пункта выдачи, вместо обычного поля адреса на чекауте появляется виджет с картой: он показывает ближайшие ПВЗ СДЭК по введённому городу вместе с адресом и режимом работы каждого пункта. Выбранный пункт сохраняется в заказ отдельным метаполем, обычно это код ПВЗ и его адрес. Дальше эти данные можно вывести в письме подтверждения заказа и в самом заказе в админке через фильтр checkout-полей WooCommerce (woocommerce_checkout_fields), который как раз предназначен для добавления собственных полей в форму оформления заказа.
Из практических нюансов: на мобильных карта занимает почти весь экран, и если тема WooCommerce плохо адаптирована под мобильные устройства, виджет иногда перекрывает кнопку «Оформить заказ» или прокручивается вместе со страницей не так, как ожидается. Чинится это в CSS темы, а не в самом плагине СДЭК, но проверять стоит обязательно: через мобильный чекаут у многих магазинов проходит больше половины заказов, и сломанный виджет на телефоне теряет заказы незаметно для владельца.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Синхронизация статусов заказа между СДЭК и WooCommerce
У WooCommerce есть стандартный набор статусов заказа: в обработке, выполнен, отменён и так далее. Для доставки этого набора обычно не хватает: непонятно, заказ уже передан курьеру или ещё лежит на складе. Через фильтр wc_order_statuses в WooCommerce можно зарегистрировать собственные статусы, например «Передан в СДЭК», «Готов к выдаче», «Выдан получателю», и переключать заказ между ними по мере движения посылки.
API СДЭК версии 2 умеет отправлять вебхуки при смене статуса заказа на доставку: это POST-запрос на адрес, который вы укажете в настройках интеграции. На стороне WooCommerce нужен обработчик, который принимает такой запрос, находит заказ по трек-номеру (его стоит сохранять в метаполе заказа сразу при создании отправления) и переключает статус через стандартный API заказов WooCommerce. Дальше уже дело техники: на смену статуса можно повесить письмо покупателю, запись в истории заказа или, как в примере ниже, исходящее уведомление во внешний сервис.
Автоматизация уведомлений о статусах СДЭК через WooCommerce Webhooks и n8n
У WooCommerce есть встроенные вебхуки: «Настройки → Дополнительно → Вебхуки». Можно подписаться на событие изменения заказа и получать POST-запрос с данными заказа на любой внешний адрес. Это готовая точка входа для автоматизации без единой строчки серверного кода на стороне сервиса, который такие уведомления принимает.
Типичный сценарий, который я собираю в n8n: вебхук WooCommerce приходит в n8n, нода-фильтр проверяет, что статус заказа сменился на один из «доставочных» (например, «Передан в СДЭК» или «Выдан получателю»), и дальше n8n отправляет сообщение в Telegram, клиенту через бота магазина или менеджеру в рабочий чат. n8n для такой задачи беру осознанно: он забирает вебхук, ветвит логику по условиям и обращается к Telegram Bot API без написания отдельного сервиса под каждую интеграцию.
Если вместо готового вебхука WooCommerce нужна своя логика прямо в PHP, точку выхода можно повесить на хук woocommerce_order_status_changed: он передаёт обработчику ID заказа, старый и новый статус и сам объект заказа, а внутри обработчика достаточно отправить POST-запрос через wp_remote_post() на адрес вебхука n8n, добавив в тело трек-номер заказа из его метаполей.
И WooCommerce-вебхуки, и облачная версия n8n работают на инфраструктуре, которую не нужно поднимать самостоятельно. Self-hosted n8n на отдельном сервере оправдан, только если сценариев много и важен полный контроль над данными. Тогда это уже отдельный сервер со своим обслуживанием, обновлениями и оплатой отдельно от хостинга самого магазина.
Сколько стоит настройка СДЭК в WooCommerce и когда звать разработчика
Часть работы владелец магазина закрывает сам: завести API-ключи СДЭК, включить нужный плагин, расставить вес и габариты у товаров. Дальше сложность растёт вместе с нестандартными требованиями: несколько складов, кастомные статусы, вебхуки, автоматизация уведомлений.
| Задача | Что входит | Ориентировочная цена |
|---|---|---|
| Магазин на WordPress с нуля, доставка СДЭК сразу в архитектуре | Каталог, корзина, оплата, доставка, админка | от 60 000 ₽ |
| Интернет-магазин под ключ с логистикой и складским учётом | WooCommerce, СДЭК, интеграция с CRM или складом, тестирование сценариев доставки | от 80 000 ₽ |
| Точечная донастройка тарифов, статусов или виджета ПВЗ на готовом сайте | Разбор текущей интеграции, правки конфигурации и кода | от 3 000 ₽/час |
Если магазин уже работает и интеграцию нужно просто держать в рабочем состоянии: обновлять плагины, следить, что API СДЭК не поменял формат ответа, чинить то, что отвалилось после обновления WooCommerce, такую задачу обычно отдают на техподдержку сайта (от 15 000 ₽ в месяц), а не решают разовыми правками каждый раз заново.
Условия и возможности СДЭК меняются, поэтому перед запуском я уточняю их у самого сервиса.
Частые вопросы
Нужен ли отдельный сервер, чтобы подключить СДЭК к WooCommerce?
Нет. И плагин СДЭК, и обработчик вебхуков на стороне WooCommerce это обычный PHP-код, который работает на том же хостинге, где уже крутится сайт на WordPress. Отдельный сервер понадобится, только если вы решите поднимать self-hosted n8n для сложной автоматизации уведомлений, и то это отдельная история со своим обслуживанием, не связанная напрямую с интеграцией доставки.
Можно ли посчитать доставку СДЭК без готового плагина, только через API?
Можно, это сценарий прямой интеграции через API СДЭК версии 2: свой обработчик получает от WooCommerce вес и адрес корзины, запрашивает тариф через API и возвращает стоимость в способ доставки. Такой подход оправдан, если у готовых плагинов не хватает гибкости под конкретную логику магазина, но поддерживать его придётся самостоятельно или силами разработчика.
Как показать статус доставки СДЭК покупателю в его заказе на сайте?
Через собственные статусы заказа WooCommerce, зарегистрированные фильтром wc_order_statuses, и синхронизацию по вебхукам от СДЭК. Когда трек-номер посылки привязан к заказу, а статус подтягивается автоматически, покупатель видит актуальное состояние доставки прямо в личном кабинете на сайте или в письме, без звонка в поддержку.
Что делать, если тариф СДЭК не считается для конкретного заказа?
Чаще всего дело в отсутствующих весе или габаритах товара: без них API СДЭК не может посчитать тариф и просто не показывает способ доставки в чекауте. Второй частый случай, редкий населённый пункт, для которого СДЭК не строит автоматический расчёт: тогда доставку такого заказа обычно обрабатывают вручную через тариф «под заказ» и связываются с покупателем отдельно.