То есть получаю объект заказа по id заказа = 71 строчкой $order = Order::load(71);
Далее предположительно получаю коллекцию оплат строчкой $collection = $order->getPaymentCollection();
Если вызвать var_dump($collection); то PAY_SYSTEM_ID определяется равный 2, при этом находится в приватном свойстве. Конечно можно выполнить (array)($collection) чтобы получить объект в виде массива, но хотелось бы правильное решение средствами Bitrix, поэтому пожалуйста ответе каким методом добраться до PAY_SYSTEM_ID.
Мало ли это важно - описанное выше, это подзадача оплаты заказа через API.
То есть далее я планирую сделать примерно следующее
$service = \Bitrix\Sale\PaySystem\Manager::getObjectById(2);// Здесь передаётся Id который как раз и требуется определить, то есть PAY_SYSTEM_ID
$payment = \Bitrix\Sale\Payment::create($collection, $service);
$payment->setField('SUM', 1000);// Создаём оплату на 1000 рублей к примеру
$collection->addItem($payment);// Добавляем оплату к коллекции
__________________________________________________________________________________
Вопрос решен, считаю нужным добавить следующее:
__________________________________________________________________________________
По факту я не совсем корректно из API создавал сам заказ, а именно сумму оплаты необходимо было указывать ещё на стадии формирования заказа, в этом случаи не было необходимости и в моём вопросе, а именно ещё на этапе формирования заказа нужно было сделать следующее:
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();
$paySystemService = PaySystem\Manager::getObjectById(2);
$payment->setFields(array(
'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
'SUM' => ($cost + $deliveryCost)// !!!!!!!!!!! Именно этой строчки у меня не было, поэтому сумма оплаты была нулевая. То есть здесь указывается сумма оплаты, я указываю как сумма заказа с скидками плюс сумма доставки
));
А уже при проверке факта оплаты например от Яндекс кассы просто выполняется CSaleOrder::PayOrder($orderId, "Y"); Внимание! Метод согласно документации является устаревшим, но как сделать через Order я пока не понял
После использования данного метода появляется отметка "Да" в оплатах на против информации о оплате, а так же если суммы указанной в SUM достаточно для оплаты всего заказа - появляется информация что заказ оплачен в списке заказов, так же появляется в любом случаи зеленая индикация в заказе напротив метода заказа и оплаченная сумма.
Alams Stoyne, именно эту ссылку смотрел, более того именно с неё всё и начиналось.
Может быть ошибаюсь но именно в коде по ссылке нет ответа на вопрос.
Примерно так и реализовано.
Ещё может быть знаете, как уже после того как заказ оформить поменять статус о доставки на отгрузка разрешена.
То есть уже на этапе после того как яндекс касса присылает положительный ответ устанавливается факт оплаты, а ещё нужно отгрузку разрешить.
Факт оплаты пока сделал через CSaleOrder::PayOrder($orderId, "Y"); который является устаревший. Если знаете как это же сделать через класс Order было бы замечательно если бы этот момент я тоже поправил.
Alams Stoyne, на 5-ом этапе я не указал сумму к оплате. Изначально думал что если у заказа есть стоимость всех товаров то этого достаточно(а сумма товаров в заказе и так считалась).
$paymentCollection = $order->getPaymentCollection();
foreach ($paymentCollection as $payment) {
$sum = $payment->getSum(); // сумма к оплате
$isPaid = $payment->isPaid(); // true, если оплачена
$isReturned = $payment->isReturn(); // true, если возвращена
$ps = $payment->getPaySystem(); // платежная система (объект Sale\PaySystem\Service)
$psID = $payment->getPaymentSystemId(); // ID платежной системы
$psName = $payment->getPaymentSystemName(); // название платежной системы
$isInnerPs = $payment->isInner(); // true, если это оплата с внутреннего счета
}
Скажите пожалуйста, а вот например я нахожу нужный мне способ оплаты и устанавливаю сумму платежа которая по нему прошла:
foreach ($collection as $payment) {
$payment->setField('SUM', 1000);
}
Вопрос: парвильно ли я это делаю и если да то как потом сохранить? $order->save(); выдаёт ошибку и ругается на отсутствие BasketItem