protected function updatePaymentStatusAction() { global $USER; if (!isset($this->request['orderId']) || intval($this->request['orderId']) <= 0) { throw new ArgumentNullException("orderId"); } if (!isset($this->request['paymentId']) || intval($this->request['paymentId']) <= 0) { throw new ArgumentNullException("paymentId"); } $fields = array(); $orderStatusId = ''; /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($this->request['orderId']); /** @var \Bitrix\Sale\Payment $payment */ $payment = $order->getPaymentCollection()->getItemById($this->request['paymentId']); if ($this->request['method'] == 'save') { if ($payment->getField('IS_RETURN') == 'Y') { $res = $payment->setReturn('N'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } else { $res = $payment->setPaid('Y'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } foreach ($this->request['data'] as $key => $value) { $newKey = substr($key, 0, strripos($key, '_')); if (strpos($newKey, 'PAY_VOUCHER') !== false) { $fields[$newKey] = $value; } if ($newKey == 'ORDER_STATUS_ID') { $orderStatusId = $value; } } $fields['PAY_VOUCHER_DATE'] = new \Bitrix\Main\Type\Date($fields['PAY_VOUCHER_DATE']); } else { foreach ($this->request['data'] as $key => $value) { $newKey = substr($key, 0, strripos($key, '_')); if (strpos($newKey, 'PAY_RETURN') !== false) { $fields[$newKey] = $value; } } if (isset($fields['PAY_RETURN_OPERATION_ID']) && $fields['PAY_RETURN_OPERATION_ID'] == 'RETURN') { $res = $payment->setReturn('Y'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } unset($fields['PAY_RETURN_OPERATION_ID']); } else { $res = $payment->setPaid('N'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } $fields['PAY_RETURN_DATE'] = new \Bitrix\Main\Type\Date($fields['PAY_RETURN_DATE']); } $saveResult = $payment->setFields($fields); if ($saveResult->isSuccess()) { if (!empty($orderStatusId)) { if ($USER && $USER->isAuthorized()) { $statusesList = Sale\OrderStatus::getAllowedUserStatuses($USER->getID(), $order->getField('STATUS_ID')); } else { $statusesList = Sale\OrderStatus::getAllStatuses(); } if ($order->getField('STATUS_ID') != $orderStatusId && array_key_exists($orderStatusId, $statusesList)) { $res = $order->setField('STATUS_ID', $orderStatusId); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); return; } } } $result = $order->save(); if ($result->isSuccess()) { $preparedData = \Bitrix\Sale\Helpers\Admin\Blocks\OrderFinanceInfo::prepareData($order); $preparedData["PAYMENT_PAID_" . $payment->getId()] = $payment->isPaid() ? "Y" : "N"; $this->addResultData("RESULT", $preparedData); } else { $this->addResultError(join("\n", $result->getErrorMessages())); } } else { $this->addResultError(join("\n", $saveResult->getErrorMessages())); } }