Что такое Webhook и зачем он нужен для WooCommerce
Webhook — это механизм, позволяющий получать уведомления о событиях от внешних систем в реальном времени. В контексте WooCommerce Webhook часто используется для автоматического обновления информации о товарах, например, цены и наличия, на основе данных из ERP, CRM или складского ПО.
Основное преимущество — автоматизация синхронизации данных без необходимости ручного вмешательства или периодического запуска импорта.
Диагностика проблемы: почему автоматическое обновление цен и остатков критично
Ручное обновление цен и остатков в WooCommerce на крупных магазинах — источник ошибок и временных затрат. Проблемы, которые решает Webhook:
- Расхождение информации о наличии товара на сайте и в реальном складе.
- Неактуальные цены из-за задержек обновления.
- Ошибки при массовом ручном редактировании.
Если вы замечаете, что данные на сайте устарели или нужно срочно реагировать на изменения цен, настройка Webhook — эффективное решение.
Настройка Webhook в WooCommerce для получения обновлений
WooCommerce умеет создавать исходящие Webhook-и, но для приема и обработки входящих уведомлений потребуется написать собственный обработчик. Варианты:
- Создать REST API endpoint в WordPress.
- Написать обработчик на отдельном сервере и взаимодействовать с WooCommerce через REST API.
Для задачи автоматического обновления цен и остатков удобно реализовать endpoint внутри WordPress, чтобы сразу менять данные через стандартные функции WooCommerce.
Пример регистрации REST API маршрута для приема Webhook
add_action('rest_api_init', function () {
register_rest_route('custom/v1', '/update-product', array(
'methods' => 'POST',
'callback' => 'handle_product_update_webhook',
'permission_callback' => '__return_true',
));
});
function handle_product_update_webhook(WP_REST_Request $request) {
$data = $request->get_json_params();
if (empty($data['sku']) || (!isset($data['price']) && !isset($data['stock']))) {
return new WP_REST_Response(['error' => 'Invalid data'], 400);
}
$product_id = wc_get_product_id_by_sku($data['sku']);
if (!$product_id) {
return new WP_REST_Response(['error' => 'Product not found'], 404);
}
$product = wc_get_product($product_id);
if (isset($data['price'])) {
$product->set_regular_price($data['price']);
}
if (isset($data['stock'])) {
$product->set_stock_quantity((int)$data['stock']);
$product->set_manage_stock(true);
$product->set_stock_status($data['stock'] > 0 ? 'instock' : 'outofstock');
}
$product->save();
return new WP_REST_Response(['success' => true], 200);
}Пошаговое руководство по внедрению автоматического обновления
- Добавьте в functions.php темы или в кастомный плагин код для создания REST API маршрута (как в примере выше).
- Убедитесь, что у товаров корректно заполнено поле SKU — по нему будет осуществляться поиск.
- Настройте в вашей внешней системе отправку POST-запросов с JSON телом типа:
{ "sku": "12345", "price": "1999", "stock": 10 } - Проверьте, что WordPress принимает запросы по адресу
https://ваш-сайт.ru/wp-json/custom/v1/update-product. - При поступлении данных убедитесь, что цена и наличие меняются в админке WooCommerce.
Проверка результата после внедрения
Чтобы проверить работу Webhook:
- Отправьте тестовый POST-запрос через Postman или curl:
curl -X POST https://ваш-сайт.ru/wp-json/custom/v1/update-product \
-H "Content-Type: application/json" \
-d '{"sku":"test-sku","price":"1500","stock":5}'- Зайдите в админку WooCommerce и откройте товар с SKU
test-sku. - Проверьте, что цена и количество на складе изменились на указанные в запросе.
- Если изменений нет — проверьте логи ошибок и response сервера.
Частые ошибки и как их исправить
- Ошибка 404 при вызове API: проверьте, что REST API включен, и ссылка корректна. Возможно, нужен сброс постоянных ссылок (Перейдите в Настройки > Постоянные ссылки и нажмите «Сохранить»).
- Неверный или пустой SKU: убедитесь, что в JSON передается поле
skuи оно соответствует SKU товара в WooCommerce. - Права доступа: в примере разрешена публичная обработка (permission_callback = __return_true). В продакшене рекомендуется добавить проверку авторизации (например, по токену в заголовках).
- При обновлении не сохраняются данные: убедитесь, что вызывается
$product->save();и объект продукта корректно получен.
Практические советы по безопасности и производительности
- Безопасность: Для ограничения доступа к API добавьте проверку токена в заголовках:
function custom_permission_callback(WP_REST_Request $request) {
$token = $request->get_header('X-Auth-Token');
return $token === 'ваш_секретный_токен';
}- Добавьте эту функцию в
permission_callbackвместо__return_true. - Производительность: При большом количестве обновлений используйте очереди (например, через Action Scheduler), чтобы избежать блокировки.
- Логируйте входящие запросы и ошибки в отдельный файл для отладки.
Сравнение способов автоматического обновления цен и остатков
| Метод | Плюсы | Минусы | Код/Плагин |
|---|---|---|---|
| Webhook + REST API обработчик (код) | Мгновенное обновление, гибкость, контроль | Нужны навыки разработки, безопасность | Пример в статье |
| Плагины синхронизации (например, WooCommerce Stock Sync) | Простота установки, готовые функции | Может не покрывать все сценарии, нагрузка | Clearfy Pro помогает оптимизировать сайт после установки плагинов |
| Периодический импорт CSV/XML | Простота реализации, массовое обновление | Задержка обновления, нагрузка на сервер | Плагины типа WP All Import |