188 lines
6.9 KiB
PHP
188 lines
6.9 KiB
PHP
<?php
|
|
/**
|
|
* 등록된 계좌 목록 조회 API (GetBankAccountEx)
|
|
*/
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
require_once('barobill_account_config.php');
|
|
|
|
try {
|
|
// 0: 전체, 1: 사용가능, 2: 해지
|
|
$availOnly = isset($_GET['availOnly']) ? intval($_GET['availOnly']) : 0;
|
|
|
|
// GetBankAccountEx 호출
|
|
$result = callBarobillAccountSOAP('GetBankAccountEx', [
|
|
'AvailOnly' => $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;
|
|
}
|
|
?>
|