Программно заблокировать создание заказа поставщика WCFM для частичных прямых начислений Stripe в оформлении заказа WooCPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Программно заблокировать создание заказа поставщика WCFM для частичных прямых начислений Stripe в оформлении заказа WooC

Сообщение Anonymous »

Я создаю мультивендорную торговую площадку WooCommerce, используя:
  • WooCommerce (последняя версия)
  • WCFM Marketplace
  • WCFM Stripe Split Pay
  • Stripe Connect с прямыми платежами и экспресс-счетами
Когда клиент размещает один заказ, содержащий продукты от нескольких поставщиков, Stripe обрабатывает отдельные платежи, по одному на каждого поставщика.
Проблема
Если один из поставщиков взимает плату происходит сбой (например, ошибка Stripe "insufficient_funds"), но по крайней мере один платеж выполнен успешно:
  • Stripe возвращает частичный отказ
  • WooCommerce по-прежнему создает основной заказ
  • WCFM по-прежнему создает записи заказов для всех поставщиков.
  • Поставщики, которые не получили оплату, все равно получают уведомления о заказах.
Это приводит к тому, что поставщики выполняют заказы без получения оплаты, что является критической проблемой в производстве.
Код ссылка
Внутри class-wcfmmp-gateway-stripe-split.php в методеprocess_pay() WCFM проверяет результат начислений Stripe, используя массив $all_success:

Код: Выделить всё

if ( is_array( $all_success ) && in_array( "false", $all_success ) ) {
$order->update_status( apply_filters( 'wcfmmp_stripe_split_pay_failed_order_status', 'failed', $order ) );
wc_add_notice( __("Stripe Payment Error", 'wc-multivendor-marketplace'), 'error' );
return array(
'result' => 'fail',
'redirect' => $this->get_return_url($order)
);
}
Однако даже после этого сбоя WCFM по-прежнему создает заказы поставщикам, используя:

Код: Выделить всё

add_action( 'woocommerce_checkout_order_processed', 'wcfmmp_checkout_order_processed', 30, 3 );
Это действие выполняется после обработки Stripe и по-прежнему генерирует подзаказы для поставщиков.
Цель
Я хочу обеспечить строгое транзакционное поведение:
  • Если какой-либо Stripe Direct Charge не удается, заблокировать весь заказ
  • Не создавать заказы поставщиков WCFM
  • Не отправлять электронные письма с уведомлениями поставщиков
  • Отметить заказ WooCommerce как неудавшийся
  • Разрешить клиенту чтобы повторить платеж в обычном режиме
Вопрос
Как я могу программно запретить WCFM создавать заказы поставщиков, когда Stripe возвращает хотя бы один неудачный платеж во время оформления заказа (то есть, когда $all_success содержит значение «false»)?
В частности:
  • Как я могу условно заблокировать или удалить действие WCFM, привязанное к:

    Код: Выделить всё

    woocommerce_checkout_order_processed (priority 30)
    
    
  • Есть ли безопасный способ остановить создание заказов поставщика в случае неуплаты платежа?
  • Можно ли этого добиться с помощью remove_action или фильтра перед тем, как WCFM разделит заказ?
Что я могу сделать? пробовал
  • Поддержка WCFM предложила использовать индивидуальный статус заказа, но это не решает проблему.
  • WCFM подтвердила, что заказы поставщиков генерируются с помощью приведенного выше крючка, но не предоставила код.
  • Поддержка Stripe подтвердила это поведение ожидается при использовании прямых платежей, но логика заказа должна обрабатываться на уровне WooCommerce/плагина.
Ожидаемый результат: заказы поставщиков не должны создаваться, если какой-либо платеж Stripe не выполнен.
Любой подход на основе перехватчиков или безопасный подход будет очень полезен. Я готов использовать remove_action, условно предотвращая создание разделения или запуская отказоустойчивую систему перед обработкой заказа WCFM.

Подробнее здесь: https://stackoverflow.com/questions/798 ... rect-charg
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»