Что такое автоматические попытки платежей в WooCommerce и почему их отключают
WooCommerce по умолчанию может повторять попытки списания средств с клиента, если изначальный платеж не прошёл, особенно при использовании платежных шлюзов, поддерживающих подписки и отложенные платежи. Это может приводить к нежелательным автоматическим списаниям, путанице с заказами и жалобам клиентов.
В некоторых случаях требуется полностью отключить эти повторные попытки для определённых типов заказов или платежных шлюзов.
Диагностика проблемы с автоматическими попытками платежей
Чтобы понять, активны ли у вас автоматические повторные попытки платежей, нужно:
- Проверить настройки платежного шлюза в WooCommerce (например, Stripe, PayPal, Mollie).
- Посмотреть логи WooCommerce или платежного шлюза для повторных запросов на списание.
- Убедиться, что используемые плагины подписок или отложенных платежей не запускают повторные попытки.
Пример команды для вывода последних записей лога WooCommerce через WP CLI:
wp wc --user=admin log list --limit=10Как отключить автоматические повторные попытки платежей в WooCommerce
1. Отключение через настройки платежного шлюза
Первое, что нужно сделать — проверить панель настроек вашего платежного шлюза. Например, у Stripe есть опция управления повторными попытками списания.
2. Отключение через хук фильтра
Если в настройках нет нужных опций или вы хотите программно контролировать поведение, можно использовать хуки WooCommerce. Для отключения повторных попыток платежей для всех заказов добавьте следующий код в functions.php вашей темы или в отдельный плагин:
add_filter('woocommerce_payment_retry_enabled', '__return_false');Этот фильтр отключает логику повторных попыток в WooCommerce для платежей.
3. Отключение для конкретных платежных шлюзов
Иногда нужно отключить автоматические попытки только для определённого метода оплаты. Для этого используйте условие:
add_filter('woocommerce_payment_retry_enabled', 'disable_retry_for_specific_gateway', 10, 2); function disable_retry_for_specific_gateway($retry_enabled, $order) { $gateway_id = $order->get_payment_method(); if ($gateway_id === 'stripe') { return false; } return $retry_enabled;}Проверка результата после отключения повторных попыток
- Сделайте тестовый заказ с ошибочным платежом, используя тестовые карты платежного шлюза.
- Проверьте, что WooCommerce не делает повторных запросов списания.
- Проверьте логи WooCommerce и платежного шлюза — повторных попыток быть не должно.
- Убедитесь, что заказ остаётся в статусе «ожидает оплаты» или «неудачный», без повторных изменений.
Частые ошибки при попытке отключить повторные платежи
- Настройки шлюза игнорируются: Некоторые плагины платежей имеют собственные механизмы повторных попыток, не связанные с WooCommerce. Их нужно отключать отдельно в настройках плагина.
- Кэширование мешает применению фильтров: Если на сайте активировано кэширование (например, объектный кеш), изменения функций могут не применяться сразу. Очистите кэш.
- Код добавлен в неподходящее место: Хуки должны быть добавлены в functions.php или в плагин, который загружается всегда. В админке тема может работать иначе.
Практические советы по безопасности и производительности
- Безопасность: Не храните тестовые карты или данные платежей в коде или логах.
- Производительность: Используйте минимальные изменения, чтобы не влиять на другие процессы оплаты.
- Логирование: Временно включите подробное логирование платежей для отладки, потом отключите.
Сравнение способов отключения повторных попыток платежей
| Метод | Способ реализации | Плюсы | Минусы |
|---|---|---|---|
| Настройки шлюза | Админка WooCommerce » Платежи | Простота, не требует кода | Не всегда есть опция |
| Фильтр woocommerce_payment_retry_enabled | PHP-код в functions.php | Гибкость, можно отключать для конкретных шлюзов | Требует навыков разработки |
| Отключение в плагинах подписок | Настройки или код плагина подписок | Контроль подписок | Зависит от плагина |