Что такое автоперехват заказа в WooCommerce и зачем его отключать
В WooCommerce функция автоперехвата заказа (Order Auto Capture) позволяет автоматически подтверждать и оплачивать заказы после их создания, особенно при работе с платежными шлюзами, поддерживающими авторизацию и списание средств в два шага. Однако в ряде случаев это может вызывать проблемы: например, если требуется ручная проверка платежа, дополнительное согласование заказа или интеграция с внешними сервисами, где автоматический перехват мешает бизнес-процессу.
Отключение автоперехвата позволяет контролировать момент подтверждения и списания средств вручную, что снижает риски ошибок и дает больше гибкости.
Диагностика: как понять, что автоперехват активен и вызывает проблемы
- Заказы автоматически переходят в статус "Выполнен" или "Обработан" сразу после оплаты, без ручного подтверждения.
- Платежи списываются сразу, даже если вы планировали сначала авторизовать сумму и затем списать вручную.
- Интеграция с внешними CRM или ERP системами не успевает корректно обработать заказ из-за мгновенного статуса.
- Вы используете платежные шлюзы, поддерживающие авторизацию (например, Stripe, PayPal), и хотите контролировать списание средств вручную.
Проверка в коде и настройках
Включение автоперехвата часто задаётся через параметры платежного шлюза или хуки WooCommerce. Для проверки подключенных хуков выполните в файле functions.php или в консоли WP-CLI:
print_r( has_filter('woocommerce_payment_complete_order_status') );Если есть фильтры, связанные с автоперехватом или автоматическим изменением статуса заказа — это индикатор его работы.
Пошаговое отключение автоперехвата заказа
1. Проверьте настройки платежного шлюза
Во многих популярных шлюзах (Stripe, PayPal) есть опция "Автоматическое списание" или "Capture charge immediately". Отключите эту опцию в настройках плагина платежного шлюза.
2. Отключите хуки, вызывающие автоматическое изменение статуса заказа
Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
remove_action('woocommerce_order_status_processing', 'woocommerce_payment_complete');Этот код предотвращает автоматическое завершение оплаты при переходе заказа в статус "обрабатывается".
3. Настройте ручное подтверждение оплаты
Для оплаты с авторизацией и последующим списанием, используйте следующий пример для Stripe:
add_action('woocommerce_order_status_on-hold_to_processing', function($order_id) {
$order = wc_get_order($order_id);
// Здесь вызывайте API Stripe для ручного списания средств
// Пример:
// $payment_intent_id = $order->get_transaction_id();
// stripe_capture_payment_intent($payment_intent_id);
$order->payment_complete();
});Так вы перейдёте к оплате только после ручного запуска.
Проверка результата после внедрения
- Создайте тестовый заказ с авторизацией платежа.
- Убедитесь, что статус заказа не меняется автоматически на "Выполнен" или "Обработан".
- Проверьте, что средства не списываются сразу (через кабинет платежного шлюза или тестовый режим).
- Выполните ручное списание средствами из админки или через кастомный код, и убедитесь, что статус обновляется корректно.
Частые ошибки и способы их исправления
- Автоперехват не отключился после внесения кода. Проверьте правильность подключения файла с кодом, очистите кеш сайта и кеш плагинов.
- Платежный шлюз не поддерживает задержанное списание. Убедитесь, что ваш платежный сервис поддерживает авторизацию с последующим списанием (например, Stripe Payment Intents).
- Ошибка в хуках и фильтрах. Используйте
remove_actionиremove_filterс правильными приоритетами, чтобы отключить автоперехват. - Статусы заказа меняются другими плагинами. Проверьте совместимость и конфликты с другими расширениями WooCommerce.
Практические советы по безопасности и производительности
- Всегда тестируйте изменения на staging-сайте или в тестовом режиме платежного шлюза.
- Логируйте действия по списанию средств для аудита и отладки.
- Используйте WP-Cron или внешние задачи для периодического контроля статусов заказов и платежей.
- Не отключайте критичные хуки WooCommerce без понимания последствий — это может нарушить работу других функций.
Сравнение способов отключения автоперехвата
| Метод | Где настраивается | Плюсы | Минусы |
|---|---|---|---|
| Отключение в настройках шлюза | Панель настроек плагина платежного шлюза | Просто и быстро, без кода | Не всегда доступно, зависит от плагина |
| Удаление хуков WooCommerce | functions.php или кастомный плагин | Гибко, полный контроль | Требует знаний кода, риск ошибок |
| Ручное управление списанием | Код, API платежного шлюза | Максимальный контроль и интеграция | Сложнее в реализации и поддержке |