msOnCreateOrder - ложные срабатывания.
Предыстория такова. Поднял проект небольшого магазина на 500 товаров. По привычке настроил клиенту СМС оповещение о новых заказах на событие msOnCreateOrder и ушел заниматься своими делами. Заказы потихоньку идут, проходит пара месяцев и тут на тебе. У клиента 3 смс за 2 минуты о новых заказах, на почте пусто, в админке ничего нового.
Первым делом посмотрел логи. Вроде все ровно. Проверил свой ящик. Пусто. Еще раз админку. Ничего. Стал грешить на смс — провайдера. Но для уверенности в плагин добавил получение рандомного четырехзначного кода с отправкой его в смс. Повесил цель в метрике на нажатие кнопки. Сижу жду. Как на рыбалке. Неделю тишь да гладь и тут сегодня утром за 2 минуты 3 смс. Почта пустая, админка пустая. «Клюет!» — подумал я. И не ошибся. В метрике 3 срабатывания по цели. На телефоне 3 смс. Сравниваю коды в смс — все разные. Значит это не смс — провайдер копии шлет. Плагин отработал трижды.
Уже не случайность и не глюк. Юзер явно трижды жал на кнопку, трижды сработало событие создания заказа и трижды заказ не был создан без каких-либо упоминаний о себе. И опять неизвестно в какую сторону копать. Полез в пакеты и обновил miniShop. Потом заменил рандомное число на id заказа в плагине, но, чую я, придет вместо него пустота.
То ли я дурак, то ли лыжи не едут, но подозрения идут в сторону срабатывания триггера до момента сохранения заказа. Если это и так, то как понять причины его несохранения? Логи пустые.
Я пытался доки искать по событиям miniShop. Пока google выдает лишь упоминания во всяких плагинах.
Итак, внимание вопрос: я один такой? И если да, то ЧЯДНТ?
На всякий случай (обычно все хотят увидеть код), как видите тут тупить нечему.
Первым делом посмотрел логи. Вроде все ровно. Проверил свой ящик. Пусто. Еще раз админку. Ничего. Стал грешить на смс — провайдера. Но для уверенности в плагин добавил получение рандомного четырехзначного кода с отправкой его в смс. Повесил цель в метрике на нажатие кнопки. Сижу жду. Как на рыбалке. Неделю тишь да гладь и тут сегодня утром за 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();
Комментарии: 18
а orderhandler родной?
Ну я его не менял. Только плагин на событие вывесил и все. Откуда там другому взяться ума не приложу.
а код плагина скинь сюда
Так вон он. В самом низу поста.
Добавьте проверку названия плагина и проверку на получение id заказа.
Это должно избавить от ложных срабатываний, а потом уже копать, что не так с созданием.
Как вариант — ваш плагин плюет что-то в вывод, и минишоп не отрабатывает отправку писем и т.п.
tinyurl.com/qgayjpd
Это должно избавить от ложных срабатываний, а потом уже копать, что не так с созданием.
Как вариант — ваш плагин плюет что-то в вывод, и минишоп не отрабатывает отправку писем и т.п.
tinyurl.com/qgayjpd
Добавьте проверку названия плагина и проверку на получение id заказа.Это решит проблему паники со стороны клиента, но никак не поможет разобраться в чем проблема.
Как вариант — ваш плагин плюет что-то в вывод, и минишоп не отрабатывает отправку писем и т.п.Часть заказов отрабатывает корректно. На 3-х проектах рядом он работает и проблем не возникает. Поэтому проблему плагина исключаю.
Проверьте в базе заказы со статусом 0
Проверял. Нет таких. Сплошная мистика.
В нормальном плагине должна быть проверка события, на которое он рассчитан.
Твой плагин, насколько вижу, будет срабатывать на все события, указанные в его настройках. Понятное дело, что кто-то мог и отметить лишние.
В MS2 тоже, как бы, тупить негде — ровно один вызов этого события при создании заказа.
Твой плагин, насколько вижу, будет срабатывать на все события, указанные в его настройках. Понятное дело, что кто-то мог и отметить лишние.
В MS2 тоже, как бы, тупить негде — ровно один вызов этого события при создании заказа.
Это понятно. Событие там отмечено только одно. 3 раза проверил. Плюс повесил триггер в метрику, чтобы сравнивать. На выходе в метрике 3 клика на submit отправки заказа. На телефоне 3 смс. Время совпадает. Соответственно событие отрабатывается корректно. И именно то, на которое рассчитан плагин.
Вот только заказ не сохраняется. Почта не отправляется. В логах чисто. Как будто ничего и не происходило.
Вот только заказ не сохраняется. Почта не отправляется. В логах чисто. Как будто ничего и не происходило.
А без плагина, я так понимаю, заказ нормально сохраняется?
Если так, то проблема, очевидно, в классе отправки SMS.
Если так, то проблема, очевидно, в классе отправки SMS.
Шутка в том, что часть заказов сохраняется нормально, а часть нет. Причем плагин работает вполне себе ровно на 3-х соседних проектах в связке с miniShop и ни разу никаких нареканий не было.
Мистика!
Я сам специально создавал по 20 тестовых заказов и все отработало на ура. Причем уже не один раз тестировал. Но иногда проскакивает вот такая бага, воспроизвести ни разу не получилось.
Причем если бы не смс оповещения, я бы и не знал, что там что-то не так. Поэтому и ищу проблему с 2-х сторон. Т.к. в случае, если ошибка со стороны miniShop, то с пустыми логами о ней никак не узнать и не заметить.
Причем если бы не смс оповещения, я бы и не знал, что там что-то не так. Поэтому и ищу проблему с 2-х сторон. Т.к. в случае, если ошибка со стороны miniShop, то с пустыми логами о ней никак не узнать и не заметить.
Я бы попробовал перевесить на событие msOnChangeOrderStatus и проверять status == 1.
Отсюда у меня 2 вопроса:
1) Как все таки определить почему не отправляются заказы, ведь по сути сама проблема не решается. И отследить ее никак не получится. Форма отправляется, срабатывает триггер на событие, юзер явно жмакал кнопку и даже все отправил, и все дошло до скрипта, раз он вызвал событие.
P.S. — Что самое интересное — триггер находится после метода save и без сохранения сработать не может по условию, однако триггер срабатывает, а сохранения не происходит.
2) $order->status проверять?
1) Как все таки определить почему не отправляются заказы, ведь по сути сама проблема не решается. И отследить ее никак не получится. Форма отправляется, срабатывает триггер на событие, юзер явно жмакал кнопку и даже все отправил, и все дошло до скрипта, раз он вызвал событие.
P.S. — Что самое интересное — триггер находится после метода save и без сохранения сработать не может по условию, однако триггер срабатывает, а сохранения не происходит.
2) $order->status проверять?
Может плагин где то php ошибку выдает и оформление заказа «умирает»? А пользователь 2-3 раза нажимает кнопку из-за этого…
Ошибка бы фиксилась в логах. Я сейчас оберну все в try..catch на всякий случай…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.