В WooCommerce очень важно своевременно информировать как покупателей, так и администратора магазина о проблемах с оплатой. Такие уведомления позволяют быстро реагировать на сбои, предотвращать потерю заказов и улучшать взаимодействие с клиентом. В этой статье рассмотрим, как добавить кастомные оповещения при ошибках оплаты, используя хуки WooCommerce, а также приведём примеры кода для решения этой задачи.
Почему важно создавать кастомные уведомления о проблемах с оплатой в WooCommerce
Стандартные уведомления WooCommerce подходят для большинства случаев, но иногда их недостаточно:
- Покупателю не всегда понятно, почему оплата не прошла.
- Администратор может не получить своевременного уведомления о проблемах.
- В некоторых случаях требуется внедрить дополнительные действия, например, блокировать оформление заказа или предлагать альтернативные способы оплаты.
Добавление кастомных сообщений позволяет решить эти проблемы и повысить удобство работы с магазином.
Как отследить ошибки оплаты в WooCommerce: хуки и фильтры
Для обработки ошибок оплаты можно использовать несколько хуков WooCommerce, которые срабатывают на разных этапах оформления заказа:
woocommerce_checkout_order_processed— срабатывает после создания заказа, можно проверить статус оплаты.woocommerce_payment_complete— срабатывает при успешной оплате.woocommerce_order_status_failed— срабатывает при смене статуса заказа на «неудачный».
Наиболее удобным для создания уведомлений о проблемах является хук woocommerce_order_status_failed, так как именно при смене статуса на «неудачный» можно запускать оповещения.
Пример добавления уведомления для администратора и покупателя при ошибке оплаты
Добавим функцию для отправки письма и показа сообщения на странице заказа.
function wporders_notify_payment_failure($order_id) {
if (!$order_id) {
return;
}
$order = wc_get_order($order_id);
if (!$order) {
return;
}
// Отправляем email админу
$admin_email = get_option('admin_email');
$subject = 'Проблема с оплатой заказа #' . $order_id;
$message = 'Заказ #' . $order_id . ' не был оплачен. Проверьте детали в админке.';
wp_mail($admin_email, $subject, $message);
// Добавляем сообщение для покупателя
wc_add_notice('Оплата вашего заказа не прошла. Пожалуйста, попробуйте другой способ оплаты или свяжитесь с нами.', 'error');
}
add_action('woocommerce_order_status_failed', 'wporders_notify_payment_failure');Эта функция отправит письмо администратору и покажет ошибку на странице оформления заказа.
Как показывать кастомные уведомления на странице оформления заказа
Для улучшения UX можно показывать дополнительные сообщения прямо на странице оформления заказа, если произошла ошибка оплаты. Для этого используем фильтр woocommerce_checkout_fields и функцию wc_add_notice.
Однако, чтобы уведомление появлялось именно при повторном заходе на страницу после ошибки, нужно сохранять флаг в сессии.
Пример записи ошибки оплаты в сессию и вывода уведомления
function wporders_set_payment_error_flag($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if ($order && $order->has_status('failed')) {
WC()->session->set('wporders_payment_failed', true);
}
}
add_action('woocommerce_order_status_failed', 'wporders_set_payment_error_flag');
function wporders_show_payment_error_notice() {
if (WC()->session->get('wporders_payment_failed')) {
wc_add_notice('Произошла ошибка при оплате. Попробуйте выбрать другой способ оплаты.', 'error');
WC()->session->__unset('wporders_payment_failed');
}
}
add_action('woocommerce_before_checkout_form', 'wporders_show_payment_error_notice');Таким образом, пользователь увидит понятное сообщение при повторном посещении страницы оплаты.
Дополнительные плагины для управления уведомлениями и заказами
Если хочется упростить работу с уведомлениями и кастомизацией WooCommerce, можно использовать готовые плагины с расширенными возможностями:
- Clearfy Pro — оптимизация и расширение WooCommerce, в том числе улучшение уведомлений.
- WPRemark — расширенные возможности для работы с отзывами и уведомлениями.
Использование этих решений позволяет быстро внедрять новые функциональности без глубоких правок кода.
Обработка ошибок платежных шлюзов и вывод подробных причин отказа
Для лучшего информирования клиента полезно выводить детальные сообщения, почему платеж не прошёл. Это можно реализовать, подключаясь к API платежных систем или используя фильтр woocommerce_gateway_error_message.
Пример кастомизации сообщений об ошибках платежного шлюза
function wporders_custom_gateway_error_message($error_message, $error_code) {
if ($error_code === 'card_declined') {
return 'Платёж отклонён банком. Проверьте данные карты или используйте другую карту.';
} elseif ($error_code === 'insufficient_funds') {
return 'Недостаточно средств на счёте. Попробуйте другую карту или способ оплаты.';
}
return $error_message;
}
add_filter('woocommerce_gateway_error_message', 'wporders_custom_gateway_error_message', 10, 2);Такой подход улучшает качество поддержки и снижает количество повторных вопросов от клиентов.