Поддержка WooCommerce Проблема при разработке платежного плагина. Не срабатывает с пустой корзиной

  • Господа, прошу помощи.

    Создал собственный платежный шлюз для оплаты заказа банковскими картами.

    Если этот шлюз единственный в системе, то все работает как часы.

    Но у меня двухэтапная оплата, сначала заказ проходит через платежный шлюз «Без оплаты» и заказу присваивается статус «Обрабатывается». Корзина при этом очищается.

    Затем менеджер созванивается с клиентом и после подтверждения заказа (проверки наличия товара, условий доставки и прочее), статус заказа меняется менеджером на «Ожидает оплаты».

    И у клиента появляется возможность оплатить этот заказ уже через мой шлюз. Но тут возникает проблема: как я уже сказал, после обработки заказа первым шлюзом — корзина очищается. И с пустой корзиной мой шлюз не отрабатывает, клиент сразу перенаправляется на страницу с корзиной, где ему сообщается, что она пуста.

    В коде, в конструкторе платежного шлюза-плагина не срабатывает action:
    add_action('woocommerce_receipt_' . $this->id, array($this, 'receipt_page'));

    Если перед самой оплатой закинуть что-либо в корзину, то тоже все отлично, оплачиваться будет именно та сумма, что в заказе, товар в корзине не будет учитываться…

    Как мне сделать так, чтобы мой шлюз мог сработать и при пустой корзине, если статус текущего заказа — «В ожидании оплаты»?

    Какой Action нужно добавить?

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

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Заметил, что function process_payment($order_id) возвращает редирект на страницу https://thebossbaby.ru/checkout/?key=wc_order_5bac9f5f74634&order=10756

    При пустой корзине, ссылка https://thebossbaby.ru/checkout как раз и переходит на страницу с корзиной и сообщением, что она пуста.
    При наличии любого товара в корзине, ссылка с редиректа переходит на оплату нужного заказа (указанного в get параметрах).

    Вопрос сужается до следующего, как убрать проверку корзины при переходе на checkout?

    Сейчас убрал сторонние платежные шлюзы, оставил только свой.
    В своем в function receipt_page($order_id) сделал обновление статуса таким образом:

    $order = wc_get_order($order_id);
    if ($this->two_stage == 'yes') {
                    if (!$order->has_status('pending')) {
                        if (!$order->has_status('on-hold')) {
                            $order->update_status('on-hold', __('Ожидаем оплаты после согласования с менеджером', 'woocommerce'));//on-hold //processing
                        }
                        $action_adr = get_permalink($this->page_on_hold);
                        wp_redirect($action_adr);
                        exit;
                    }
                }

    Самое интересное, после первого вызова статус заказа становится «На удержании», корзина очищается и проблема остается прежней: после выставления вручную менеджером статуса этого заказа в «В ожидании оплаты», оплатить этот заказ невозможно, ибо платежный шлюз не вызывается.
    Ситуация аналогична описанной в предыдущих моих постах.
    Необходимо заставить WooCommerce обработать ссылку вида https://thebossbaby.ru/checkout/?key=wc_order_5bac9f5f74634&order=10756 при пустой корзине.

    Есть соображения?

    Модератор Yuri

    (@yube)

    Необходимо заставить WooCommerce обработать ссылку вида https://thebossbaby.ru/checkout/?key=wc_order_5bac9f5f74634&order=10756 при пустой корзине.

    Может не насиловать WC и использовать ссылку «оплатить», которую плагин генерирует в личном кабинете покупателя? Она должна выглядеть как-то так:
    https://thebossbaby.ru/checkout/order-pay/10756/?pay_for_order=true&wc_order_5bac9f5f74634

    Все, разобрался, переделал все заново, убрал лишние, все заработало как надо

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Проблема при разработке платежного плагина. Не срабатывает с пустой корзиной» закрыта для новых ответов.