Интеграция службы доставки в WooCommerce: API, трекинг, ПВЗ

Интеграция службы доставки в WooCommerce

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Интеграция службы доставки в WooCommerce: API, трекинг, ПВЗ
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Интеграция службы доставки в WooCommerce

Каждый день интернет-магазины теряют клиентов из-за медленного расчёта доставки или отсутствия нужного перевозчика. Недавно к нам обратился магазин с каталогом в 5000 товаров. Они использовали плагин, который отправлял запрос к API перевозчика на каждое изменение корзины без кеширования. В пиковое время (акция на 20% скидки) нагрузка на сервер выросла в 10 раз, а время расчёта достигало 40 секунд. Мы внедрили кастомный метод с транзиентным кешированием и fallback-тарифами — время упало до 150 мс, а конверсия в checkout выросла на 17%. Эта ситуация знакома многим: WooCommerce из коробки даёт лишь три примитивных метода доставки — flat rate, free shipping и local pickup. Для реального бизнеса этого катастрофически мало. Нужны тарифы конкретного перевозчика, расчёт по габаритам и весу, трекинг-номер в личном кабинете и автоматическое обновление статуса.

Какие проблемы решает интеграция доставки WooCommerce?

Типичные проблемы: отсутствие расчёта в реальном времени, ручное создание отправлений, потеря заказов из-за неактуальных тарифов, нагрузка на сервер из-за некешированных запросов, невозможность выбора ПВЗ. Наша интеграция решает их все: рассчитывает стоимость динамически, создаёт отправление при переходе заказа в обработку, кеширует результаты на 30-60 минут, использует fallback-тарифы при сбоях API и встраивает виджет ПВЗ на checkout. В одном из проектов автоматизация доставки сократила ручную работу на 80% и ускорила обработку заказов в 3 раза. Средняя экономия на логистике за счёт автоматизации составляет 15-20% от оборота, а стоимость интеграции окупается в среднем за 3 месяца.

Как работает доставка в WooCommerce?

Архитектура доставки строится на трёх слоях: Shipping zones (географические зоны), Shipping methods (методы внутри зоны) и Shipping rates (тарифы). Каждый кастомный метод расширяет класс WC_Shipping_Method. Вот минимальная реализация:

class My_Courier_Shipping_Method extends WC_Shipping_Method { public function __construct( $instance_id = 0 ) { $this->id = 'my_courier'; $this->instance_id = absint( $instance_id ); $this->method_title = 'MyCourier'; $this->method_description = 'Доставка через MyCourier API'; $this->supports = [ 'shipping-zones', 'instance-settings' ]; $this->init(); } public function init(): void { $this->init_form_fields(); $this->init_settings(); $this->api_key = $this->get_option( 'api_key' ); add_action( 'woocommerce_update_options_shipping_' . $this->id, [ $this, 'process_admin_options' ] ); } public function calculate_shipping( $package = [] ): void { $rate = $this->get_rate_from_api( $package ); if ( $rate ) { $this->add_rate([ 'id' => $this->id . '_standard', 'label' => 'Стандартная доставка (' . $rate['days'] . ' дн.)', 'cost' => $rate['price'], 'meta_data' => [ 'courier_id' => $rate['service_id'] ], ]); } } } 

Регистрируется метод через фильтр:

add_filter( 'woocommerce_shipping_methods', function( $methods ) { $methods['my_courier'] = My_Courier_Shipping_Method::class; return $methods; }); 

Почему кастомный метод доставки лучше готовых плагинов?

Готовые плагины (например, для СДЭК или Новой Почты) часто ограничены в настройках и зависят от обновлений. Кастомный метод даёт полный контроль над логикой, кешированием и обработкой ошибок. Например, вы можете добавить нестандартный тариф по типу товара или реализовать свой алгоритм расчёта объёмного веса.

Параметр Плагин (СДЭК, Новая Почта) Кастомный метод
Время внедрения 1–2 дня 3–5 дней
Гибкость настройки Ограничена настройками плагина Полный контроль
Поддержка нестандартных тарифов Нет Да
Зависимость от обновлений плагина Высокая Низкая
Сценарий Плагин Кастомный
Добавление нового перевозчика Только если есть в плагине По документации API
Кастомизация checkout Через хуки плагина Любые изменения
Кеширование Зависит от плагина Полный контроль

Как рассчитать тарифы через API перевозчика?

Большинство служб доставки имеют REST API для расчёта стоимости. Пример запроса к условному API (с кешированием):

private function get_rate_from_api( array $package ): ?array { $cache_key = 'courier_rate_' . md5( serialize( $package ) ); $cached = get_transient( $cache_key ); if ( $cached !== false ) { return $cached; } $weight = 0; foreach ( $package['contents'] as $item ) { $product = $item['data']; $weight += (float) $product->get_weight() * $item['quantity']; } $response = wp_remote_post( 'https://api.mycourier.ru/v2/calculate', [ 'timeout' => 10, 'headers' => [ 'Authorization' => 'Bearer ' . $this->api_key, 'Content-Type' => 'application/json', ], 'body' => wp_json_encode([ 'from_city' => get_option( 'woocommerce_store_city' ), 'to_city' => $package['destination']['city'], 'to_postcode' => $package['destination']['postcode'], 'weight' => max( 0.1, $weight ), 'declared_value' => WC()->cart->get_cart_contents_total(), ]), ]); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) { return null; } $rate_data = json_decode( wp_remote_retrieve_body( $response ), true ); set_transient( $cache_key, $rate_data, 30 * MINUTE_IN_SECONDS ); return $rate_data; } 

Кеширование транзиентами — простой способ снизить нагрузку. В нашем проекте кеширование сократило количество запросов к API с 5000 в час до 50, что сэкономило ресурсы сервера и ускорило checkout.

Передача заказа в службу доставки

После подтверждения заказа создаём отправление. Хук woocommerce_order_status_processing запускается при переходе заказа в статус «В обработке»:

add_action( 'woocommerce_order_status_processing', function( int $order_id ) { $order = wc_get_order( $order_id ); foreach ( $order->get_shipping_methods() as $shipping_item ) { if ( strpos( $shipping_item->get_method_id(), 'my_courier' ) === false ) { continue; } $result = courier_create_shipment( $order ); if ( $result['tracking_number'] ) { $order->update_meta_data( '_courier_tracking_number', $result['tracking_number'] ); $order->update_meta_data( '_courier_shipment_id', $result['shipment_id'] ); $order->save(); $order->add_order_note( 'Отправление создано. Трекинг: ' . $result['tracking_number'], true ); } } }); 

Как автоматически обновлять статус доставки?

Webhook от перевозчика или периодический cron-опрос обновляет статус заказа:

add_action( 'courier_sync_tracking', function() { $orders = wc_get_orders([ 'meta_key' => '_courier_tracking_number', 'meta_compare' => 'EXISTS', 'status' => [ 'wc-processing', 'wc-shipped' ], 'limit' => 50, ]); foreach ( $orders as $order ) { $tracking = $order->get_meta( '_courier_tracking_number' ); $status = courier_api_get_status( $tracking ); if ( $status === 'delivered' && $order->get_status() !== 'completed' ) { $order->update_status( 'completed', 'Доставлено по данным перевозчика.' ); } } }); if ( ! wp_next_scheduled( 'courier_sync_tracking' ) ) { wp_schedule_event( time(), 'twohourly', 'courier_sync_tracking' ); } 

Что входит в нашу работу

  • Аудит текущей логистики — какой плагин используется, какие перевозчики нужны, есть ли API-ключи.
  • Разработка кастомного метода доставки — класс WC_Shipping_Method, интеграция с API перевозчика, кеширование, fallback.
  • Настройка трекинга — отображение номера в письмах и личном кабинете, автоматическое обновление статуса.
  • Виджет ПВЗ (опционально) — выбор пункта выдачи на checkout, сохранение в метаполя.
  • Документация — описание архитектуры, инструкция по добавлению нового перевозчика.
  • Поддержка — гарантия работоспособности в течение 30 дней после сдачи.

Сроки реализации

Интеграция с одним перевозчиком через готовый плагин (СДЭК, DHL, Nova Poshta): 1–2 дня. Кастомный метод с полным циклом — расчёт, создание отправления, трекинг, webhook: 3–5 дней. Добавление виджета ПВЗ + кастомизация писем: плюс 1–2 дня. Интеграция нескольких перевозчиков с единым интерфейсом управления: 1–2 недели.

Типичные ошибки при интеграции доставки

  • Отсутствие кеширования запросов к API — перегрузка сервера.
  • Неверный расчёт объёмного веса для товаров с большими габаритами.
  • Игнорирование fallback-тарифов при недоступности API.
  • Отсутствие трекинг-номера для покупателя — рост запросов в поддержку.

За время нашей практики мы выполнили более 40 интеграций доставки для интернет-магазинов на WooCommerce. Это позволило нашим клиентам снизить отказы от оформления заказов в среднем на 30%. Получите консультацию по интеграции доставки для вашего магазина — напишите нам, и мы пришлём предложение в течение рабочего дня. Свяжитесь с нами для обсуждения вашего проекта.