Диагностика проблемы с уведомлениями при неуспешной оплате
В стандартной комплектации WooCommerce уведомления о неуспешной оплате (failed payment) не всегда приходят администратору или покупателю. Это связано с тем, что WooCommerce не отправляет отдельное письмо при смене статуса заказа на "Неоплачено" или "Отменен". Часто пользователи сталкиваются с отсутствием оповещений, что приводит к задержкам в обработке заказов и увеличению числа незавершенных покупок.
Как проверить, срабатывают ли email уведомления?
- Перейдите в
WooCommerce > Настройки > Emailи проверьте, включены ли уведомления для статусов "Отменен" (Cancelled) и "Ожидает оплаты" (Failed). - Создайте тестовый заказ и искусственно переведите его в статус
failedилиcancelledчерез админку. - Проверьте, приходит ли письмо на почту администратора и покупателя.
Если письма не приходят, значит стандартной функциональности недостаточно и нужно настраивать отправку вручную.
Пошаговое решение: добавляем отправку email при неуспешной оплате
Для отправки почтового уведомления при статусе заказа failed используем хук woocommerce_order_status_failed. Создадим кастомную функцию, которая отправит письмо администратору и покупателю.
add_action('woocommerce_order_status_failed', 'send_failed_payment_notification', 10, 1);
function send_failed_payment_notification($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order) return;
// Получаем email покупателя
$customer_email = $order->get_billing_email();
// Email администратора
$admin_email = get_option('admin_email');
// Тема и сообщение письма
$subject = 'Неуспешная оплата заказа №' . $order->get_order_number();
$message = 'Здравствуйте!\n\nПлатеж по заказу №' . $order->get_order_number() . ' не был успешно завершен.\n';
$message .= 'Пожалуйста, проверьте детали заказа: ' . $order->get_edit_order_url() . '\n\n';
$message .= 'Спасибо.';
// Отправляем письмо покупателю
wp_mail($customer_email, $subject, $message);
// Отправляем письмо администратору
wp_mail($admin_email, $subject, $message);
}Этот код можно добавить в файл functions.php вашей дочерней темы или в плагин для кастомных функций.
Дополнительные настройки письма
Для улучшения внешнего вида и формата письма можно использовать HTML-шаблон и функцию wc_mail из WooCommerce:
function send_failed_payment_notification_html($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order) return;
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if (!empty($mails)) {
$email_heading = 'Неуспешная оплата заказа №' . $order->get_order_number();
$message = '<p>Платеж по заказу <strong>№' . $order->get_order_number() . '</strong> не был успешно завершен.</p>';
$message .= '<p>Проверьте детали заказа: <a href="' . esc_url($order->get_edit_order_url()) . '">Просмотреть заказ</a></p>';
$mailer->send($order->get_billing_email(), $email_heading, $mailer->wrap_message($email_heading, $message));
$mailer->send(get_option('admin_email'), $email_heading, $mailer->wrap_message($email_heading, $message));
}
}
add_action('woocommerce_order_status_failed', 'send_failed_payment_notification_html', 20, 1);Проверка результата после внедрения
- Создайте тестовый заказ с любым продуктом.
- Переведите заказ в статус "Неуспешный" вручную через админку WooCommerce.
- Проверьте почтовый ящик администратора и покупателя — должны прийти соответствующие письма.
- Если письма не приходят, проверьте логи сервера или включите отладку email, например, с помощью плагина WP Mail Logging.
Частые ошибки и способы их исправления
- Письма не отправляются: проверьте корректность SMTP или настройки отправки почты в WordPress, отключите плагины, которые могут блокировать wp_mail.
- Неправильный email получателя: убедитесь, что у заказа заполнен email покупателя.
- Код добавлен в неподходящее место: вставляйте код в
functions.phpдочерней темы или в отдельный плагин, чтобы избежать потери при обновлениях. - Письма попадают в спам: настройте SPF, DKIM и DMARC для домена, используйте проверенные SMTP-сервисы.
Практические советы по оптимизации и безопасности
- Используйте SMTP-плагин (например, WP Mail SMTP) для надежной отправки писем.
- Ограничьте частоту отправки писем, чтобы избежать блокировок при массовой отправке.
- Логируйте отправку писем с помощью плагинов вроде WP Mail Logging для быстрого выявления проблем.
- Обновляйте WooCommerce и плагины вовремя, чтобы использовать последние исправления безопасности.
Сравнение вариантов отправки email уведомлений при failed payment
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| Стандартные уведомления WooCommerce | Встроено, нет дополнительного кода | Не отправляет письма при failed payment по умолчанию | Включение email в настройках WooCommerce |
| Кастомный хук с wp_mail | Гибкость, можно настроить содержимое и получателей | Требует базовых навыков PHP, поддержка кода на вашей стороне | Пример кода выше с add_action и wp_mail |
| Использование WC Mailer | Соответствует стилю WooCommerce, HTML письма | Сложнее для новичков | Пример с WC()->mailer() выше |