beforeProcessRequest
|
Вызывается перед обработкой нотификации при оплате через интернет-магазин. Если обработчик события вернёт ошибочный результат, то дальнейшая обработка нотификаций не производится. |
onNotification
|
Вызывается при получении нотификации при оплате через компонент без использования модуля "Интернет-магазин". |
afterGetInitParams
|
Позволяет модифицировать параметры перед формированием ссылки на оплату. |
afterBuildReceipt
|
Вызывается после создания массива чека. |
onBeforeActionAuthorize
|
Перед обработкой авторизованной оплаты |
onBeforeActionRefund
|
Перед запуском логики обработки оплаты, по которой сделали возврат. |
onBeforeActionPay
|
Перед обработкой подтверждённой оплаты оплаты. |
onBeforeActionFail
|
Перед обработкой оплаты, платеж по которой не прошёл. |
Заменяем все позиции на одну общую.
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('rover.tinkoff', 'afterBuildReceipt', array('RoverReceipt', 'fix'));
class RoverReceipt
{
/**
* @param \Bitrix\Main\Event $event
* @return \Bitrix\Main\EventResult
*/
function fix(Bitrix\Main\Event $event)
{
/** @var \Bitrix\Sale\Order $order */
$parameters = $event->getParameters();
$order = $parameters[0];
$fields = $parameters[1];
$items = $fields['Items'];
$fields['Items'] = [
[
'Name' => 'Гайки и болты',
'Price' => $order->getPrice() * 100,
'Quantity' => 1,
'Amount' => $order->getPrice() * 100,
'Tax' => $items[0]['Tax']
]
];
$parameters[1] = $fields;
return new Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $parameters, 'rover.tinkoff');
}
}
\Bitrix\Main\EventManager::getInstance()->addEventHandler('rover.tinkoff', 'onBeforeActionPay', function (\Bitrix\Main\Event $event){
$params = $event->getParameters();
$payment = $params[1];
$order = $payment->getOrder();
// если заказ не в статусе "новый", возвращаем свой статус и стандартная обработка не производится
// иначе после обработчика продолжится выполнение стандартной логики
if ($order->getField('STATUS_ID') != 'N')
$params[2] = \Bitrix\Sale\PaySystem\ServiceResult::MONEY_COMING;
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $params);
});
\Bitrix\Main\EventManager::getInstance()->addEventHandler('rover.tinkoff', 'onNotification', function (\Bitrix\Main\Event $event){
$request = $event->getParameter('request');
...
});