Files
2025-08-02 16:30:27 +02:00

75 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\AgeVerifyBundle\Utils;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Symfony\Contracts\Service\Attribute\Required;
class AdultoUtil
{
private const API_URL = 'https://api.result.adulto.cz';
private const REQUIRED_AGE = 18;
#[Required]
public AgeVerifyUtil $ageVerifyUtil;
#[Required]
public LoggerInterface $logger;
public function checkAdultoUid(string $adultoUid = ''): array
{
// na lokálu nechci ověřovat přes Adulto protože na to nemaj žádnej sandbox
if (isLocalDevelopment()) {
return ['success' => true, 'data' => 'Verification skipped in local development.'];
}
if (empty($adultoUid)) {
return ['success' => false, 'message' => 'Váš věk nebyl ověřen.'];
}
$klic = \Settings::getDefault()['age_verify']['adulto']['private_key'] ?? '';
$api_url = self::API_URL.'/?secret='.$klic.'&response='.$adultoUid;
// Volání API
$response = file_get_contents($api_url);
// $response = '{"adultocz-verify-id":"2024378270","adultocz-verify-uid":"454686ff2e5b6df020ccbc9242497aa587201319674d","adultocz-visit-cookie":"1548674d-79a7-4edf-9c48-3b25893c348c-1733484546544","adultocz-visit-time":"2024-12-06 12:29:06","adultocz-verify-time":"2024-12-06 12:32:40","adultocz-verify-method":"bankid","adultocz-verify-status":"true","adultocz-verify-age":"18","adultocz-verify-adult":"true"}';
$this->logger->log(LogLevel::INFO, $response);
// Ověření API komunikace
if ($response === false) {
return ['success' => false, 'message' => 'Chyba při komunikaci s Adulto.'];
}
// JSON odpověď API
$adultocz = json_decode($response);
// Podmínka pro úspěšné ověření
if (
$adultocz // Existuje JSON odpověď
&& isset($adultocz->{'adultocz-verify-adult'})
&& $adultocz->{'adultocz-verify-adult'} === 'true'
&& isset($adultocz->{'adultocz-verify-age'})
&& $adultocz->{'adultocz-verify-age'} == self::REQUIRED_AGE
) {
$this->ageVerifyUtil->setVerificationData('Y', 'adulto', data: $response);
// Smazání cookie pro zapomenutí ověření
setcookie('adultocz_local', '', time() - 3600, '/', '', true, true);
return ['success' => true, 'data' => $adultocz];
} elseif ($adultocz
&& isset($adultocz->{'adultocz-verify-age'})
&& $adultocz->{'adultocz-verify-age'} != self::REQUIRED_AGE
) {
// Ověřený věk není dostatečný
return ['success' => false, 'message' => 'Nemůžeme prodávat osobám mladším '.self::REQUIRED_AGE.' let.'];
} else {
// Ověřený věk není dostatečný
return ['success' => false, 'message' => 'Neplatná odpověď při komunikaci s API.'];
}
}
}