100% скидка на заказ На рассмотрении

2

При оформлении заказа присваивается 100% скидка на заказ.

в истории имеем: "Discount specified manually during order creation: -2,587" (это 100% суммы заказа)

При чем эта запись появляется раньше, чем "Имя пользователя Order was placed"

Условия появления бага:

Заказ оформляет пользователь из фронтэнда, пользователь создается при оформлении заказа, это первый заказ пользователя, скидки в магазине отключены, плагинов для скидок не установлено.

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

Вот кусок истории заказа

Может дырку наши? (ну или дырочку....)

В логах следов не нашел....

23 комментария

  • +1

    А посмотреть действия пользователя через метрику не пробовали?

    • +1

      метрика не подключена.

      Подключена гугл аналитика подключена.

      • +1

        В ней вроде нет видео просмотра действий, подключить хотя-бы временно метрику этим клиентам, чтобы выяснить, какие действия производит пользователь, которые приводят к данным последствиям (если конечно он не блокирует скрипты метрики).

        • +1

          Глянул на втором сайте - там подключена. Ни чего сверхестественного не делает. все как всегда....

          • +1

            похоже на дырочку. Вручную только пользователь бэка может

            • +1

              Была б дырка - тут бы уж шум стоял. А так только у Павла... И на 2 сайтах... Значит есть какая-то особенность, ну или звезды сойтись должны... Имхо, ессно.

            • +1

              Никаких скидочных плагинов дополнительных не подключено? Не удается воспроизвести пока.

              Либо кто-то как-то куку админскую угнал :-/

              • +1

                Если ставится вручную, то это происходит после оформления заказа, а здесь запись ДО. Так же есть инфа - кто именно из юзеров установил скидку. Доступ извне к админке маловероятен. Разве что - API или дырка

                Так же доступ в админку только двум IP открыт.

                • +1

                  если в бэке делаешь заказ, можно сразу вручную скидку указать. кажется, это оно.

                  А у того, от чьего имени скидка дана имя не поменялось? Лишнего адреса в профиле не добавилось?

                • +1

                  Нужно значит подключать Вебасистовцев, они должны быть в этом заинтересованы больше всех. Хотя с их отношением к исправлениям не знаю как быстро они что то сделают.

                  А я бы на вашем месте включил все логи php и MySQL (лог SQL запросов) так же логи запросов в веб серверу, с ежедневной ротацией. Временно до обнаружения проблемы. Ну и IDS не помешает, "а чо? а вдруг?" )))

                • +1

                  проверил все записи в таблицах по этому заказу - все как всегда.

                  Реферы, страницы и т.д. - ни чем не отличается от остальных

                • +1

                  Я бы еще прицепился к order_action.create и посмотрел, что там.

                  Насколько я помню (когда-то экспериментировал) скидка по заказу пишется одной из первых строк, если при записи заказа указать в массиве заказа discount

                  $order['discount'] = ...
                • +1

                  Паш, начни с простого: проверь .htaccess в нужных местах. Ну так, на всякий случай...

                • +1

                  Такое возможно получить, например, если в обработчике хука order_calculate_discount написать $params['order']['discount'] = $params['order']['total'];
                  Поскольку передаётся по ссылке, то это меняет основную переменную заказа.

                  А дальше уже отрабатывает код в классе shopWorkflowCreateAction.class.php :

                          if ($data['discount'] === '') {
                              $data['total'] = $subtotal;
                              $data['discount_description'] = null;
                              $data['discount'] = shopDiscounts::apply($data, $data['discount_description']);
                          } else {
                              if (empty($data['discount_description']) && !empty($data['discount'])) {
                                  $data['discount_description'] = sprintf_wp('Discount specified manually during order creation: %s', shop_currency($data['discount'], $currency, $currency));
                              }
                          }
                  

                  И как раз получается такая картина.

                  Но повторюсь, это возможно, если стоит кривой плагин, который вместо того, чтобы вернуть скидку просто меняет discount у заказа.
                  Так что внимательно посмотрите на установленные плагины (возможно вы сами в каком-то плагине что-то тестили и забыли).
                  Других причин судя по коду нет и быть не может.


                • +1

                  Я понял как они это делали!!!!

                  Знач эти хитро-жо... товарищи добавляли в корзину отрицательное кол-во товара. (на странице товара у меня выведено поле для ввода кол-ва)

                  В корзине мы получаем нуллевую итоговую сумму и скидку = сумме товара.

                  Заметить в админке минус рядом с кол-вом товара - не так просто. На цифру смотришь, а минус как-то и не видишь.

                  сделал проверку при изменении поля кол-ва.

                  ИМХО: Это баг движка. проверка таких вещей должна быть на уровне исходного кода


                  • +1
                    Eugen Nichikov Eugen Nichikov 26 ноября 2015 05:00 #

                    Великолепно! :)

                    и действительно


                    Но вот толку с таких заказов? :)


                    сделал проверку при изменении поля кол-ва.

                    Спокойно можно прямо в коде поменять.

                    • +1

                      Представьте, что у Вас в день по 500-1000 заказов, персонала больше 100 чел.

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

                    • +1

                      Жесть, почему это до сих пор работает?!

                      Добавление новых комментариев к этой теме отключено.