Проблема: некорректная работа платежных систем влияет на конверсию
В WooCommerce иногда возникают ситуации, когда одна или несколько платежных систем начинают выдавать ошибки (например, из-за неверных настроек, проблем с API или временных сбоев). Это приводит к неудобствам для пользователей и снижению конверсии — покупатели не могут выбрать платежный метод или оформление заказа завершается с ошибкой.
Чтобы улучшить UX и избежать потери клиентов, полезно автоматически отключать проблемные платежные системы на стороне сайта, пока ошибка не устранена.
Диагностика проблем с платежными системами в WooCommerce
Прежде чем отключать платежные методы, нужно точно определить, какие из них вызывают ошибки. Для этого:
- Активируйте логирование WooCommerce:
WooCommerce > Статус > Логии в настройках платежных систем включите запись логов. - Анализируйте логи на предмет ошибок API, таймаутов, неправильных ответов.
- Проверьте консоль браузера и сетевые запросы при выборе платежного метода.
- Тестируйте оформление заказа с разными платежными системами в режиме отладки.
Реализация автоматического отключения проблемных платежных систем
WooCommerce позволяет динамически изменять доступные платежные методы через фильтр woocommerce_available_payment_gateways. Мы можем использовать этот хук, чтобы исключать платежные методы, если при их использовании были зарегистрированы ошибки.
Шаг 1: Хранение состояния ошибок платежных систем
Для примера сохраним информацию об ошибках в опции WordPress с меткой времени последней ошибки:
function wc_set_payment_gateway_error( $gateway_id ) {
update_option( 'wc_gateway_error_' . $gateway_id, time() );
}
function wc_clear_payment_gateway_error( $gateway_id ) {
delete_option( 'wc_gateway_error_' . $gateway_id );
}
function wc_is_payment_gateway_errored( $gateway_id, $timeout = 3600 ) {
$last_error = get_option( 'wc_gateway_error_' . $gateway_id );
if ( ! $last_error ) {
return false;
}
return ( time() - $last_error ) < $timeout; // отключать 1 час после ошибки
}Шаг 2: Фильтрация платежных методов
Исключаем методы, если в течение последнего часа была зарегистрирована ошибка:
add_filter( 'woocommerce_available_payment_gateways', 'wc_disable_errored_gateways' );
function wc_disable_errored_gateways( $available_gateways ) {
foreach ( $available_gateways as $gateway_id => $gateway ) {
if ( wc_is_payment_gateway_errored( $gateway_id ) ) {
unset( $available_gateways[ $gateway_id ] );
}
}
return $available_gateways;
}Шаг 3: Регистрация ошибок при неудачных попытках оплаты
В зависимости от платежного шлюза, можно добавить обработчик ошибок, например для популярных платежных систем, в хуки, срабатывающие при ошибках. Для примера — для платежного метода my_gateway:
add_action( 'woocommerce_thankyou_my_gateway', 'wc_check_my_gateway_response', 10, 1 );
function wc_check_my_gateway_response( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
// Проверяем статус заказа или ответ от API
if ( $order->get_status() === 'failed' ) {
wc_set_payment_gateway_error( 'my_gateway' );
} else {
wc_clear_payment_gateway_error( 'my_gateway' );
}
}Для других платежных методов реализуйте аналогичный механизм, основываясь на их API и хуках.
Проверка результата после внедрения
- Создайте заказ с платежным методом, для которого искусственно вызовите ошибку (например, неверные платежные данные).
- Проверьте, что после ошибки этот платежный метод становится недоступен на странице оформления заказа.
- Через час (или после очистки ошибки вручную) метод должен снова появиться.
- Проверьте логи и опции в базе данных через phpMyAdmin: опции с префиксом
wc_gateway_error_.
Частые ошибки и как их исправить
- Не срабатывает отключение платежного метода: Возможно, ошибка не регистрируется, потому что не подключен нужный хук или неправильно проверяется статус заказа. Проверьте, что ваш код для регистрации ошибки вызывается и обновляет опцию.
- Платежный метод исчезает навсегда: Убедитесь, что время отключения адекватное и что есть функция очистки ошибки.
- Проблемы с кешированием: Если на сайте используется объектный кеш или плагин кэширования, данные опции могут кэшироваться. Добавьте очистку кеша при обновлении опции.
Практические советы по безопасности и производительности
- Храните состояние ошибок в transient с TTL, чтобы не захламлять базу данными.
- Логируйте ошибки платежных систем отдельно, чтобы понимать причины и оперативно исправлять.
- Не отключайте платежные методы без подтверждения, что ошибка системная, чтобы не потерять продажи из-за временных сбоев.
- Тестируйте изменения на staging-сайте перед внедрением в продакшен.
Сравнение способов реализации автоматического отключения платежных систем
| Метод | Плюсы | Минусы | Рекомендуется для |
|---|---|---|---|
Фильтр woocommerce_available_payment_gateways с опциями | Простота реализации, гибкость, работает с любыми платежами | Требует ручной регистрации ошибок, возможны проблемы с кешем | Сайты с несколькими платежными системами и контролем ошибок |
| Использование плагинов мониторинга платежей | Автоматизация, готовые решения | Может быть дорого, ограниченная кастомизация | Большие проекты с бюджетом на поддержку |
| Полная ручная реализация в платежных шлюзах | Максимальный контроль | Сложность и высокая трудоемкость | Кастомные платежные шлюзы и интеграции |