wpmail.ru wordpress WP Mail

WooCommerce: как настроить отправку email при неуспешной оплате заказа

Диагностика проблемы с уведомлениями при неуспешной оплате

В стандартной комплектации 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() выше
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙