createMock(LoggerInterface::class); $verifier = new AxeptaSignatureVerifier($config, $logger); $timestamp = '1782229303'; $signatureHeader = 'v1=3E954907AB5C373D2D98AD3F702CD63819B9735C1C98D23058050FEDE6FA6844'; $base64Payload = 'eyJtZXJjaGFudElkIjogIkJOUF9ERU1PX01JRCIsInBheUlkIjogImEyZTZiMTg5NmUwMzRkNDhhYzU0MDhjYjAzZmE2OWY0IiwidHJhbnNJZCI6ICJRN31DbEouVm8lR1ZBY3dOR0wlKWZQKylJdSVoNX1mNik4fCNnQ2dBRUoyNFF2RjZfWSNeaUo6diZsdDt0PVBBY2Y9IiwieGlkIjogImMyZGM1MzliMjVkNzRhYjRhYzk3NzA0MmE3MjkyNWQxIiwicmVmTnIiOiAiNmpveWEwR1JtMnAyIiwic3RhdHVzIjogIkZBSUxFRCIsInJlc3BvbnNlQ29kZSI6ICIyMDE0MDAwMiIsInJlc3BvbnNlRGVzY3JpcHRpb24iOiAiUGFyYW0gdG9vIGxvbmc6IHRyYW5zaWQiLCJhbW91bnQiOiB7InZhbHVlIjogNDAwLCJjdXJyZW5jeSI6ICJFVVIifSwicGF5bWVudE1ldGhvZHMiOiB7InR5cGUiOiAiQ0FSRCJ9LCJjcmVhdGlvbkRhdGUiOiAiMjAyNi0wNi0yM1QxNTo0MTo0M1oiLCJjaGFubmVsIjogIkVDT00ifQ=='; $rawPayload = base64_decode($base64Payload); Carbon::setTestNow(Carbon::createFromTimestampUTC((int) $timestamp)); // WHEN $isValid = $verifier->verify('v1', $signatureHeader, $timestamp, $rawPayload); // THEN $this->assertTrue($isValid); Carbon::setTestNow(); } public function test_cannot_verify_with_expired_timestamp(): void { // GIVEN $secret = '6Gp_A!8f)3zZ9K]gb7S?2*tN(yH54[wB'; $config = new AxeptaConfig('url', 'm_id', 'key', $secret, []); $logger = $this->createMock(LoggerInterface::class); $verifier = new AxeptaSignatureVerifier($config, $logger); // NOTE: 10 Minutes later Carbon::setTestNow(Carbon::createFromTimestampUTC(1782222184 + 600)); $timestamp = '1782222184'; $payload = '{"status":"ok"}'; $validHash = hash_hmac('sha256', "{$timestamp}.{$payload}", $secret); // WHEN $isValid = $verifier->verify('v1', "v1={$validHash}", $timestamp, $payload); // THEN $this->assertFalse($isValid); Carbon::setTestNow(); } public function test_cannot_verify_invalid_version(): void { // GIVEN $config = new AxeptaConfig('url', 'm_id', 'key', 'secret', []); $verifier = new AxeptaSignatureVerifier($config, $this->createMock(LoggerInterface::class)); // WHEN $isValid = $verifier->verify('v2', 'v1=hash', '123', '{}'); // THEN $this->assertFalse($isValid); } }