msOnCreateOrder - ложные срабатывания.

Предыстория такова. Поднял проект небольшого магазина на 500 товаров. По привычке настроил клиенту СМС оповещение о новых заказах на событие msOnCreateOrder и ушел заниматься своими делами. Заказы потихоньку идут, проходит пара месяцев и тут на тебе. У клиента 3 смс за 2 минуты о новых заказах, на почте пусто, в админке ничего нового.

Первым делом посмотрел логи. Вроде все ровно. Проверил свой ящик. Пусто. Еще раз админку. Ничего. Стал грешить на смс — провайдера. Но для уверенности в плагин добавил получение рандомного четырехзначного кода с отправкой его в смс. Повесил цель в метрике на нажатие кнопки. Сижу жду. Как на рыбалке. Неделю тишь да гладь и тут сегодня утром за 2 минуты 3 смс. Почта пустая, админка пустая. «Клюет!» — подумал я. И не ошибся. В метрике 3 срабатывания по цели. На телефоне 3 смс. Сравниваю коды в смс — все разные. Значит это не смс — провайдер копии шлет. Плагин отработал трижды.

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

То ли я дурак, то ли лыжи не едут, но подозрения идут в сторону срабатывания триггера до момента сохранения заказа. Если это и так, то как понять причины его несохранения? Логи пустые.
Я пытался доки искать по событиям miniShop. Пока google выдает лишь упоминания во всяких плагинах.

Итак, внимание вопрос: я один такой? И если да, то ЧЯДНТ?

На всякий случай (обычно все хотят увидеть код), как видите тут тупить нечему.

<?php
	include_once(MODX_BASE_PATH . '*****/smsc.php');
	$sms = new smsc();
	$sms->setAuthData('*****', '*****');
	$sms->setPhones('*****');
	$order_id = $order->get('id');
	$sms->setMessage("Новый заказ на *****. Проверьте почту. " . $order_id);
	$sms = $sms->sendSMS();
aj
aj
05 мая 2015, 08:33
modx.pro
1
2 174
0

Комментарии: 18

Володя
05 мая 2015, 11:42
0
а orderhandler родной?
    aj
    aj
    05 мая 2015, 11:51
    0
    Ну я его не менял. Только плагин на событие вывесил и все. Откуда там другому взяться ума не приложу.
      Володя
      05 мая 2015, 11:57
      0
      а код плагина скинь сюда
        aj
        aj
        05 мая 2015, 11:58
        0
        Так вон он. В самом низу поста.
          Алексей Ерохин
          05 мая 2015, 12:34
          0
          Добавьте проверку названия плагина и проверку на получение id заказа.
          Это должно избавить от ложных срабатываний, а потом уже копать, что не так с созданием.

          Как вариант — ваш плагин плюет что-то в вывод, и минишоп не отрабатывает отправку писем и т.п.
          tinyurl.com/qgayjpd
            aj
            aj
            05 мая 2015, 12:49
            0
            Добавьте проверку названия плагина и проверку на получение id заказа.
            Это решит проблему паники со стороны клиента, но никак не поможет разобраться в чем проблема.

            Как вариант — ваш плагин плюет что-то в вывод, и минишоп не отрабатывает отправку писем и т.п.
            Часть заказов отрабатывает корректно. На 3-х проектах рядом он работает и проблем не возникает. Поэтому проблему плагина исключаю.
              Алексей Ерохин
              05 мая 2015, 13:04
              0
              Проверьте в базе заказы со статусом 0
                aj
                aj
                05 мая 2015, 13:30
                0
                Проверял. Нет таких. Сплошная мистика.
            Василий Наумкин
            05 мая 2015, 15:11
            0
            В нормальном плагине должна быть проверка события, на которое он рассчитан.

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

            В MS2 тоже, как бы, тупить негде — ровно один вызов этого события при создании заказа.
              aj
              aj
              05 мая 2015, 15:15
              0
              Это понятно. Событие там отмечено только одно. 3 раза проверил. Плюс повесил триггер в метрику, чтобы сравнивать. На выходе в метрике 3 клика на submit отправки заказа. На телефоне 3 смс. Время совпадает. Соответственно событие отрабатывается корректно. И именно то, на которое рассчитан плагин.

              Вот только заказ не сохраняется. Почта не отправляется. В логах чисто. Как будто ничего и не происходило.
                Василий Наумкин
                05 мая 2015, 15:21
                0
                А без плагина, я так понимаю, заказ нормально сохраняется?

                Если так, то проблема, очевидно, в классе отправки SMS.
                  aj
                  aj
                  05 мая 2015, 15:24
                  0
                  Шутка в том, что часть заказов сохраняется нормально, а часть нет. Причем плагин работает вполне себе ровно на 3-х соседних проектах в связке с miniShop и ни разу никаких нареканий не было.
                    Василий Наумкин
                    05 мая 2015, 15:25
                    0
                    Мистика!
                      aj
                      aj
                      05 мая 2015, 15:27
                      0
                      Я сам специально создавал по 20 тестовых заказов и все отработало на ура. Причем уже не один раз тестировал. Но иногда проскакивает вот такая бага, воспроизвести ни разу не получилось.

                      Причем если бы не смс оповещения, я бы и не знал, что там что-то не так. Поэтому и ищу проблему с 2-х сторон. Т.к. в случае, если ошибка со стороны miniShop, то с пустыми логами о ней никак не узнать и не заметить.
                        Василий Наумкин
                        05 мая 2015, 15:33
                        0
                        Я бы попробовал перевесить на событие msOnChangeOrderStatus и проверять status == 1.
                        aj
                        aj
                        05 мая 2015, 15:41
                        0
                        Отсюда у меня 2 вопроса:

                        1) Как все таки определить почему не отправляются заказы, ведь по сути сама проблема не решается. И отследить ее никак не получится. Форма отправляется, срабатывает триггер на событие, юзер явно жмакал кнопку и даже все отправил, и все дошло до скрипта, раз он вызвал событие.

                        P.S. — Что самое интересное — триггер находится после метода save и без сохранения сработать не может по условию, однако триггер срабатывает, а сохранения не происходит.

                        2) $order->status проверять?
    Наумов Алексей
    05 мая 2015, 15:13
    0
    Может плагин где то php ошибку выдает и оформление заказа «умирает»? А пользователь 2-3 раза нажимает кнопку из-за этого…
      aj
      aj
      05 мая 2015, 15:17
      0
      Ошибка бы фиксилась в логах. Я сейчас оберну все в try..catch на всякий случай…
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      18