Смена статуса заказа и его почтовые события обрабатываются стандартно системой, при правильной установке. Ниже один из способов отловить такое событие.
Будем использовать OnOrderSave, это значит что ЛЮБОЕ изменение заказа будет проверено:
AddEventHandler("sale", "OnOrderSave", "OrderMySave"); function OrderMySave($orderID, $fields, $orderFields){ if ($fields['STATUS_ID'] == 'F') { //AddMessage2Log($orderID); $email = $orderFields['USER_EMAIL']; Event::sendImmediate(array( "EVENT_NAME" => "SEND_RATING", "LID" => "s1", "C_FIELDS" => array( "EMAIL" => $email, "ORDER_ID" => $orderID ), )); } }
Теперь по порядку. Вешаем обработчик события на сохранении данных о заказе. Проверяем на статус Выполнен с кодом F. По логике это финальное действие с заказом, и вы больше не будете там ничего сохранять, поэтому в данном случае это событие нас устраивает.
AddMessage2Log – поможет заняться дебагом, если вам нужно вывести данные в лог, только не забудьте добавить в дбкон – define(“LOG_FILENAME”,$_SERVER[“DOCUMENT_ROOT”].”/.log.txt”);
В начале нашего файла добавьте
use Bitrix\Main\Mail\Event;
Без него будет ошибка.
Событие отправляется мгновенно, потому как Event::sendImmediate. “SEND_RATING” – название почтового события.
C_FIELDS – наши поля для письма.