Николай Савин

Николай Савин

Был в сети 29 июня 2026, 12:35
Заказы принимаю
Хм. Давай разбираться, я пока не очень понимаю.
Задача — сделать рассылку тысяче клиентов о подходящей им заявке с сайта.
Я могу напрямую перебрать подходящих пользователей и отправить каждому сообщение через консоль. Это вызовет определенную нагрузку на сервер. Это я понимаю.
В чем польза очередей?
Я вместо отправки сообщений тысяче клиентов делаю тысячу записей в таблице очередей.
А что дальше?
Настроенный мною скрипт будет вызывать скажем по десять записей в минуту и отправлять письма? Нагрузка явно будет меньше. Я правильно понимаю суть компонента и его пользу? Только хранение очередей в заранее подготовленной таблице и упрощенное добавление\запрос из таблицы очередей?
Однозначно в избранное.
Спасибо Михаил.
А как работает выполнение действий из очереди? по крону? или что то вроде постоянного запуска через sleep?
Как вообще правильнее всего подобные вещи делать?
После обновления modRetailCRM до версии 2.0 заказы перестали отправляться в CRM.
С таким вопросом обратился ко мне пользователь.
Для решения проблемы я открыл плагин modRetailCRM, нашел строчку, которая отвечает за отправку заказа в RetailCRM
$response = $modRetailCrm->request->ordersCreate($orderData, $site);
Результат выполнения команды сохраняется в переменную $response.
Чтобы просмотреть возможную ошибку (а к слову RetailCRM присылает подробное описание ошибки на русском языке) достаточно распечатать эту переменную и сохранить ее в лог журнал MODX
$modx->log(1, '[modRetailCRM]  Order Response '.print_r($response, true));
После создания тестового заказа — пошел посмотреть журнал ошибок и увидел результат выполнения запроса, в котором русским по белому написано, что ошибка возникла из за несуществующего способа оплаты.

Оказывается если передать в этой строке
$orderData['payments'][0]['type'] = $order['payment']['description'];
произвольный текст — RetailCRM не примет заказ.
Проблема решилась комментированием строки.

А откуда собственно взялся произвольный текст?
При создании способов оплаты я предложил в поле Описание — description указывать символьный код способа оплаты из справочника REtailCRM. Например Оплата наличными — cash.
Если же указать там именно произвольное описание способа оплаты, чтобы показать его клиенту в корзине — получится ошибка, которая решается всего лишь исключением передачи способа оплаты в CRM.

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