konratnox
4/11/2016 - 3:09 PM

Частичная оплата, разделение оплаты на 2 при оформлении заказа в битрикс 15+

Частичная оплата, разделение оплаты на 2 при оформлении заказа в битрикс 15+

Реализация частичной оплаты в битрикс 15+

Краткое описание


Вешаем обработчик на оформление заказа, когда он уже создан и сохранен, получаем параметры

события, получаем коллекцию платежек, определяем сумму заказа, делим как нам необходимо,

проверяем, что 1 платежка только, далее по объекту платежки получаем ид платежной системы,

по ид получаем заготовку для второй платежки, обновляем сумму первой платежки

создаем вторую платежку, устанавливаем сумму платежки, добавляем в колекцию платежек, сохраняем

<?
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderEntitySaved',
    'myFunction'
);

function myFunction(\Bitrix\Main\Event $event)
{
    /** @var Order $order */
    $order = $event->getParameter("ENTITY");

	$pays = $order->getPaymentCollection();
	$orderPrice = $order->getPrice();

	$prePaidhalfPrice = ceil($orderPrice / 2);
	$secondHalf = $orderPrice - $prePaidhalfPrice;

	if(count($pays) == 1) {

		foreach ($pays as $key => $pay) {

			$paySystemId = $pay->getPaymentSystemId();
			$paySystem = \Bitrix\Sale\PaySystem\Manager::getObjectById($paySystemId);

			$pay->setField('SUM', $prePaidhalfPrice);

		}
		if(in_array($paySystemId, array('1', '2'))) {

			$secondPayment = Bitrix\Sale\Payment::create($pays, $paySystem);
			$secondPayment->setField('SUM', $secondHalf);

			$pays->addItem($secondPayment);
			$pays->save();
		}

	}

}
?>