', "'", '"'], ' ', trim($value)); } public function createRequest(array $data, string $secureCode): string { $plain = (string)($data['account'] ?? '') . (string)($data['terminal'] ?? '') . (string)($data['backUrl'] ?? '') . (string)($data['order_number'] ?? '') . (string)($data['order_currency'] ?? '') . (string)($data['order_amount'] ?? '') . (string)($data['billing_firstName'] ?? '') . (string)($data['billing_lastName'] ?? '') . (string)($data['billing_email'] ?? '') . $secureCode; return hash('sha256', $plain); } public function createEmbeddedRequest(array $data, string $secureCode): string { $plain = (string)($data['account'] ?? '') . (string)($data['terminal'] ?? '') . (string)($data['order_number'] ?? '') . (string)($data['order_currency'] ?? '') . (string)($data['order_amount'] ?? '') . (string)($data['billing_firstName'] ?? '') . (string)($data['billing_lastName'] ?? '') . (string)($data['billing_email'] ?? '') . $secureCode; return hash('sha256', $plain); } public function verifyCreateResponse(array $data, string $secureCode): bool { return $this->verifyFields($data, self::CREATE_RESPONSE_FIELDS, $secureCode); } public function verifyCallback(array $data, string $secureCode): bool { $provided = strtolower(trim((string)($data['signValue'] ?? ''))); if (!preg_match('/^[a-f0-9]{64}$/', $provided)) { return false; } return hash_equals($this->createCallback($data, $secureCode), $provided); } public function createCallback(array $data, string $secureCode): string { return $this->createFields($data, self::CALLBACK_FIELDS, $secureCode); } private function verifyFields(array $data, array $fields, string $secureCode): bool { $provided = strtolower(trim((string)($data['signValue'] ?? ''))); if (!preg_match('/^[a-f0-9]{64}$/', $provided)) { return false; } return hash_equals($this->createFields($data, $fields, $secureCode), $provided); } private function createFields(array $data, array $fields, string $secureCode): string { $plain = ''; foreach ($fields as $field) { $plain .= (string)($data[$field] ?? ''); } return hash('sha256', $plain . $secureCode); } }