Документация для разработчиков

События, связанные с изменением состояния заказов

Примечание: перечисленные ниже события устарели с версии 15.5.0, но в продукте сохранена обратная совместимость. Поэтому их можно использовать, если в настройках модуля Интернет-магазин отмечена опция Включить обработку устаревших событий. Либо вы можете использовать события нового ядра.

Событие Описание и параметры МетодС версииДо версии
OnSaleBeforePayOrder Вызывается перед изменением флага оплаты заказа, может быть использовано для отмены.
Параметры
ID Идентификатор заказа
val Флаг оплаты (Y - оплатить заказ, N - снять оплату заказа)
bWithdraw Значение true отражает изменение флага на внутреннем счете пользователя; значение false изменяет только флаг, не затрагивая счет
bPay Если параметр bWithdraw установлен в true, то установка параметра bPay в true приведет к тому, что необходимая сумма денег будет внесена на счет покупателя перед оплатой, а установка в false приведет к тому, что оплата будет происходить целиком с внутреннего счета; если параметр bWithdraw установлен в false, то операции со счетом не производятся и значение параметра bPay не играет роли.
recurringID Должен быть равен 0
arAdditionalFields Массив дополнительно обновляемых параметров (обычно это номер и дата платежного поручения)
PayOrder4.0.6 15.5.0
OnSalePayOrder Вызывается после изменения флага оплаты заказа.
Параметры
ID Идентификатор заказа
val Флаг оплаты (Y - выставление оплаты, N - снятие оплаты)
PayOrder4.0.6 15.5.0
OnSaleBeforeDeliveryOrder Вызывается перед изменением флага разрешения доставки заказа, может быть использовано для отмены.
Параметры
ID Идентификатор заказа
val Флаг разрешения доставки (Y - разрешено, N - запрещено)
recurringID Должен быть равен 0
arAdditionalFields Массив дополнительно обновляемых параметров (обычно это номер и дата документа отгрузки)
DeliverOrder4.0.6 15.5.0
OnSaleDeliveryOrder Вызывается после изменения флага разрешения доставки заказа.
Параметры
ID Идентификатор заказа
val Флаг разрешения доставки (Y - разрешено, N - запрещено)
DeliverOrder 4.0.615.5.0
OnSaleBeforeCancelOrder Вызывается перед изменением флага отмены заказа, может быть использовано для отмены.
Параметры
ID Идентификатор заказа
val Флаг отмены заказа (Y - отменено, N - не отменено)
CancelOrder4.0.6 15.5.0
OnSaleCancelOrder Вызывается после изменения флага отмены заказа.
Параметры
orderId Идентификатор заказа
value Флаг отмены заказа (Y - отменено, N - не отменено)
description Причина отмены. Изменить это поле нельзя, только чтение.
CancelOrder4.0.6 15.5.0
OnSaleBeforeStatusOrder Вызывается перед изменением статуса заказа, может быть использовано для отмены.
Параметры
ID Идентификатор заказа
val Идентификатор статуса
StatusOrder4.0.6 15.5.0
OnSaleStatusOrder Вызывается после изменения статуса заказа.
Параметры
ID Идентификатор заказа
val Идентификатор статуса
StatusOrder 4.0.615.5.0

Обратите внимание, что события OnSaleBeforeStatusOrder и OnSaleStatusOrder не вызываются в момент создания заказа, поэтому перевод в статус N (Принят) может быть инициировано только вручную. В таком случае, можно инициировать вызов своего обработчика на смену статуса через обработчик на создание заказа. Например так:
 public static function OnOrderAddHandler($ID, $arFields) {
      self::OnSaleStatusOrderHandler($ID, $arFields['STATUS_ID']);
   }



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Игорь Сусидский
Код
/* Начисление бонусов */
$eventManager->AddEventHandler("sale", "OnSalePayOrder", "MyUpdateAccountBonus");
$eventManager->AddEventHandler("sale", "OnSaleCancelOrder", "CanceUpdateAccountBonus");

function MyUpdateAccountBonus($order_id, $status) {
    $koef = 1; //Какой процент начислять
    $order = CSaleOrder::GetByID($order_id);
    if($status == "N"){
        $sumBonus = -($order['PRICE'] * $koef);
        $info = "Снятие денег со счета в связи с отменой оплаты в размере $order_id от заказа";
    }elseif($status == "Y"){
        $sumBonus = $order['PRICE'] * $koef;
        $info = "Бонус за оплату заказа в размере $order_id от заказа";
    }
    if ($order_id > 0 && $status == 'Y' && $order['CANCELED'] == "N") { // Заказ считается оплаченным
        CSaleUserAccount::UpdateAccount($order['USER_ID'], $sumBonus, 'EUR', $info, $order_id);
    }elseif ($order_id > 0 && $status == 'N'){
        CSaleUserAccount::UpdateAccount($order['USER_ID'], $sumBonus, 'EUR', $info, $order_id);
    }
}
//AddMessage2Log($exist, "");
function CanceUpdateAccountBonus($order_id, $status, $info) {
    $koef = 1; //Какой процент снимать
    $order = CSaleOrder::GetByID($order_id);
    if($order['PAYED']=='Y'){
        if($status == "Y"){
            $sumBonus = -($order['PRICE'] * $koef);
            $info = "Снятие денег со счета в связи с отменой заказ $order_id";
        }elseif($status == "N"){
            $sumBonus = $order['PRICE'] * $koef;
            $info = "Возвращение денег в связи с отменой отмены заказа $order_id";
        }

        if($order_id > 0 && $order['USER_ID'] > 0)
            CSaleUserAccount::UpdateAccount($order['USER_ID'], $sumBonus, $order['CURRENCY'], $info, $order_id);
    }
}
1
Никита Хамраев
Размещу здесь пример кода для ядра D7, чтобы задать ищущим направление. Функция отслеживает изменение флага оплаты заказа
Код
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnBeforeSalePaymentSetField', 'changePrice');

function changePrice(\Bitrix\Main\Event $event) 
{ 
    $name = $event->getParameter('NAME'); 
    $value = $event->getParameter('VALUE'); 

    if ($name == 'PAID' && $value =="Y") {  // это проверка, что ставится флаг оплаты в этот момент, как пример
            return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, new \Bitrix\Sale\ResultError('You cant pay this now', 'code'), 'sale');
        }
        else
        {
            return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS);
        }
}


© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх