Событие оплаты заказа

5k
Алексей,
Событие оплаты заказа

У одного заказа может быть несколько счетов, т.ч. событие оплаты есть только у них. Нам нужно OnSalePaymentEntitySaved.

У одного заказа может быть несколько счетов, т.ч. событие оплаты есть только у них. Нам нужно OnSalePaymentEntitySaved.

Пример использования:

\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSalePaymentEntitySaved',  "checkPay");

function checkPay(\Bitrix\Main\Event $event) {

	$oldValues = $event->getParameter("VALUES"); // Значения до изменения оплаты
	$payment = $event->getParameter("ENTITY");

	if ($payment->getField('PAY_SYSTEM_ID') == 1) { // ID оплаты картой
		if ($oldValues["PAID"] == 'N' && $payment->getField('PAID') == 'Y') { // оплачено
			if ($payment->getField('SUM') > 0 && $payment->getField('IS_RETURN') == 'N') {
				$order = \Bitrix\Sale\Order::load($payment->getField('ORDER_ID'));
				$order->getId();
			}
		}
	}
}

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 5 ноября 2019 | Обновлено 6 ноября 2019
примеры d7, оплата
Поделиться
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
5 дек 2020
Отлично Алексей! А как можно определить был ли оплачен заказ полностью? Наверное нужно искать в оплате id заказа и вытягивать данные с заказа? $order = \Bitrix\Sale\Order::load($orderId);
Алексей
5 дек 2020
Александр, у объекта заказа есть метод проверки оплаты заказа $order->isPaid(), но я не знаю учитывает ли он все счета. Если нет, то можно взять коллекцию оплат $order->getPaymentCollection() и проверить оплачены ли они все
У одного заказа может быть несколько счетов, т.ч. событие оплаты есть только у них. Нам нужно OnSalePaymentEntitySaved.