mntId = (int)$this->config->get('payment_payanyway_account'); $this->integrityCode = (string)$this->config->get('payment_payanyway_integrity_code'); $this->server = (string)$this->config->get('payment_payanyway_server'); $this->vatRate = (string)$this->config->get('payment_payanyway_vat_rate'); $this->currency = $this->config->get('payment_payanyway_currency'); $this->pendingOrderStatusId = (int)$this->config->get('payment_payanyway_pending_order_status_id'); $this->successOrderStatusId = (int)$this->config->get('payment_payanyway_success_order_status_id'); $this->errorOrderStatusId = (int)$this->config->get('payment_payanyway_error_order_status_id'); $this->cmsModuleVersion = (string)$this->config->get('payment_payanyway_cms_module_version'); } private function validateOrder(): bool { $this->orderId = $this->getOrderIdFromTransactionId() ?? $this->getOrderIdFromSession(); if (null === $this->orderId) { return false; } $this->load->model('checkout/order'); $this->orderInfo = $this->model_checkout_order->getOrder($this->orderId); return ([] !== $this->orderInfo); } private string $transactionIdDelimiter = '|'; private function validateString(string $value, int $maxLength): string { $maxLength = max(0, $maxLength); $value = $this->sanitizeString($value); if (mb_strlen($value, 'UTF-8') <= $maxLength) { return $value; } $trimLength = max(0, $maxLength - 3); return mb_substr($value, 0, $trimLength, 'UTF-8') . ($maxLength > 3 ? '...' : ''); } private function sanitizeString(string $value): string { $decoded = html_entity_decode($value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); $cleaned = preg_replace('/[^\p{L}\p{N}\s.,()_№+-]/u', '', $decoded); $cleaned = str_replace(['&', '/', '\\', ';', '%', '#', '"', "'"], '', $cleaned); return trim(preg_replace('/\s+/', ' ', $cleaned)); } private function formatPrice(float $price): string { return number_format($price, 2, '.', ''); } private function getOrderIdFromTransactionId(): ?int { if (!isset($_REQUEST['MNT_TRANSACTION_ID'])) { return null; } $transactionIdData = explode($this->transactionIdDelimiter, $_REQUEST['MNT_TRANSACTION_ID'], 2); return isset($transactionIdData[0]) ? (int)$transactionIdData[0] : null; } private function getOrderIdFromSession(): ?int { return isset($this->session->data['order_id']) ? (int)$this->session->data['order_id'] : null; } private function createTransactionId(int $orderId): string { $date = (new \DateTimeImmutable())->format('YmdHis'); return $orderId . $this->transactionIdDelimiter . $date; } private function addOrderHistory(int $orderId, int $orderStatusId, string $comment): void { $this->load->model('checkout/order'); $this->model_checkout_order->addHistory($orderId, $orderStatusId, $comment); } }