Files
sam-sales/eaccount/api/debug_accounts.php
aweso 50308dd340 피플라이프 기업분석 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 09:33:23 +09:00

274 lines
10 KiB
PHP

<?php
/**
* 계좌 정보 디버깅 API
* 로컬 DB와 바로빌 API에서 계좌 정보를 조회하는 과정을 상세히 로깅합니다.
*/
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../../lib/DotEnv.php';
(new DotEnv(__DIR__ . '/../../.env'))->load();
require_once('barobill_account_config.php');
require_once(getenv('DOCUMENT_ROOT') . '/session.php');
require_once(getenv('DOCUMENT_ROOT') . '/lib/mydb.php');
$debug = [
'step' => [],
'tenant_info' => [],
'local_db' => [],
'barobill_api' => [],
'final_result' => []
];
try {
// Step 1: 세션에서 테넌트 ID 확인
$selectedTenantId = $_SESSION['eaccount_tenant_id'] ?? null;
$debug['step'][] = '1. 세션에서 테넌트 ID 확인';
$debug['tenant_info']['session_tenant_id'] = $selectedTenantId;
// Step 2: DB에서 테넌트 정보 확인
$pdo = db_connect();
if (!$pdo) {
throw new Exception("Database connection failed.");
}
$debug['step'][] = '2. DB 연결 성공';
// 테넌트 정보 조회
if ($selectedTenantId) {
$sql = "SELECT id, company_name, corp_num, barobill_user_id
FROM {$DB}.barobill_companies
WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$selectedTenantId]);
$tenant = $stmt->fetch(PDO::FETCH_ASSOC);
$debug['tenant_info']['db_query'] = $sql;
$debug['tenant_info']['db_params'] = [$selectedTenantId];
$debug['tenant_info']['tenant_found'] = $tenant ? true : false;
$debug['tenant_info']['tenant_data'] = $tenant;
if ($tenant) {
$debug['step'][] = '3. 테넌트 정보 조회 성공: ' . $tenant['company_name'];
} else {
$debug['step'][] = '3. 테넌트 정보 조회 실패: ID ' . $selectedTenantId . '를 찾을 수 없음';
}
} else {
// 기본값으로 주일기업 찾기
$sql = "SELECT id, company_name, corp_num, barobill_user_id
FROM {$DB}.barobill_companies
WHERE company_name LIKE '%주일기업%'
OR company_name LIKE '%주일%'
OR barobill_user_id = 'juil5130'
ORDER BY id ASC
LIMIT 1";
$stmt = $pdo->query($sql);
$tenant = $stmt->fetch(PDO::FETCH_ASSOC);
$debug['tenant_info']['default_search_query'] = $sql;
$debug['tenant_info']['tenant_found'] = $tenant ? true : false;
$debug['tenant_info']['tenant_data'] = $tenant;
if ($tenant) {
$selectedTenantId = $tenant['id'];
$debug['step'][] = '3. 기본 테넌트(주일기업) 찾기 성공: ' . $tenant['company_name'];
} else {
$debug['step'][] = '3. 기본 테넌트(주일기업) 찾기 실패';
}
}
// Step 3: 로컬 DB에서 계좌 정보 조회
if ($selectedTenantId) {
$debug['step'][] = '4. 로컬 DB 계좌 정보 조회 시작';
$accountSql = "SELECT id, company_id, bank_code, account_num, account_pwd
FROM {$DB}.company_accounts
WHERE company_id = ?
ORDER BY id DESC";
$accountStmt = $pdo->prepare($accountSql);
$accountStmt->execute([$selectedTenantId]);
$localAccounts = $accountStmt->fetchAll(PDO::FETCH_ASSOC);
$debug['local_db']['query'] = $accountSql;
$debug['local_db']['params'] = [$selectedTenantId];
$debug['local_db']['count'] = count($localAccounts);
$debug['local_db']['accounts'] = $localAccounts;
$debug['step'][] = '4. 로컬 DB 계좌 정보 조회 완료: ' . count($localAccounts) . '개';
// 모든 회사의 계좌 정보도 확인 (디버깅용)
$allAccountsSql = "SELECT ca.*, c.company_name, c.barobill_user_id
FROM {$DB}.company_accounts ca
LEFT JOIN {$DB}.barobill_companies c ON ca.company_id = c.id
ORDER BY ca.id DESC
LIMIT 20";
$allAccountsStmt = $pdo->query($allAccountsSql);
$allAccounts = $allAccountsStmt->fetchAll(PDO::FETCH_ASSOC);
$debug['local_db']['all_companies_accounts'] = $allAccounts;
$debug['local_db']['all_companies_accounts_count'] = count($allAccounts);
} else {
$debug['local_db']['error'] = '테넌트 ID가 없어서 로컬 DB 조회 불가';
}
// Step 4: 바로빌 API 설정 확인
global $barobillUserId, $barobillCorpNum, $barobillCertKey, $isTestMode;
$debug['barobill_api']['config'] = [
'user_id' => $barobillUserId,
'corp_num' => $barobillCorpNum,
'cert_key_length' => strlen($barobillCertKey),
'cert_key_preview' => !empty($barobillCertKey) ? substr($barobillCertKey, 0, 8) . '...' . substr($barobillCertKey, -4) : 'NOT SET',
'test_mode' => $isTestMode
];
$debug['step'][] = '5. 바로빌 API 설정 확인 완료';
// Step 5: 바로빌 API 호출 시도
$debug['step'][] = '6. 바로빌 API 호출 시작';
$result = callBarobillAccountSOAP('GetBankAccountEx', [
'AvailOnly' => 0
]);
$debug['barobill_api']['success'] = $result['success'];
$debug['barobill_api']['error'] = $result['error'] ?? null;
$debug['barobill_api']['error_code'] = $result['error_code'] ?? null;
if ($result['success']) {
$data = $result['data'];
$accountList = [];
if (isset($data->BankAccountEx)) {
if (is_array($data->BankAccountEx)) {
$accountList = $data->BankAccountEx;
} else {
$accountList = [$data->BankAccountEx];
}
}
$barobillAccounts = [];
foreach ($accountList as $acc) {
if (isset($acc->BankAccountNum) && is_numeric($acc->BankAccountNum) && $acc->BankAccountNum < 0) {
continue;
}
$barobillAccounts[] = [
'bankAccountNum' => $acc->BankAccountNum ?? '',
'bankCode' => $acc->BankCode ?? '',
'bankName' => getBankName($acc->BankCode ?? ''),
'accountName' => $acc->AccountName ?? '',
];
}
$debug['barobill_api']['accounts'] = $barobillAccounts;
$debug['barobill_api']['count'] = count($barobillAccounts);
$debug['step'][] = '6. 바로빌 API 호출 성공: ' . count($barobillAccounts) . '개 계좌';
} else {
$debug['barobill_api']['accounts'] = [];
$debug['barobill_api']['count'] = 0;
$debug['step'][] = '6. 바로빌 API 호출 실패: ' . ($result['error'] ?? '알 수 없는 오류');
}
// Step 6: 최종 결과 통합
$allAccounts = [];
// 로컬 DB 계좌 추가
if (isset($localAccounts)) {
foreach ($localAccounts as $localAcc) {
$allAccounts[] = [
'source' => 'local_db',
'bankAccountNum' => $localAcc['account_num'],
'bankCode' => $localAcc['bank_code'],
'bankName' => getBankName($localAcc['bank_code']),
];
}
}
// 바로빌 API 계좌 추가
if (isset($barobillAccounts)) {
foreach ($barobillAccounts as $barobillAcc) {
$exists = false;
foreach ($allAccounts as &$existingAcc) {
if ($existingAcc['bankAccountNum'] === $barobillAcc['bankAccountNum'] &&
$existingAcc['source'] === 'local_db') {
$existingAcc['source'] = 'both';
$exists = true;
break;
}
}
if (!$exists) {
$allAccounts[] = array_merge($barobillAcc, ['source' => 'barobill_api']);
}
}
}
$debug['final_result']['total_count'] = count($allAccounts);
$debug['final_result']['accounts'] = $allAccounts;
$debug['step'][] = '7. 최종 통합 완료: ' . count($allAccounts) . '개 계좌';
// 모든 barobill_companies 목록도 확인
$allCompaniesSql = "SELECT id, company_name, corp_num, barobill_user_id, parent_id
FROM {$DB}.barobill_companies
ORDER BY id ASC";
$allCompaniesStmt = $pdo->query($allCompaniesSql);
$allCompanies = $allCompaniesStmt->fetchAll(PDO::FETCH_ASSOC);
$debug['tenant_info']['all_companies'] = $allCompanies;
$debug['tenant_info']['all_companies_count'] = count($allCompanies);
echo json_encode([
'success' => true,
'debug' => $debug,
'summary' => [
'tenant_id' => $selectedTenantId,
'tenant_name' => $tenant['company_name'] ?? '알 수 없음',
'local_accounts_count' => count($localAccounts ?? []),
'barobill_accounts_count' => count($barobillAccounts ?? []),
'total_accounts_count' => count($allAccounts)
]
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} catch (Exception $e) {
$debug['error'] = $e->getMessage();
$debug['error_trace'] = $e->getTraceAsString();
echo json_encode([
'success' => false,
'error' => $e->getMessage(),
'debug' => $debug
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
/**
* 은행 코드 -> 은행명 변환
*/
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;
}
?>