• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Оформление заказа БЕЗ ОПЛАТЫ

compman

Новичок
Почитал форум. Вопрос задавался неоднократно, но модераторы почему-то игнорируют его. Решил создать тему.
Внимание, вопрос:
Можно ли с помощью плагина woocommerce оформлять заказ без оплаты?
Т.е. оплата в любом случае при получении, а не через сайт. Нужно, чтобы данные с чекаута просто шли на почту администратору.

Почему именно woocommerce:
Потому что тема заточена под него и все красиво работает.

Что делал:
Отключал все платежные системы - "Неправильный способ оплаты."
Включал платежку "Наличными" - "К сожалению, у нас не предусмотрены доступные методы оплаты для вашей страны. Пожалуйста, свяжитесь с нами если вам необходима консультация или специальные условия." хотя во всех настройках выбрано "Все страны"

Может я что-то упустил?
 

D&B

Администратор
Команда форума
Местный
Что-то упустили. Наличка работает прекрасно.
 

Stork.71

Гуру
Местный
ройтесь в базовых настройках WC. Там есть список доступных стран. Кроме того, в настройках доставки выставляются доступные страны
Еще вариант - Вы вводите левые данные в поля Страна и почтовый индекс, в связи с чем система теряется.
 

Stork.71

Гуру
Местный
БУГАГА
обновился до 2.1.8 и столкнулся с той же проблемой!
Как я понял после экспериментов, функция оплаты через наложенный платеж доступна только тогда, когда осуществляется доставка. Там можно выбрать либо конкретные варианты доставки, либо сделать наложенный платеж доступным для любого варианта, но в любом случае, если не активирована доставка и нет доступных способов доставки - то и наложенного платежа нет.
Вопросов к форумчанам два:
1. Проверьте пожалуйста эту теорию. То есть отключите у себя доставку и попробуйте выбрать "наложенный платеж", будет ли он доступен?
2. Как можно снять такую привязку, возможно какие-то фильтры, хуки, ну и т.д.? Файлик, который отвечает за блок выбора оплаты - \wp-content\plugins\woocommerce\templates\checkout\review-order.php Может там что-то подредактировать можно?

ап: нашел файлик, отвечающий за метод доставки "наложенный платеж" - wp-content\plugins\woocommerce\includes\gateways\cod\class-wc-gateway-cod.php
 

Stork.71

Гуру
Местный
В принципе, я (с учетом своих неполных знаний и понимания функционирования движка) вижу 2 варианта решения:
1. оформить другой способ оплаты (например, оплата чеками) в качестве наложенного платежа. Как-то так: 2014-05-06_114518.jpg
Недостаток: занятость "чека" для других способов оплаты, (например - "наличными при самовывозе"), ну мало ли.

2. Кромсаем код. Находим файлик \wp-content\plugins\woocommerce\includes\gateways\cod\class-wc-gateway-cod.php и заменяем шмат кода под заголовком "Check If The Gateway Is Available For Use" на код из файлика, вытащенного из старой версии, в которой все работало (2.1.6). Меняем с такого:
PHP:
/**
     * Check If The Gateway Is Available For Use
     *
     * @return bool
     */
    public function is_available() {
        $order = null;

        if ( ! WC()->cart->needs_shipping() ) {
            return false;
        }

        if ( is_page( wc_get_page_id( 'checkout' ) ) && 0 < get_query_var( 'order-pay' ) ) {
            $order_id = absint( get_query_var( 'order-pay' ) );
            $order    = new WC_Order( $order_id );

            // Test if order needs shipping.
            $needs_shipping = false;

            if ( 0 < sizeof( $order->get_items() ) ) {
                foreach ( $order->get_items() as $item ) {
                    $_product = $order->get_product_from_item( $item );

                    if ( $_product->needs_shipping() ) {
                        $needs_shipping = true;
                        break;
                    }
                }
            }

            $needs_shipping = apply_filters( 'woocommerce_cart_needs_shipping', $needs_shipping );

            if ( $needs_shipping ) {
                return false;
            }
        }

        if ( ! empty( $this->enable_for_methods ) ) {

            // Only apply if all packages are being shipped via local pickup
            $chosen_shipping_methods_session = WC()->session->get( 'chosen_shipping_methods' );

            if ( isset( $chosen_shipping_methods_session ) ) {
                $chosen_shipping_methods = array_unique( $chosen_shipping_methods_session );
            } else {
                $chosen_shipping_methods = array();
            }

            $check_method = false;

            if ( is_object( $order ) ) {
                if ( $order->shipping_method ) {
                    $check_method = $order->shipping_method;
                }

            } elseif ( empty( $chosen_shipping_methods ) || sizeof( $chosen_shipping_methods ) > 1 ) {
                $check_method = false;
            } elseif ( sizeof( $chosen_shipping_methods ) == 1 ) {
                $check_method = $chosen_shipping_methods[0];
            }

            if ( ! $check_method ) {
                return false;
            }

            $found = false;

            foreach ( $this->enable_for_methods as $method_id ) {
                if ( strpos( $check_method, $method_id ) === 0 ) {
                    $found = true;
                    break;
                }
            }

            if ( ! $found ) {
                return false;
            }
        }

        return parent::is_available();
    }

на такой:
PHP:
/**
     * Check If The Gateway Is Available For Use
     *
     * @return bool
     */
public function is_available() {

        if ( ! empty( $this->enable_for_methods ) ) {

            // Only apply if all packages are being shipped via local pickup
            $chosen_shipping_methods_session = WC()->session->get( 'chosen_shipping_methods' );

            if ( isset( $chosen_shipping_methods_session ) ) {
                $chosen_shipping_methods = array_unique( $chosen_shipping_methods_session );
            } else {
                $chosen_shipping_methods = array();
            }

            $check_method = false;

            if ( is_page( wc_get_page_id( 'checkout' ) ) && ! empty( $wp->query_vars['order-pay'] ) ) {

                $order_id = absint( $wp->query_vars['order-pay'] );
                $order    = new WC_Order( $order_id );

                if ( $order->shipping_method )
                    $check_method = $order->shipping_method;

            } elseif ( empty( $chosen_shipping_methods ) || sizeof( $chosen_shipping_methods ) > 1 ) {
                $check_method = false;
            } elseif ( sizeof( $chosen_shipping_methods ) == 1 ) {
                $check_method = $chosen_shipping_methods[0];
            }

            if ( ! $check_method )
                return false;

            $found = false;

            foreach ( $this->enable_for_methods as $method_id ) {
                if ( strpos( $check_method, $method_id ) === 0 ) {
                    $found = true;
                    break;
                }
            }

            if ( ! $found )
                return false;
        }

        return parent::is_available();
    }

Пока вроде работает нормально, хотя запросто могут возникнуть ситуации, когда не сработает. Если кто может - потестите, отзовитесь.

Нашел тему на WP форуме, аналогичная проблема, пока решения нет, но за темой последить можно.
 

compman

Новичок
Поставил доставку.
Для авторизированных пользователей заказ оформляет, но не присылает e-mail (может проблема и на моей стороне).
Для неавтор. товар добавляет в корзину, но когда захожу в корзину, то она пуста, хотя без доставки корзина работала.
Stork.71, спасибо, сейчас буду пробовать. Результат отпишу.
 

compman

Новичок
Новая проблема: в чекауте нажимаю "Разместить заказ" и вот такое выдает http://joxi.ru/YT1xU_3JTJAnU61Lfms

Крутится и все... в админке заказ появляется, но пользователю что делать?

Прикол в том, что на старом домене перенаправляло на страницу о результате. После переноса такая фигня. Может что-то в базе поправить нужно?

как я понял, не добавляется эндпоинт order-received к ссылке...
 
Последнее редактирование:

Stork.71

Гуру
Местный
это произошло после замены кода по моим инструкциям? Если да, то верните как было )
Плагины и WP обновлены?
Попробуйте деактивировать все плагины, и повключать их снова. Почистить куки.
 

compman

Новичок
это произошло после замены кода по моим инструкциям? Если да, то верните как было )
Плагины и WP обновлены?
Попробуйте деактивировать все плагины, и повключать их снова. Почистить куки.
Все обновил, почистил базу от woocommerce, отключал\активировал плагины, чистил куки - до жопы)
Психанул, ставлю все заново
 

compman

Новичок
Проблема решилась полной очисткой базы и установки всего с нуля... Видимо, пострадало все при переносе
 

Andr7006

Новичок
Хочу подключить платежную систему на сайт WP тема wotique. Рассматриваю пока pay2pay и sprypay.ru. Однако, при сравнениии выяснил в pay2pay нет комиссии за вывод средств (скриншот 1), но как я зная эта система достаточно молодая. У sprypay.ru имеется комиссия за вывод средств продавцов (скриншот 2), но эта система уже достаточно себя зарекомендовала, а это показатель надежности. Кто сталкивался с этими системами или с другими платежными системами, что порекомендуете?Комиссии pay2pay.jpg
 

Вложения

  • spripay комиссия.jpg
    spripay комиссия.jpg
    110.7 KB · Просмотры: 87

LEON777

Новичок
может кто в курсе ситуации! у меня в woocommerce в способах оплаты нету "платежей наличными" . может это както настраиваеться отдельно, либо сторонним плагином? подскажите .
 

searchingman

Гуру
Местный
может кто в курсе ситуации! у меня в woocommerce в способах оплаты нету "платежей наличными" . может это както настраиваеться отдельно, либо сторонним плагином? подскажите .
WooCommerce -> Настройки -> Оплата -> Наложенный платеж -> установить [V] Включить оплату наложенным платежом
 

LEON777

Новичок
WooCommerce -> Настройки -> Оплата -> Наложенный платеж -> установить [V] Включить оплату наложенным платежом
наложенный платеж - это наличка? например клиент не хочет картой хочет наличкой при получении или самовывозе!
разве наложенный платеж это не через почту?
 
Сверху Снизу