Подскажите пожалуйста, в чем проблема. Не ставится флаг оплаты заказа в админке при использовании старого и нового апи (CSaleOrder::PayOrder($id, "Y", false) и $payment->setPaid("Y")). Самое интересное, что оплаты фиксируются, т.е. их статусы меняются на Оплачено, но флаг у заказа не меняется. Может кто подсказать, в чем дело?
Насколько я знаю, $paymentCollection это объект спец. типа, который состоит из множества объектов оплат. Вы оплатили одну из них и похоже она скорее всего системная. Попробуйте пройтись циклом и "оплатить все", а уже потом сохранить заказ.
Столкнулся с похожей проблемой - перестал работать метод CSaleOrder::Update в части проставления признака оплаты и номера транзакции после того, как добавил дополнительный метод оплаты (см. https://dev.1c-bitrix.ru/community/webdev/user/72708/blog/27985/). До этого всё работало исправно.
Специфика задачи - обработчик оплаты картой, нужно при получении от банка информации об оплате проставлять оплату заказу и сохранять номер транзакции (чтобы потом можно было сделать возврат) Проблему решил следующим образом используя D7
Код
// Получаем заказ по номеру
/* @var Bitrix\Sale\Order $order */
$order = Sale\Order::load($orderID);
//Оплаты
$paymentCollection = $order->getPaymentCollection();
//Оплата картой
$obCardPayment = null;
//Проход по всем оплатам для поиска оплаты картой
foreach ($paymentCollection as $payment) {
//Проверяем, является ли оплатой картой
if ($payment->getPaymentSystemId() == PAYMENT_CARD) {
//Выбираем первую ПС картой для оплаты
$obCardPayment = $payment;
break;
}
}
//Если нашли ли оплату картой
if ($obCardPayment !== null) {
//обновляем заказ
//Подтверждаем оплату
$obCardPayment->setPaid("Y");
$obCardPayment->setField('PAY_VOUCHER_NUM', $invoice_number);
$obCardPayment->setField('PAY_VOUCHER_DATE', new \Bitrix\Main\Type\DateTime());//date("d.m.Y"));
//Обновляем заказ
$order->save();
При этом общий признак оплаты заказа устанавливается сам автоматически, без каких-либо дополнительных функций.
Разработка сайтов, реклама в Яндекс.Директ, Google.Adwords