PXG_2026_API/app/Services/PairingTokenService.php

33 lines
862 B
PHP

<?php
namespace App\Services;
use Illuminate\Support\Facades\Crypt;
class PairingTokenService
{
public function issue(int $registrationId): string
{
$ttl = config('pxg.pairing_token_ttl_minutes', 30);
$payload = [
'rid' => $registrationId,
'exp' => now()->addMinutes($ttl)->timestamp,
];
return Crypt::encryptString(json_encode($payload));
}
public function verify(string $token): ?int
{
try {
$json = Crypt::decryptString($token);
$payload = json_decode($json, true);
if (!is_array($payload)) return null;
if (($payload['exp'] ?? 0) < time()) return null;
$rid = (int) ($payload['rid'] ?? 0);
return $rid > 0 ? $rid : null;
} catch (\Throwable $e) {
return null;
}
}
}