Здравствуйте! Пишу API фиксирующее факт поступления оплаты от Яндекс-кассы в bitrix
Нашёл Вот такой метод CSaleOrder::PayOrder($orderId, "Y"); - он рабочий, при этом: 1)в документации написано что он устаревеший; 2) через него не смотря на то что факт оплаты в админке bitrix отмечается, не указывается оплаченная сумма. То есть появляется зелёная индикация оплаты, но написано что оплачено 0 рублей.
Пробую сделать то же самое через Order, сейчас имею примерно следующее:
$order = Order::load($orderId);//$orderId - это номер закааз $collection = $order->getPaymentCollection();// Получаем коллекцию по оплатам foreach ($collection as $payment) {// Перебираем коллекцию в цикле $payment->setField('SUM', 1000);// Для искомой оплаты устанавливаем сумму которую оплатил клиент(в этом моменте я не уверен, возможно логика не такая) }
Далее по идее заказ нужно сохранить, но при вызове $order->save(); появляется ошибка, ругается на BastekItem not found
Верная ли логика? Искомый результат, чтобы: 1)в оплатах появилась оплата с корректной суммой; 2) статус заказа был - оплачено; 3) чтобы в заказе рядом с статусом оплачено выводилась корректная оплаченная сумма.
Вопрос снят. Сумму для оплаты в способе оплаты нужно указывать в момент создания заказа. Сумма заказа или доставки указываемая отдельно в данном случаи не учитывается.
То есть при создании заказа уже указывается: $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 достаточно для оплаты заказа появляется Оплачен(так же в списке заказов), а так же в любом случаи зелёная индикация статуса оплачен у метода оплаты и оплаченная сумма(та которая в SUM).
Моё резюме и мои контакты на SuperJob -> перейти Верефицированный WMID 274708912937 -> проверить
$paymentCollection = $order->getPaymentCollection(); $onePaym ent = $paymentCollection[0]; // 0 если оплата у заказа единственная, если нет, через foreach перебираем и, например, по $psID = $payment->getPaymentSystemId(); находим нужную $onePayment->setPaid("N"); // отмена оплаты $onePayment->setPaid("Y"); // оплата