Просмотров: 12364
Дата последнего изменения: 11.08.2020
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
3
4
5
Недоступно в лицензиях:
Старт, Стандарт
В уроке мы рассмотрим, как средствами API продукта разделить на части оплату в уже существующем заказе. Допустим, у нас есть заказ с идентификатором 21, а его документ оплаты имеет идентификатор 22:

Составим код, с помощью которого оплата будет разбита на 2 части.
- В первую очередь загружаем заказ из базы и получаем коллекцию оплат:
Bitrix\Main\Loader::includeModule('sale');
$order = \Bitrix\Sale\Order::load(21);
$paymentCollection = $order->getPaymentCollection();
- Затем из коллекции выбираем оплату, которую необходимо изменить (напомним, что у нас оплата имеет идентификатор 22):
$payment = $paymentCollection->getItemById(22);
- Сумму данной оплаты заменяем, например, на величину стоимости одной из позиций заказа (у нас это 1979 рублей):
$payment->setField('SUM', 1979);
- Добавляем новую оплату. Минимальный набор полей при создании оплаты - это платежная система (идентификатор и название платежной системы) и сумма. Для примера будем использовать платежную систему
Сбербанк
с идентификатором 7.
Создать объект оплаты можно двумя способами:
- передать объект платежной системы в параметре, из которого возьмется вся необходимая информация:
$service = \Bitrix\Sale\PaySystem\Manager::getObjectById(7);
$newPayment = $paymentCollection->createItem($service);
- либо установить необходимую информацию по платежной системе явно:
$newPayment = $paymentCollection->createItem();
$newPayment->setField('PAY_SYSTEM_ID',7);
$newPayment->setField('PAY_SYSTEM_NAME', "Сбербанк");
- Устанавливаем сумму новой оплаты:
$newPayment->setField('SUM', $order->getPrice() - 1979);
- Сохраняем заказ:
$result = $order->save();
Метод save() сохранит и заказ, и все связанные объекты.
После выполнения вышеуказанного кода через командную php-строку наш заказ будет иметь 2 оплаты:

Примечание: разделение оплаты на этапе создания заказа делается аналогично.