@MaKS_Ibl4

Как правильно сделать оформление заказа без корзины?

Здравствуйте, суть вопроса вот в чем. Мне нужно сделать возможность сделать заказ из кастомной формы, где только телефон и имя. И после заполнения этой формы и выбора товара в селекте, сразу отправлять в шлюз. В общем и целом фишка работает, но как оказалось потому что я был залогинен. В случае обычного пользователя, редирект идёт в пустую корзину по ссылке checkout. Подскажите куда копать? Код использую следующий:
$variant_id = $_POST['count'];
        $address = array(
            'first_name' => $_POST['name'],
            'phone'      => $_POST['phone'],
        );
        $order = wc_create_order();
        $order->add_product(wc_get_product( $variant_id ), 1 );
        $order->set_address( $address, 'billing' );
        $order->set_address( $address, 'shipping' );
        $order->calculate_totals();
        update_post_meta( $order->get_id(), '_payment_method', 'rbspayment' );
        update_post_meta( $order->get_id(), '_payment_method_title', 'Альфабанк' );
        WC()->session->order_awaiting_payment = $order->get_id();
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
        $result = $available_gateways[ 'rbspayment' ]->process_payment( $order->get_id() );
        
        if ( $result['result'] == 'success' ) {
           echo $result['redirect'];
            exit;
        }
        exit;

Форму отправляю Аяксом, и если я авторизован кидает в гейт, если нет в пустую корзину, с дополнительным сообщением мол ваша корзина пуста оплачивать нечего.
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
@MaKS_Ibl4 Автор вопроса
Вопрос решил.
Добавил:
global $woocommerce;
$woocommerce->cart->add_to_cart(id товара);

Перед create order.
Теперь все заработало как следует. Вроде
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
WC()->session->order_awaiting_payment = $order->get_id();
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
        $result = $available_gateways[ 'rbspayment' ]->process_payment( $order->get_id() );

WC()->session-> тут проблема!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы