- WooCommerce (последняя версия)
- WCFM Marketplace
- WCFM Stripe Split Pay
- Stripe Connect с прямыми платежами и экспресс-счетами
Проблема
Если один из поставщиков взимает плату происходит сбой (например, ошибка 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)
);
}
Код: Выделить всё
add_action( 'woocommerce_checkout_order_processed', 'wcfmmp_checkout_order_processed', 30, 3 );
Цель
Я хочу обеспечить строгое транзакционное поведение:
- Если какой-либо Stripe Direct Charge не удается, заблокировать весь заказ
- Не создавать заказы поставщиков WCFM
- Не отправлять электронные письма с уведомлениями поставщиков
- Отметить заказ WooCommerce как неудавшийся
- Разрешить клиенту чтобы повторить платеж в обычном режиме
Как я могу программно запретить WCFM создавать заказы поставщиков, когда Stripe возвращает хотя бы один неудачный платеж во время оформления заказа (то есть, когда $all_success содержит значение «false»)?
В частности:
- Как я могу условно заблокировать или удалить действие WCFM, привязанное к:
Код: Выделить всё
woocommerce_checkout_order_processed (priority 30) - Есть ли безопасный способ остановить создание заказов поставщика в случае неуплаты платежа?
- Можно ли этого добиться с помощью remove_action или фильтра перед тем, как WCFM разделит заказ?
- Поддержка WCFM предложила использовать индивидуальный статус заказа, но это не решает проблему.
- WCFM подтвердила, что заказы поставщиков генерируются с помощью приведенного выше крючка, но не предоставила код.
- Поддержка Stripe подтвердила это поведение ожидается при использовании прямых платежей, но логика заказа должна обрабатываться на уровне WooCommerce/плагина.
Любой подход на основе перехватчиков или безопасный подход будет очень полезен. Я готов использовать remove_action, условно предотвращая создание разделения или запуская отказоустойчивую систему перед обработкой заказа WCFM.
Подробнее здесь: https://stackoverflow.com/questions/798 ... rect-charg
Мобильная версия