setLabel($username); $totp->setIssuer(self::APLIKACE); $qrContent = $totp->getProvisioningUri(); $writer = new PngWriter(); // VE VERZI 6.x POUŽÍVÁME NEW + METODY (Fluent interface stále funguje) $qrCode = new QrCode( data: $qrContent, encoding: new Encoding('UTF-8'), errorCorrectionLevel: ErrorCorrectionLevel::High, size: 300, margin: 10, foregroundColor: new Color(0, 0, 0), backgroundColor: new Color(255, 255, 255) ); // Pokud chceš přidat label (text pod kód) $label = new Label( text: 'Naskenujte v aplikaci', textColor: new Color(100, 100, 100), alignment: LabelAlignment::Center // Zarovnání na střed ); // Vygenerování výsledku $result = $writer->write($qrCode, null, $label); return $result->getDataUri(); } public function verifyCode(string $secret, string $code): bool { return TOTP::create($secret)->verify($code); } public function generateSecret(): string { // Vygeneruje bezpečný náhodný Base32 secret (standard pro TOTP) return TOTP::create()->getSecret(); } public function getProvisioningUri(string $secret, string $username): string { $totp = TOTP::create($secret); $totp->setLabel($username); $totp->setIssuer(self::APLIKACE); // Název, který uživatel uvidí v aplikaci return $totp->getProvisioningUri(); } }