Skip to content

Repository files navigation

Яндекс Доставка для WooCommerce

Плагин интеграции WooCommerce с Яндекс Доставкой через официальный B2B Platform API.

Возможности

Способы доставки

  • ПВЗ (самовывоз) — клиент выбирает пункт выдачи на карте Яндекс
  • ПВЗ с наложенным платежом — оплата при получении в пункте выдачи
  • Курьер до двери — доставка по адресу клиента
  • Курьер с наложенным платежом — оплата курьеру при получении

Расчёт стоимости

  • Динамический расчёт через API Яндекс Доставки (/api/b2b/platform/pricing-calculator)
  • Передача platform_station_id для source (склад) и destination (ПВЗ) — корректный расчёт по тарифу договора
  • Фиксированная наценка в рублях / процентная наценка поверх цены API
  • Фоллбек на фиксированную стоимость при ошибке API
  • Отображение срока доставки в днях
  • Кэширование результата в рамках PHP-запроса (yd_self + yd_self_after не дублируют API-вызов)

Вес, габариты и мультиместные отправления

  • Автоматический расчёт из свойств товаров WooCommerce
  • Конвертация единиц измерения (кг/г, см/м/мм)
  • Укладка стопкой: max(длина) × max(ширина) × сумма(высот) — реалистичный расчёт для книг и коробок
  • Дробление по весу: если заказ превышает max_weight, автоматически разбивается на несколько грузомест
  • Каждое грузоместо имеет свой barcode, товары привязаны через place_barcode
  • Корректное округление: (int) round() вместо (int) усечения (20.7 → 21, а не 20)
  • total_assessed_price отправляется в копейках (по спецификации API)
  • minWeight применяется к отправлению, а не к каждому товару отдельно
  • Габариты по умолчанию: к каждому товару или ко всему отправлению

Выбор ПВЗ на чекауте

  • Собственный виджет на Яндекс Картах с кластеризацией точек
  • Список ПВЗ с адресами и графиком работы
  • Поиск по адресу внутри модалки
  • Цена не показывается пока ПВЗ не выбран — заглушка «выберите пункт выдачи»
  • Сброс ПВЗ при смене города — cookies и UI автоматически очищаются
  • Валидация: обязательный выбор ПВЗ для самовывоза
  • Автозаполнение billing-полей для ПВЗ (адрес, индекс)
  • Сохранение выбора в cookies для устойчивости при обновлении чекаута
  • Поддержка классического и блочного чекаута WooCommerce

Подсказки адресов (Dadata)

  • Автоподсказки города при вводе
  • Автоподсказки адреса для курьерской доставки
  • Настройка API-ключа Dadata в отдельном меню

Создание заказов в Яндекс Доставке

  • Кнопка «Отправить заказ в Яндекс Доставку» в карточке заказа WooCommerce
  • Авто-отправка при переходе в выбранный статус
  • billing_info: передача способа оплаты (предоплата / наложенный платёж)
  • billing_details: цены в копейках, НДС для каждого товара
  • recipient_info: полное ФИО клиента (имя + фамилия) — корректно отображается на актах и этикетках ЯД
  • Сумма наложенного платежа = точная сумма заказа на сайте (товары + доставка)
  • Определение наложенного платежа: суффикс _after в методе доставки ИЛИ способ оплаты WC cod
  • Повторная отправка при ошибке (retry с уникальным operator_request_id)
  • Кнопка «Пересоздать заявку» — сброс данных ЯД + создание новой заявки
  • Настраиваемый префикс номера заказа

Трекинг и уведомления клиентов

  • Email: трек-номер и ссылка отслеживания автоматически добавляются в письма WooCommerce
  • SMS: Яндекс Доставка отправляет SMS клиенту с трек-ссылкой (включается в ЛК ЯД → Настройки → Уведомления)
  • Ссылка отслеживания (sharing_url) — персональная страница Яндекса для клиента
  • Трек оператора (courier_order_id) — номер для отслеживания у перевозчика

Синхронизация статусов

  • Крон-задача каждые 2 часа — опрос API Яндекс Доставки
  • Полная история трекинга сохраняется в мету заказа (без лишних API-запросов)
  • Кнопка «Обновить статус» для ручной синхронизации
  • Автоматическое обновление статуса WooCommerce-заказа
  • Авто-завершение заказа при вручении клиенту
  • Время последней синхронизации отображается в мета-боксе
  • Колонка «ЯД Статус» в списке заказов WooCommerce

Печать

  • Генерация и скачивание ярлыков (PDF) — кнопка «Скачать этикетку» в мета-боксе
  • Генерация и скачивание актов приёма-передачи

Интеграция с МойСклад

  • Автоматическая выгрузка заказов в МойСклад при смене статуса (как черновик)
  • Ручная выгрузка кнопкой из карточки заказа
  • Создание контрагентов и заказов покупателей
  • Заказы создаются с applicable: false — не проводятся автоматически
  • Настройка организации и товара по умолчанию

Администрирование

  • Метабокс в карточке заказа: трекинг, способ оплаты, ярлыки, акты, история, ошибки
  • Способ оплаты в мета-боксе: предоплата / наложенный платёж с точной суммой
  • Настройка пункта приёма с автокомплитом из API (12000+ точек)
  • Проверка валидности API-токена
  • Режим отладки: чекбокс в настройках метода → логи API-запросов в мета-боксе заказа
  • Тестовый режим (скрывает методы доставки, не затрагивает боевые заказы)
  • Совместимость с HPOS (High-Performance Order Storage, WC 7+)

Установка

  1. Скопируйте папку yandex-dostavka в wp-content/plugins/
  2. Активируйте плагин в админке WordPress
  3. Перейдите в WooCommerce → ЯД — Настройки API — введите ключ Dadata и Яндекс Карт
  4. Перейдите в WooCommerce → Доставка → Зоны → добавьте метод «Яндекс Доставка — ПВЗ»
  5. Введите OAuth-токен из личного кабинета Яндекс Доставки
  6. Выберите пункт приёма заказов (начните вводить город)
  7. Настройте наценки и автоматическую отправку
  8. Включите SMS-уведомления в ЛК ЯД: Настройки → Уведомления → SMS получателю

Требования

  • WordPress 5.8+
  • WooCommerce 5.0+
  • PHP 7.4+
  • OAuth-токен Яндекс Доставки (B2B API)

Настройки метода доставки

Параметр Описание По умолчанию
key OAuth-токен Яндекс Доставки
reception_point Пункт приёма (склад отправки)
addcost Фиксированная наценка (₽) 0
markup_percent Процентная наценка (%) 0
fixed_cost Фоллбек-цена при ошибке API (₽) 350
default_weight Вес по умолчанию (г) 500
default_height/width/depth Габариты по умолчанию (см) 10
apply_default_dimensions 0=не применять, 1=к товарам без габаритов, 2=ко всему отправлению 0
min_weight / max_weight Фильтр по весу (г). max_weight = лимит на одно грузоместо 0 / 30000
order_prefix Префикс номера заказа в API
order_status_send Статус WC для автоотправки в ЯД
show_reset_button Показывать кнопку «Пересоздать заявку» 0
debug_mode Режим отладки (логирование API) 0

Формат API-запроса создания заказа

{
  "info": {
    "operator_request_id": "wp_97859070266405",
    "comment": "WooCommerce заказ #97859070266405 | Наложенный платёж..."
  },
  "source": {
    "platform_station": { "platform_id": "0199f267..." }
  },
  "destination": {
    "type": "platform_station",
    "platform_station": { "platform_id": "28f7c59b..." }
  },
  "recipient_info": {
    "first_name": "Иван Петров",
    "last_name": "Петров",
    "patronymic": "",
    "phone": "+79001234567",
    "email": "customer@example.com"
  },
  "items": [{
    "article": "9785001809883",
    "name": "Название книги",
    "price": 710,
    "count": 1,
    "weight": 0,
    "place_barcode": "WC97859070266405",
    "billing_details": {
      "unit_price": 71000,
      "assessed_unit_price": 71000,
      "nds": -1
    }
  }],
  "places": [{
    "barcode": "WC97859070266405",
    "physical_dims": { "weight_gross": 418, "dx": 22, "dy": 15, "dz": 20 }
  }],
  "last_mile_policy": "self_pickup",
  "billing_info": {
    "payment_method": "card_on_receipt",
    "delivery_cost": 23000,
    "full_items_price": 71000
  }
}

delivery_cost и unit_price — в копейках. first_name содержит полное ФИО (ЯД использует только это поле на актах/этикетках).

Changelog

v2.17.0

Добавлено

  • Отмена заявки через API: кнопка «Отменить заявку в ЯД» в карточке заказа — отмена через /api/b2b/platform/request/cancel без захода в ЛК
  • Автоотмена при пересоздании: «Пересоздать заявку» теперь автоматически отменяет старую заявку в ЯД перед созданием новой
  • Актуальная дата доставки: синхронизация actual_info (ожидаемая дата + интервал) для не-терминальных заказов
  • API: cancel_request() — отмена заявки
  • API: confirm_offer() — бронирование оффера
  • API: get_offers_info() — расписание вывозов
  • API: get_actual_info() — актуальная дата доставки
  • API: get_requests_info() — пакетный запрос информации о заявках
  • API: edit_request() — редактирование заказа (получатель, интервал, грузоместа)
  • API: get_edit_status() — статус запроса на редактирование
  • API: get_datetime_options() — доступные интервалы доставки
  • API: detect_location() — определение geo_id по адресу

Улучшено

  • Мета-бокс: отображение ожидаемой даты доставки с интервалом (📦)
  • Кнопка «Отменить» видна только для не-терминальных статусов
  • Документация API-примера анонимизирована

v2.11.3

Добавлено

  • Полное ФИО на актах ЯД: first_name = «Имя Фамилия» — ЯД показывает только first_name на документах, теперь фамилия видна
  • Кнопка «Пересоздать заявку»: сброс данных ЯД + создание новой заявки (отдельно от кнопки сброса)
  • Кнопка «Скачать этикетку»: генерация ярлыков по требованию (не сразу после создания)
  • Мультиместные отправления: дробление по max_weight, place_barcode / barcode для каждого грузоместа
  • Единая функция yd_order_is_pay_on_receipt_for_yd_api(): определение наложенного платежа одинаково в мета-боксе и API

Исправлено

  • Наложенный платёж: при способе оплаты WC cod + метод доставки без _after — теперь корректно отправляется card_on_receipt (раньше уходило already_paid)
  • NONCE FAILED спам: при чекауте хук больше не логирует ложные ошибки nonce
  • generate-labels 409: убран немедленный вызов после создания (ЯД ещё не готов), заменён на кнопку по требованию
  • Шум в логах: HOOK fired с POST-ключами логируется только в режиме отладки
  • source / destination: миграция на формат platform_station: { platform_id: "..." } (API 2025+)
  • billing_info: Field is missing: добавлено обязательное поле
  • place_barcode: Field is missing: привязка товаров к грузоместам

v2.10.0

Добавлено

  • Колонка «ЯД Статус» в списке заказов WooCommerce
  • Массовая синхронизация статусов кнопкой из списка заказов
  • Тултипы ко всем кнопкам мета-бокса

v2.6.1

Добавлено

  • billing_info — обязательное поле API ЯД (обновление API 2025+)
  • billing_details в каждом товаре: unit_price, assessed_unit_price (копейки), nds
  • Трекинг из ЯД: полная история доставки, кнопка «Обновить статус»
  • Чекбокс «Режим отладки» в настройках метода доставки
  • МойСклад: режим черновиков — заказы с applicable: false
  • Поддержка HPOS (WC 7+)

v2.1.0

Исправлено

  • Габариты: укладка стопкой вместо кубического корня
  • total_assessed_price: в копейках (по спецификации API)
  • platform_station_id: передаётся для source и destination
  • Дубль API-вызова: кэш в рамках PHP-запроса

v2.0.0

  • Полный переход на Yandex Delivery B2B API
  • Виджет выбора ПВЗ на Яндекс Картах
  • Подсказки адресов через Dadata API
  • Интеграция с МойСклад
  • Поддержка блочного чекаута WooCommerce

v1.0

  • Первый релиз

Лицензия

GPLv2 or later

About

WooCommerce + Yandex Delivery: pricing, PVZ map, order export, label printing, status sync, MoySklad

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages