• Привет.
    Столкнулся с такой проблемой:
    1. пользователь на сайте пытается оформить заказ, доходит до страницы оплаты, по какой-либо причине оплата отменяется (неправильно данные введены, на карте денег недостаточно и тому подобное). заказ в списке заказов получает статус Failed
    2. пользователь повторяет попытку оплаты. Он может обновить страницу или же остаться на странице, походить по сайту, вернуться, вновь заполнить данные, на этот раз правильно, но в результате получает на экране следующую ошибку:

    «The transaction was not sent to the host because of a duplicate order id»
    3. Если заказу поставить статус «Cancelled», то все хорошо. Создается новый order id

    Специально сделал тестовый продукт: https://joiejewelry.ca/shop/uncategorized/test-product

    Есть идея попробовать принудительно переводить проблемные заказы в статус Cancelled

    Вот такой фильтр написал, но не сработало:
    function wc_mark_failed_orders_as_canceled($order_status, $order_id) {
    $order = new WC_Order($order_id);
    if ($order_status == ‘failed’) {
    return ‘cancelled’;
    }
    return $order_status;
    }
    add_filter(‘woocommerce_valid_order_statuses_for_payment_complete’, ‘wc_mark_failed_orders_as_cancelled’, 10, 2);

    может, ошибся где?

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • фильтр написал, но не сработало

    Изменить статус заказа можно с помощью хука woocommerce_thankyou
    Не проверяла, но должно быть что-то вроде

    add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
        function custom_woocommerce_auto_complete_order( $order_id ) { 
            if ( ! $order_id ) {
                return;
            }
    
            $order = wc_get_order( $order_id );
    
            if( $order->has_status( 'failed' ) ) {
                $order->update_status( 'cancelled' );
            }
        }
    

    Эх… Не помогло.
    Не понимаю, в какой момент это должно отрабатывать и переключать статус.

    Модератор Юрій

    (@yube)

    Я бы полез ковыряться в шлюз платежной системы. Именно там обрабатывается колбэк и меняется статус заказа. Там может быть что угодно (такое впечатление, что зачастую шлюзы пишут люди, не знающие ни WC, ни WP), даже тупой SQL запрос, который, ясное дело, никаким add_action не ловится.

    Спасибо за ответы, пойду копать.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «The transaction was not sent to the host because of a duplicate order id» закрыта для новых ответов.