$availOnly ]); if ($result['success']) { $accounts = []; $data = $result['data']; // 에러 코드 체크 (전체 응답 레벨) if (isset($data->BankAccountEx)) { // 단일 객체가 에러 코드인 경우 if (is_numeric($data->BankAccountEx) && $data->BankAccountEx < 0) { $errorCode = $data->BankAccountEx; $errorMsg = '계좌 목록 조회 실패: ' . $errorCode; // 상세 에러 메시지 매핑 if ($errorCode == -50214) { $errorMsg = '은행 로그인 실패 (-50214). 바로빌 사이트에서 계좌 비밀번호/인증서를 점검해주세요.'; } else if ($errorCode == -24005) { $errorMsg = '사용자 정보 불일치 (-24005). 사업자번호를 확인해주세요.'; } else if ($errorCode == -25001) { $errorMsg = '등록된 계좌가 없습니다 (-25001). 바로빌 사이트에서 계좌를 등록해주세요.'; } echo json_encode([ 'success' => false, 'error' => $errorMsg, 'error_code' => $errorCode ], JSON_UNESCAPED_UNICODE); return; } } // 실제 SOAP 응답 구조 확인: // GetBankAccountExResult -> BankAccount (단일 객체 또는 배열) // 또는 BankAccountEx (배열) - 다른 API 버전일 수 있음 $accountList = []; // 우선순위 1: BankAccount 확인 (실제 응답 구조) if (isset($data->BankAccount)) { if (is_array($data->BankAccount)) { $accountList = $data->BankAccount; } else if (is_object($data->BankAccount)) { // 단일 객체인 경우 배열로 변환 $accountList = [$data->BankAccount]; } } // 우선순위 2: BankAccountEx 배열 확인 (다른 API 버전) else if (isset($data->BankAccountEx)) { if (is_array($data->BankAccountEx)) { $accountList = $data->BankAccountEx; } else if (is_object($data->BankAccountEx)) { // 단일 객체인 경우 배열로 변환 $accountList = [$data->BankAccountEx]; } } foreach ($accountList as $acc) { // 객체가 아닌 경우 스킵 if (!is_object($acc)) { continue; } // 에러 코드 체크 (개별 계좌 레벨) if (isset($acc->BankAccountNum)) { // BankAccountNum이 음수인 경우 에러 코드 if (is_numeric($acc->BankAccountNum) && $acc->BankAccountNum < 0) { continue; } // BankAccountNum이 비어있는 경우도 스킵 if (empty($acc->BankAccountNum)) { continue; } } else { // BankAccountNum이 없는 경우도 스킵 continue; } // BankName으로 BankCode 추론 (응답에 BankCode가 없는 경우) $bankCode = $acc->BankCode ?? ''; if (empty($bankCode) && isset($acc->BankName)) { // BankName으로 BankCode 찾기 $bankName = $acc->BankName; $bankCodeMap = [ '기업은행' => '003', 'IBK기업은행' => '003', 'KB국민은행' => '004', '국민은행' => '004', '우리은행' => '020', '신한은행' => '088', '하나은행' => '081', 'NH농협은행' => '011', '농협은행' => '011' ]; $bankCode = $bankCodeMap[$bankName] ?? ''; } // UseState 처리: 없으면 기본값 1 (사용중)으로 설정 $useState = isset($acc->UseState) ? intval($acc->UseState) : 1; $accounts[] = [ 'bankAccountNum' => $acc->BankAccountNum ?? '', 'bankCode' => $bankCode, 'bankName' => getBankName($bankCode) ?: ($acc->BankName ?? ''), 'accountName' => $acc->AccountName ?? '', // 계좌 별칭/이름 'accountType' => $acc->AccountType ?? '', // 1:입출금, 2:예적금 'currency' => $acc->Currency ?? 'KRW', 'issueDate' => $acc->IssueDate ?? '', 'balance' => $acc->Balance ?? 0, 'status' => $useState // 1:사용, 0:중지, 2:해지 ]; } $response = [ 'success' => true, 'accounts' => $accounts, 'count' => count($accounts) ]; // 디버그 정보 추가 if (isset($result['debug'])) { $response['debug'] = $result['debug']; } echo json_encode($response, JSON_UNESCAPED_UNICODE); } else { echo json_encode([ 'success' => false, 'error' => $result['error'], 'error_code' => $result['error_code'] ?? null ], JSON_UNESCAPED_UNICODE); } } catch (Exception $e) { echo json_encode([ 'success' => false, 'error' => '서버 오류: ' . $e->getMessage() ], JSON_UNESCAPED_UNICODE); } /** * 은행 코드 -> 은행명 변환 */ function getBankName($code) { $banks = [ '002' => 'KDB산업은행', '003' => 'IBK기업은행', '004' => 'KB국민은행', '007' => '수협은행', '011' => 'NH농협은행', '012' => '지역농축협', '020' => '우리은행', '023' => 'SC제일은행', '027' => '한국씨티은행', '031' => '대구은행', '032' => '부산은행', '034' => '광주은행', '035' => '제주은행', '037' => '전북은행', '039' => '경남은행', '045' => '새마을금고', '048' => '신협', '050' => '저축은행', '064' => '산림조합', '071' => '우체국', '081' => '하나은행', '088' => '신한은행', '089' => 'K뱅크', '090' => '카카오뱅크', '092' => '토스뱅크' ]; return $banks[$code] ?? $code; } ?>