From a8e81354fc92cfceed5ce4826309e0c94b7019ad Mon Sep 17 00:00:00 2001 From: pro Date: Fri, 23 Jan 2026 13:39:38 +0900 Subject: [PATCH] =?UTF-8?q?debug:=EC=B9=B4=EB=93=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20=EC=A1=B0=ED=9A=8C=20=EB=94=94=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - API 호출 파라미터 로깅 - SOAP 응답 데이터 구조 로깅 - 에러 코드 및 파싱 결과 로깅 Co-Authored-By: Claude Opus 4.5 --- .../Controllers/Barobill/EcardController.php | 85 ++++++++++++++++++- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Barobill/EcardController.php b/app/Http/Controllers/Barobill/EcardController.php index cf1b80e1..8be6a5a8 100644 --- a/app/Http/Controllers/Barobill/EcardController.php +++ b/app/Http/Controllers/Barobill/EcardController.php @@ -219,6 +219,17 @@ public function transactions(Request $request): JsonResponse $barobillMember = BarobillMember::where('tenant_id', $tenantId)->first(); $userId = $barobillMember?->barobill_id ?? ''; + // 디버그 로그 + Log::info('[ECard] 조회 요청', [ + 'tenantId' => $tenantId, + 'userId' => $userId, + 'startDate' => $startDate, + 'endDate' => $endDate, + 'cardNum' => $cardNum, + 'page' => $page, + 'limit' => $limit, + ]); + // DB에서 저장된 계정과목 데이터 조회 $savedData = CardTransaction::getByDateRange($tenantId, $startDate, $endDate, $cardNum ?: null); @@ -228,7 +239,7 @@ public function transactions(Request $request): JsonResponse } // 단일 카드 조회 - $result = $this->callSoap('GetPeriodCardApprovalLog', [ + $params = [ 'ID' => $userId, 'CardNum' => $cardNum, 'StartDate' => $startDate, @@ -236,6 +247,17 @@ public function transactions(Request $request): JsonResponse 'CountPerPage' => $limit, 'CurrentPage' => $page, 'OrderDirection' => 2 // 2:내림차순 + ]; + + Log::info('[ECard] GetPeriodCardApprovalLog 호출', $params); + + $result = $this->callSoap('GetPeriodCardApprovalLog', $params); + + Log::info('[ECard] GetPeriodCardApprovalLog 응답', [ + 'success' => $result['success'], + 'error' => $result['error'] ?? null, + 'error_code' => $result['error_code'] ?? null, + 'data_keys' => $result['success'] && isset($result['data']) ? (is_object($result['data']) ? get_object_vars($result['data']) : 'not_object') : null, ]); if (!$result['success']) { @@ -250,6 +272,8 @@ public function transactions(Request $request): JsonResponse // 에러 코드 체크 $errorCode = $this->checkErrorCode($resultData); + Log::info('[ECard] 에러 코드 체크', ['errorCode' => $errorCode]); + if ($errorCode && !in_array($errorCode, [-24005, -24001])) { return response()->json([ 'success' => false, @@ -260,6 +284,7 @@ public function transactions(Request $request): JsonResponse // 데이터가 없는 경우 if ($errorCode && in_array($errorCode, [-24005, -24001])) { + Log::info('[ECard] 데이터 없음 (에러코드로 판단)'); return response()->json([ 'success' => true, 'data' => [ @@ -273,6 +298,11 @@ public function transactions(Request $request): JsonResponse // 데이터 파싱 (저장된 계정과목 병합) $logs = $this->parseTransactionLogs($resultData, $savedData); + Log::info('[ECard] 파싱 결과', [ + 'logs_count' => count($logs['logs']), + 'summary' => $logs['summary'], + ]); + return response()->json([ 'success' => true, 'data' => [ @@ -287,7 +317,9 @@ public function transactions(Request $request): JsonResponse ] ]); } catch (\Throwable $e) { - Log::error('카드 사용내역 조회 오류: ' . $e->getMessage()); + Log::error('카드 사용내역 조회 오류: ' . $e->getMessage(), [ + 'trace' => $e->getTraceAsString() + ]); return response()->json([ 'success' => false, 'error' => '서버 오류: ' . $e->getMessage() @@ -300,9 +332,20 @@ public function transactions(Request $request): JsonResponse */ private function getAllCardsTransactions(string $userId, string $startDate, string $endDate, int $page, int $limit, $savedData = null): JsonResponse { + Log::info('[ECard] 전체 카드 조회 시작', [ + 'userId' => $userId, + 'startDate' => $startDate, + 'endDate' => $endDate, + ]); + // 먼저 카드 목록 조회 (GetCardEx2 사용) $cardResult = $this->callSoap('GetCardEx2', ['AvailOnly' => 0]); + Log::info('[ECard] GetCardEx2 응답', [ + 'success' => $cardResult['success'], + 'error' => $cardResult['error'] ?? null, + ]); + if (!$cardResult['success']) { return response()->json([ 'success' => false, @@ -316,6 +359,15 @@ private function getAllCardsTransactions(string $userId, string $startDate, stri $cardList = is_array($data->CardEx) ? $data->CardEx : [$data->CardEx]; } + Log::info('[ECard] 카드 목록', [ + 'count' => count($cardList), + 'cards' => array_map(fn($c) => [ + 'CardNum' => $c->CardNum ?? 'N/A', + 'Alias' => $c->Alias ?? 'N/A', + 'Status' => $c->Status ?? 'N/A', + ], $cardList), + ]); + $allLogs = []; $totalAmount = 0; $approvalCount = 0; @@ -327,7 +379,7 @@ private function getAllCardsTransactions(string $userId, string $startDate, stri $cardNum = $card->CardNum ?? ''; if (empty($cardNum) || (is_numeric($cardNum) && $cardNum < 0)) continue; - $cardResult = $this->callSoap('GetPeriodCardApprovalLog', [ + $params = [ 'ID' => $userId, 'CardNum' => $cardNum, 'StartDate' => $startDate, @@ -335,14 +387,41 @@ private function getAllCardsTransactions(string $userId, string $startDate, stri 'CountPerPage' => 1000, 'CurrentPage' => 1, 'OrderDirection' => 2 + ]; + + Log::info('[ECard] 카드별 사용내역 조회', ['cardNum' => $cardNum, 'params' => $params]); + + $cardResult = $this->callSoap('GetPeriodCardApprovalLog', $params); + + Log::info('[ECard] 카드별 응답', [ + 'cardNum' => $cardNum, + 'success' => $cardResult['success'], + 'error' => $cardResult['error'] ?? null, + 'data_type' => isset($cardResult['data']) ? gettype($cardResult['data']) : 'null', + 'data_props' => isset($cardResult['data']) && is_object($cardResult['data']) + ? array_keys(get_object_vars($cardResult['data'])) + : null, ]); if ($cardResult['success']) { $cardData = $cardResult['data']; $errorCode = $this->checkErrorCode($cardData); + Log::info('[ECard] 카드별 에러코드', [ + 'cardNum' => $cardNum, + 'errorCode' => $errorCode, + 'CurrentPage' => $cardData->CurrentPage ?? 'N/A', + 'MaxIndex' => $cardData->MaxIndex ?? 'N/A', + 'hasCardLogList' => isset($cardData->CardLogList), + 'hasCardApprovalLog' => isset($cardData->CardLogList->CardApprovalLog ?? null), + ]); + if (!$errorCode || in_array($errorCode, [-24005, -24001])) { $parsed = $this->parseTransactionLogs($cardData, $savedData); + Log::info('[ECard] 카드별 파싱 결과', [ + 'cardNum' => $cardNum, + 'logs_count' => count($parsed['logs']), + ]); foreach ($parsed['logs'] as $log) { $log['cardBrand'] = $this->getCardCompanyName($card->CardCompany ?? ''); $allLogs[] = $log;