diff --git a/src/main/java/com/example/egobook_be/domain/ads/controller/AdsControllerDocs.java b/src/main/java/com/example/egobook_be/domain/ads/controller/AdsControllerDocs.java index 01a519d..e6db293 100644 --- a/src/main/java/com/example/egobook_be/domain/ads/controller/AdsControllerDocs.java +++ b/src/main/java/com/example/egobook_be/domain/ads/controller/AdsControllerDocs.java @@ -56,16 +56,16 @@ public interface AdsControllerDocs { ResponseEntity callback( @Parameter(hidden = true) HttpServletRequest request, // 원본 쿼리 스트링 추출용 (서명 검증에 필수임) - @Parameter(description = "AdMob에서 생성한 SSV 콜백 서명 값", required = true, example = "TEST_PASS") + @Parameter(description = "AdMob에서 생성한 SSV 콜백 서명 값", required = false, example = "TEST_PASS") @RequestParam("signature") String signature, - @Parameter(description = "서명 검증에 사용할 키 ID", required = true, example = "test_key_123") + @Parameter(description = "서명 검증에 사용할 키 ID", required = false, example = "test_key_123") @RequestParam("key_id") String keyId, - @Parameter(description = "광고 시청 고유 트랜잭션 ID (중복 방지 키)", required = true, example = "TX_TEST_001") + @Parameter(description = "광고 시청 고유 트랜잭션 ID (중복 방지 키)", required = false, example = "TX_TEST_001") @RequestParam("transaction_id") String transactionId, - @Parameter(description = "사용자 식별자 (앱에서 설정한 값)", required = true, example = "1") + @Parameter(description = "사용자 식별자 (앱에서 설정한 값)", required = false, example = "1") @RequestParam("user_id") String userId, @Parameter(description = "지급할 보상 아이템 타입 (INK or WEEK_COUNSEL)", example = "INK") diff --git a/src/main/java/com/example/egobook_be/domain/ads/service/AdsService.java b/src/main/java/com/example/egobook_be/domain/ads/service/AdsService.java index b0e1ea5..472ac81 100644 --- a/src/main/java/com/example/egobook_be/domain/ads/service/AdsService.java +++ b/src/main/java/com/example/egobook_be/domain/ads/service/AdsService.java @@ -54,12 +54,15 @@ public void adMobCallbackInk( * - Swagger Test를 위해, 값이 "TEST_PASS"가 들어오면 검증을 패스하도록 설정한다. */ if ("TEST_PASS".equals(signature)) { - log.info("🚧 [Swagger Test] 서명 검증을 건너뜁니다. (Transaction: {})", transactionId); + log.info("🚧 [Swagger Test] Pass verification."); } else { - // [REAL MODE] 실제 운영 로직 (서명 검증 수행) - long keyId = Long.parseLong(keyIdStr); - if (!adMobVerifier.verify(queryString, signature, keyId)) { - throw new SecurityException("AdMob Signature Failed"); + try { + long keyId = Long.parseLong(keyIdStr); + if (!adMobVerifier.verify(queryString, signature, keyId)) { + throw new SecurityException("AdMob Signature Failed"); + } + } catch (NumberFormatException e) { + throw new SecurityException("Invalid Key ID format"); } }