WooCommerce: как настроить автопродление подписок через вебхуки

Диагностика проблемы с автопродлением подписок в WooCommerce

В WooCommerce с подписками (WooCommerce Subscriptions) часто возникает проблема, когда автопродление не срабатывает корректно. Причины могут быть разными: сбои в коммуникациях с платёжным шлюзом, отсутствие правильной обработки вебхуков, ошибки в расписании CRON задач или неправильная конфигурация плагина подписок.

Для диагностики начните с проверки системного журнала WooCommerce и логов платёжного шлюза. Включите отладку платежей в настройках WooCommerce Subscriptions и проверьте, поступают ли уведомления о продлении с платёжной системы на ваш сайт.

Также проверьте, работают ли задачи WP-Cron, отвечающие за запуск автопродлений:

wp cron event list | grep wc_subscriptions

Если расписания отсутствуют или не запускаются, автопродление не будет происходить.

Пошаговое решение: настройка автопродления через вебхуки

1. Проверка и настройка платёжного шлюза

Убедитесь, что выбранный платёжный шлюз поддерживает вебхуки для уведомления о повторных списаниях. Например, Stripe и PayPal предоставляют такие возможности.

В панели платёжного шлюза настройте URL вебхука, который будет принимать уведомления о событиях платежей. Обычно это адрес вашего сайта с добавлением эндпоинта, специфичного для WooCommerce или плагина подписок.

2. Включение и отладка вебхуков в WooCommerce Subscriptions

WooCommerce Subscriptions автоматически обрабатывает вебхуки, если они корректно настроены. Проверьте, что в разделе WooCommerce > Статус > Вебхуки есть активные вебхуки для вашего платёжного шлюза.

Если вебхуки отсутствуют, создайте их вручную с правильным URL, секретным ключом и настройками событий.

3. Добавление пользовательского обработчика вебхуков (при необходимости)

Если стандартной обработки недостаточно, можно добавить свой обработчик для вебхуков. Пример обработки Stripe вебхука для автопродления:

add_action('woocommerce_api_stripe_webhook', 'handle_stripe_webhook_for_subscriptions');
function handle_stripe_webhook_for_subscriptions() {
    $payload = @file_get_contents('php://input');
    $event = json_decode($payload);

    if (!$event) {
        status_header(400);
        exit();
    }

    if ($event->type === 'invoice.payment_succeeded') {
        $subscription_id = $event->data->object->subscription;
        // Получаем подписку WooCommerce по ID
        $subscription = wcs_get_subscription($subscription_id);
        if ($subscription && $subscription->has_status('active')) {
            // Обновляем статус подписки или выполняем нужные действия
            $subscription->payment_complete();
        }
    }
    status_header(200);
    exit();
}

Замените woocommerce_api_stripe_webhook на хук вашего платёжного шлюза и адаптируйте обработку под его структуру данных.

4. Проверка работы WP-Cron для запуска автопродлений

Автопродление требует корректной работы WP-Cron. Для диагностики и устранения проблем используйте плагин WP Crontrol:

  • Установите и активируйте плагин.
  • В разделе Инструменты > Cron Events найдите задачи с префиксом wc_subscriptions_.
  • Если задачи отсутствуют, попробуйте вручную запланировать их или проверить файл wp-config.php на наличие константы DISABLE_WP_CRON. Если установлена в true, WP-Cron не работает автоматически.

Для запуска Cron вручную можно использовать команду через SSH:

wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Проверка результата после внедрения

После настройки автопродления через вебхуки и проверки Cron:

  • Проверьте логи WooCommerce > Статус > Логи на предмет успешных продлений.
  • Создайте тестовую подписку и дождитесь наступления даты следующего платежа, либо измените дату в базе для ускорения теста.
  • Проверьте поступление уведомлений с платёжного шлюза и поступление денег на счёт (тестовый режим платежного шлюза).
  • В админке WooCommerce Subscriptions убедитесь, что статус подписки обновился на следующий период.

Частые ошибки и как их исправить

  • Вебхуки не доходят до сайта. Проверьте правильность URL, доступность сайта извне, отсутствие блокировки по IP или файрволлу.
  • WP-Cron отключён. Убедитесь, что в wp-config.php нет define('DISABLE_WP_CRON', true);. Если сайт на хостинге с отключённым WP-Cron, настройте системный cron для вызова wp-cron.php.
  • Ошибки в обработке вебхуков. Проверьте правильность JSON-парсинга и работу функций WooCommerce Subscriptions.
  • Подписка не обновляется после успешного платежа. Проверьте логи на наличие ошибок, обновите WooCommerce и Subscriptions до последних версий.

Практические советы по безопасности и производительности

  • Используйте секретные ключи и подписи для подтверждения подлинности вебхуков.
  • Ограничьте доступ к URL вебхуков по IP или через .htaccess, если возможно.
  • Кэшируйте только страницы, не влияющие на обработку платежей и вебхуков.
  • Регулярно обновляйте WooCommerce, Subscriptions и платёжные плагины для получения исправлений безопасности.
  • Логируйте события вебхуков с ротацией логов для диагностики без перегрузки диска.

Сравнение методов реализации автопродления подписок

МетодПлюсыМинусы
Стандартная обработка вебхуков WooCommerce SubscriptionsПростая настройка, интеграция из коробки, поддержка популярных шлюзовМеньше гибкости, зависит от правильной настройки шлюза
Пользовательский обработчик вебхуковГибкость, возможность кастомизации логикиТребует навыков разработки, больше рисков ошибок
Запуск автопродления через WP-Cron вручнуюКонтроль над расписанием, работает без вебхуковМожет пропускать события из-за cron сбоев, нагрузка на сервер
Как создать и использовать хуки в WordPress: подробное руководство
24.11.2025
Как установить и настроить OTP (одноразовый пароль) бесплатно в WordPress
26.01.2026
Как удалить записи по условиям в WordPress через плагин и код
30.01.2026
Как избежать проблем с задержкой платежей в WordPress
30.03.2026
Как создать настраиваемый платежный плагин для WordPress
26.01.2026