Вопрос или проблема
Настройка: WooCommerce + Stripe (встроенный в процесс оформления заказа) тема Storefront (все другие плагины деактивированы) включены подписки WooCommerce
Проблема: Клиент заполняет все данные на странице оформления заказа и вводит информацию о кредитной карте в Stripe. Он нажимает “Разместить заказ”. Происходят два варианта: Заказ успешно создан, и его перенаправляют на страницу Спасибо (TY). ИЛИ валидация Stripe не удалась (например, несоответствие индекса, неверные данные карты и т. д.). Если валидация не удалась, клиент исправляет проблему и отправляет снова. На этот раз платеж успешен, и его перенаправляют на страницу TY. Однако создается второй заказ (это тот, который появляется на странице TY). Позже Stripe повторно проверяет первый заказ в фоновом режиме (например, намерение по оплате или проверка клиента) и также списывает его.
Вопросы: Ожидается ли создание двух заказов в этом случае? Кто-нибудь еще сталкивался с этой проблемой?
.
Ответ или решение
Для решения проблемы дублирования заказов в WooCommerce при использовании Stripe, важно понять, какой механизм вызывает создание нескольких заказов и как это можно исправить. Рассмотрим детали проблемы и возможные пути решения.
Теория (Theory)
WooCommerce — это популярная платформа для электронной коммерции на WordPress, которая часто используется вместе с платёжными шлюзами, такими как Stripe, для обработки платежей. При интеграции таких платёжных систем важно учитывать, как они обрабатывают запросы и взаимодействуют с данными заказа.
Проблема, упомянутая в вопросе, связана с ситуацией, когда клиент может задать неверные данные карты, из-за чего Stripe не проходит проверку, и WooCommerce создает новый заказ после повторной отправки исправленных данных пользователем. Таким образом, возникает дублирование заказов, и Stripe может дважды списать средства с карты клиента.
Причина этого, скорее всего, кроется в процессе обработки ошибочных платежей и способе управления статусами заказов в WooCommerce. Вероятно, первый заказ остаётся в состоянии ожидания или обработки, и как только проблема с платёжной информацией устранена, создаётся новый заказ с новым платежом.
Примеры (Examples)
Представим простой сценарий: клиент заполняет форму заказа и вводит неверный CVV-код. После этого WooCommerce передаёт данные в Stripe для подтверждения платежа. Stripe отклоняет платёж, указывая клиенту на необходимость исправления данных. Клиент исправляет CVV-код и повторно отправляет форму. В этот момент:
-
WooCommerce может создать новый заказ, так как он работает на основе клиентской сессии, где новая отправка данных воспринимается как новая транзакция.
-
Первоначальный заказ остаётся активным с меткой об ожидании выполнения.
-
Повторная проверка со стороны Stripe может привести к двойному списанию средств из-за несовпадения состояния первого заказа.
Применение (Application)
Чтобы уменьшить вероятность возникновения этой проблемы, рекомендуется:
-
Настройки в WooCommerce: Проверьте обработчики ошибок и статусы заказов. Убедитесь, что при ошибке платежа система не создаёт новый заказ, а обновляет существующий. Это может потребовать модификации PHP-кода или настройки хуков и фильтров WooCommerce.
-
Логика обработки в Stripe: Убедитесь, что все операции обрабатываются как единое платёжное намерение. Stripe API предоставляет функционал для управления состояние платежей, уделите внимание правильной реализации этого функционала.
-
Тестирование с банком-партнером: Проведите тесты, чтобы выявить момент, на котором происходит сбой, и выясните, поддерживается ли банком-партнером функционал повторного подтверждения платежей.
-
Улучшение пользовательского опыта: Подумайте о том, чтобы добавить механизмы уточнения ошибок ввода данных и улучшить пользовательский интерфейс, чтобы клиентам было проще исправлять свои ошибки без повторных отправок заказа.
-
Логи и мониторинг: Включите обширное ведение логов для обеих систем – WooCommerce и Stripe. Это позволит не только отследить источник проблем, но и оперативно реагировать на сбои.
-
Обратитесь в техническую поддержку: В случае, если проблема продолжается, обратитесь за поддержкой к разработчикам WooCommerce или в техподдержку Stripe. Они могут предложить эксклюзивные решения или обновления, которые устраняют дублирование заказов.
Таким образом, основная задача заключается в комплексном подходе к управлению сессиями транзакций и заказов, чтобы избежать подобного поведения. Это требует как технических изменений в программировании плагинов, так и внимательного тестирования всех аспектов покупки, особенно если у вас включена подписка, которая сама по себе может влиять на многократные процессы авторизации и списания в Stripe.