Март 13, 2020
Выполнение кода при полной или частичной оплате заказа.
Выполнение кода при полной оплате заказа (событие "OnSaleOrderSaved"):
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderSaved',
'\Partner\MyClass::onSaleOrderSaved'
);
class MyClass
{
function onSaleOrderSaved(\Bitrix\Main\Event $event)
{
$order = $event->getParameter("ENTITY");
$oldValues = $event->getParameter("VALUES");
if(!$order->getField('PAYED') || !$oldValues['PAYED'] || !(($order->getField('PAYED')=='Y') && ($oldValues['PAYED']=='N')))
return;
// выполняем код
}
}
Событие при оплате конкретного платежа (оплата всего заказа может состоять из нескольких оплат):
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSalePaymentEntitySaved',
'\Partner\MyClass:: onSalePaymentEntitySaved'
);
class MyClass
{
function onSalePaymentEntitySaved(\Bitrix\Main\Event $event)
{
$payment = $event->getParameter("ENTITY");
$oldValues = $event->getParameter("VALUES");
if($payment->getField('PAY_SYSTEM_ID')==\Bitrix\Sale\PaySystem\Manager::getInnerPaySystemId())
return; // для внутренних оплат ничего не делаем
if(!($oldValues["PAID"] == 'N' && $payment->getField('PAID') == 'Y'))
return;
$order = $payment->getOrder(); // объект заказа
$paymentCollection = $order->getPaymentCollection(); // полная коллекция оплат заказа
// выполняем код
}
}