Примечание: перечисленные ниже события устарели с версии 15.5.0, но в продукте сохранена обратная совместимость. Поэтому их можно использовать, если в настройках модуля
Интернет-магазин отмечена опция
Включить обработку устаревших событий. Либо вы можете использовать
события нового ядра.
Событие | Описание и параметры | Метод | С версии | До версии |
OnSaleBeforePayOrder | Вызывается перед изменением флага оплаты заказа, может быть использовано для отмены.
Параметры
ID | Идентификатор заказа |
val | Флаг оплаты (Y - оплатить заказ, N - снять оплату заказа) |
bWithdraw | Значение true отражает изменение флага на внутреннем счете пользователя; значение false изменяет только флаг, не затрагивая счет |
bPay | Если параметр bWithdraw установлен в true, то установка параметра bPay в true приведет к тому, что необходимая сумма денег будет внесена на счет покупателя перед оплатой, а установка в false приведет к тому, что оплата будет происходить целиком с внутреннего счета; если параметр bWithdraw установлен в false, то операции со счетом не производятся и значение параметра bPay не играет роли. |
recurringID | Должен быть равен 0 |
arAdditionalFields | Массив дополнительно обновляемых параметров (обычно это номер и дата платежного поручения) |
| PayOrder | 4.0.6 | 15.5.0 |
OnSalePayOrder | Вызывается после изменения флага оплаты заказа.
Параметры
ID | Идентификатор заказа |
val | Флаг оплаты (Y - выставление оплаты, N - снятие оплаты) |
| PayOrder | 4.0.6 | 15.5.0 |
OnSaleBeforeDeliveryOrder | Вызывается перед изменением флага разрешения доставки заказа, может быть использовано для отмены.
Параметры
ID | Идентификатор заказа |
val | Флаг разрешения доставки (Y - разрешено, N - запрещено) |
recurringID | Должен быть равен 0 |
arAdditionalFields | Массив дополнительно обновляемых параметров (обычно это номер и дата документа отгрузки) |
| DeliverOrder | 4.0.6 | 15.5.0 |
OnSaleDeliveryOrder | Вызывается после изменения флага разрешения доставки заказа.
Параметры
ID | Идентификатор заказа |
val | Флаг разрешения доставки (Y - разрешено, N - запрещено) |
| DeliverOrder | 4.0.6 | 15.5.0 |
OnSaleBeforeCancelOrder | Вызывается перед изменением флага отмены заказа, может быть использовано для отмены.
Параметры
ID | Идентификатор заказа |
val | Флаг отмены заказа (Y - отменено, N - не отменено) |
| CancelOrder | 4.0.6 | 15.5.0 |
OnSaleCancelOrder | Вызывается после изменения флага отмены заказа.
Параметры
orderId | Идентификатор заказа |
value | Флаг отмены заказа (Y - отменено, N - не отменено) |
description | Причина отмены. Изменить это поле нельзя, только чтение. |
| CancelOrder | 4.0.6 | 15.5.0 |
OnSaleBeforeStatusOrder | Вызывается перед изменением статуса заказа, может быть использовано для отмены.
Параметры
ID | Идентификатор заказа |
val | Идентификатор статуса |
| StatusOrder | 4.0.6 | 15.5.0 |
OnSaleStatusOrder | Вызывается после изменения статуса заказа.
Параметры
ID | Идентификатор заказа |
val | Идентификатор статуса |
| StatusOrder | 4.0.6 | 15.5.0 |
Обратите внимание, что события
OnSaleBeforeStatusOrder и
OnSaleStatusOrder не вызываются в момент создания заказа, поэтому перевод в статус N (Принят) может быть инициировано только вручную. В таком случае, можно инициировать вызов своего обработчика на смену статуса через обработчик на создание заказа. Например так:
public static function OnOrderAddHandler($ID, $arFields) {
self::OnSaleStatusOrderHandler($ID, $arFields['STATUS_ID']);
}
1
Игорь Сусидский
12.10.2017 14:52:10
|
Код |
---|
/* Начисление бонусов */
$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);
}
} |
|
|
3
Никита Хамраев
16.11.2016 18:05:58
|
Размещу здесь пример кода для ядра 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-2021,
«1С-Битрикс», 2021
Наверх
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.