Плагин интеграции 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
- Автоподсказки города при вводе
- Автоподсказки адреса для курьерской доставки
- Настройка API-ключа Dadata в отдельном меню
- Кнопка «Отправить заказ в Яндекс Доставку» в карточке заказа WooCommerce
- Авто-отправка при переходе в выбранный статус
billing_info: передача способа оплаты (предоплата / наложенный платёж)billing_details: цены в копейках, НДС для каждого товараrecipient_info: полное ФИО клиента (имя + фамилия) — корректно отображается на актах и этикетках ЯД- Сумма наложенного платежа = точная сумма заказа на сайте (товары + доставка)
- Определение наложенного платежа: суффикс
_afterв методе доставки ИЛИ способ оплаты WCcod - Повторная отправка при ошибке (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+)
- Скопируйте папку
yandex-dostavkaвwp-content/plugins/ - Активируйте плагин в админке WordPress
- Перейдите в WooCommerce → ЯД — Настройки API — введите ключ Dadata и Яндекс Карт
- Перейдите в WooCommerce → Доставка → Зоны → добавьте метод «Яндекс Доставка — ПВЗ»
- Введите OAuth-токен из личного кабинета Яндекс Доставки
- Выберите пункт приёма заказов (начните вводить город)
- Настройте наценки и автоматическую отправку
- Включите 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 |
{
"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содержит полное ФИО (ЯД использует только это поле на актах/этикетках).
- Отмена заявки через 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-примера анонимизирована
- Полное ФИО на актах ЯД:
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: привязка товаров к грузоместам
- Колонка «ЯД Статус» в списке заказов WooCommerce
- Массовая синхронизация статусов кнопкой из списка заказов
- Тултипы ко всем кнопкам мета-бокса
billing_info— обязательное поле API ЯД (обновление API 2025+)billing_detailsв каждом товаре:unit_price,assessed_unit_price(копейки),nds- Трекинг из ЯД: полная история доставки, кнопка «Обновить статус»
- Чекбокс «Режим отладки» в настройках метода доставки
- МойСклад: режим черновиков — заказы с
applicable: false - Поддержка HPOS (WC 7+)
- Габариты: укладка стопкой вместо кубического корня
total_assessed_price: в копейках (по спецификации API)platform_station_id: передаётся для source и destination- Дубль API-вызова: кэш в рамках PHP-запроса
- Полный переход на Yandex Delivery B2B API
- Виджет выбора ПВЗ на Яндекс Картах
- Подсказки адресов через Dadata API
- Интеграция с МойСклад
- Поддержка блочного чекаута WooCommerce
- Первый релиз
GPLv2 or later