Files
eapim-portal/src/main/resources/templates/views/apps/apis/mainApiCommon.html
T
Rinjae ba5b2e61a5 - logback 관련 XML 설정 파일 삭제
- KJBank 레이아웃, 프래그먼트 파일 DJBank로 변경
- HTML 레이아웃 파일 KJBank에서 DJBank로 업데이트
2026-05-24 22:21:57 +09:00

301 lines
11 KiB
HTML

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/djbank_base_layout}"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<body>
<section layout:fragment="contentFragment" class="content api_con">
<style>
.cm-s-custom-dark.CodeMirror {
background-color: #252B37;
color: white;
}
.cm-s-custom-dark .CodeMirror-gutters {
background-color: #1a1a1a;
border-right: 1px solid #3a3a3a;
}
.cm-s-custom-dark .CodeMirror-linenumber {
color: #777;
}
.cm-s-custom-dark .CodeMirror-cursor {
border-left: 1px solid white;
}
.cm-s-custom-dark .cm-keyword { color: #66d9ef; }
.cm-s-custom-dark .cm-atom { color: #bd93f9; }
.cm-s-custom-dark .cm-number { color: #ff79c6; }
.cm-s-custom-dark .cm-def { color: #50fa7b; }
.cm-s-custom-dark .cm-variable { color: #f8f8f2; }
.cm-s-custom-dark .cm-variable-2 { color: #fff; }
.cm-s-custom-dark .cm-variable-3 { color: #ff79c6; }
.cm-s-custom-dark .cm-property { color: #66d9ef; }
.cm-s-custom-dark .cm-operator { color: #ff79c6; }
.cm-s-custom-dark .cm-comment { color: #6272a4; }
.cm-s-custom-dark .cm-string { color: #f1fa8c; }
.cm-s-custom-dark .cm-string-2 { color: #f1fa8c; }
.cm-s-custom-dark .cm-meta { color: #50fa7b; }
.cm-s-custom-dark .cm-qualifier { color: #50fa7b; }
.cm-s-custom-dark .cm-builtin { color: #50fa7b; }
.cm-s-custom-dark .cm-bracket { color: #f8f8f2; }
.cm-s-custom-dark .cm-tag { color: #ff79c6; }
.cm-s-custom-dark .cm-attribute { color: #50fa7b; }
.cm-s-custom-dark .cm-hr { color: #f8f8f2; }
.cm-s-custom-dark .cm-link { color: #8be9fd; }
.cm-s-custom-dark .cm-error { color: #ff5555; }
</style>
<div class="content_wrap w_api">
<div class="sub_title4">
<h2 class="title">API 개발 공통</h2>
</div>
<div class="inner i_cs h_inner2">
<div class="api_stit api_dot">
<h3>요청 메시지</h3>
<ul>
<li>
<p>API 는 네트웍 보안을 위해 TLS1.2 을 기반으로 하는 상호 인증을 거칩니다.</p>
</li>
<li>
<p>수신된 API 는 제휴기관의 정보등을 확인 하여 인증 처리를 거쳐 인증된
Token 값으로 요청된 전문에 대해 업무를 처리 하게 됩니다.</p>
</li>
<li>
<p>API 송수신은 모두 동기 방식으로 진행 되며, 응답 대기시간은 최대 60초 입니다.
응답 결과에 따라 전문 재 요청 등의 추가적인 Process를 진행합니다.</p>
</li>
</ul>
</div>
<div class="api_stit stit api_star">
<h3>기본사항</h3>
<ul>
<li>
<p>JSON (JavaScript Object Notation)</p>
<span>경량의 Data-교환 형식으로, 데이터를 속성-값 형식으로 표현하는 개방형 표준 Data 형태입니다.</span>
</li>
<li>
<p>UTF-8</p>
<span>유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로, 전 세계 모든 문자코드를 표현할 수 있습니다.</span>
</li>
<li>
<p>인증방식</p>
<span>OAuth2.0의 Client Credentials Grant 방식을 준용합니다. Token의 유효 시간은 86400초(24시간)이며,
유효시간이 경과하면 token을 재발급 하여야 합니다.</span>
</li>
<li>
<p>Token</p>
<span>케이뱅크에서는 Token으로 JWS(JSON Web Signature)를 사용합니다.
케이뱅크에서는 Header 및 Payload 정보를 BASE64를 Encoding 하여 token을 생성하고 이를 전달 합니다.</span>
</li>
<li>
<p>암복호화</p>
<span>제휴 기관이 케이뱅크 펌뱅킹 API 이용 승인이 되면 제공되는 ID와 Secret 외에 KEY 값을 받게 됩니다. 해당 KEY 를 이용하여 암호화된 컬럼을 복호화하여 이용할 수 있습니다. 암호화 대상컬럼에 명시된 컬럼 size는 암호화 전 기준의 size입니다. (암호화 시 부족한 컬럼 사이즈는 스페이스 처리하며 암호화 후 컬럼 사이즈는 가상계좌번호, 출금계좌번호 16byte 실명번호 24byte)</span>
</li>
<li th:if="${#authorization.expression('isAuthenticated()')}">
<p>도메인정보</p>
<ul class="dash">
<li>-(운영) apigw.kbanknow.com (121.162.123.140)</li>
<li>-(개발) api.kbankcorp.co.kr (211.217.240.140)</li>
</ul>
</li>
<li th:if="${#authorization.expression('isAuthenticated()')}">
<p>포트정보 : 40443 (운영, 개발)</p>
</li>
<li>
<p>방화벽 정책</p>
<span>제휴기관의 도메인에 매핑된 모든 IP가 케이뱅크측 화이트리스트에 등록되어야 하므로 사전에 접속하고자하는 서버의 공인IP정보가 제공되어야 합니다.</span>
</li>
</ul>
</div>
<div class="api_stit stit">
<h3>컬럼 타입별 정의</h3>
<div class="pc-only">
<table class="api_table api_tb" cellspacing="0" cellpadding="0" width="100%">
<colgroup>
<col width="140px">
<col width="auto">
</colgroup>
<tbody>
<tr>
<th>N</th>
<td>NUMERIC</td>
</tr>
<tr>
<th>S</th>
<td>SPECIAL</td>
</tr>
<tr>
<th>A</th>
<td>ALPHABETIC</td>
</tr>
<tr>
<th>AH</th>
<td>한글(UTF-8 3byte 체계)</td>
</tr>
<tr>
<th>AN</th>
<td>ALPHA-NUMERIC</td>
</tr>
<tr>
<th>SN</th>
<td>SPECIAL-NUMERIC</td>
</tr>
<tr>
<th>ANS</th>
<td>ALPHA-NUMERIC SPECIAL</td>
</tr>
<tr>
<th>AHNS</th>
<td>한글-NUMERIC SPECIAL</td>
</tr>
</tbody>
</table>
</div>
<div class="m-only">
<table class="api_table api_tb" cellspacing="0" cellpadding="0" width="100%">
<colgroup>
<col width="80px">
<col width="auto">
</colgroup>
<tbody>
<tr>
<th>N</th>
<td>NUMERIC</td>
</tr>
<tr>
<th>S</th>
<td>SPECIAL</td>
</tr>
<tr>
<th>A</th>
<td>ALPHABETIC</td>
</tr>
<tr>
<th>AH</th>
<td>한글(UTF-8 3byte 체계)</td>
</tr>
<tr>
<th>AN</th>
<td>ALPHA-NUMERIC</td>
</tr>
<tr>
<th>SN</th>
<td>SPECIAL-NUMERIC</td>
</tr>
<tr>
<th>ANS</th>
<td>ALPHA-NUMERIC SPECIAL</td>
</tr>
<tr>
<th>AHNS</th>
<td>한글-NUMERIC SPECIAL</td>
</tr>
</tbody>
</table>
</div>
<div class="api_data">
<div class="data_lt">
<dl>
<dt></dt>
<dd>DATA 속성이 “N”인 FIELD는 RIGHT-JUSTIFIED하고, 남는 부분은 “0”로 SET한다.</dd>
</dl>
<dl>
<dt></dt>
<dd>ATA 속성이 “SN”인 FIELD는 그 값이 “-”인 경우는 첫 자리에 “-”를 표시하고, “0” 또는 “+”인 경우에는 해당 값을 RIGHT-JUSTIFIED하여 SET한다.</dd>
</dl>
<dl>
<dt></dt>
<dd>DATA 속성이 “A”, “AN”, “AH”, “ANS”, “AHNS”인 FIELD는 LEFT-JUSTIFIED하고, 남는 부분은 BLANK로 SET한다.</dd>
</dl>
<dl>
<dt></dt>
<dd>OPTIONAL FIELD는 그 속성에 따라 “0” 또는 BLANK로 SET한다.</dd>
</dl>
</div>
</div>
</div>
<div class="api_stit api_sc">
<h3>컬럼 복호화sample (JAVA 기준)</h3>
<ul>
<li>
<p class="tit">
<span>AES256 암/복호화 소스</span>
</p>
<div class="api_sauce">
<textarea id="sampleCode">
public static String encryptAES(String key, String text) {
return encrypt(key, text, "AES");
}
public static String decryptAES(String key, String text) {
return decrypt(key, text, "AES");
}
public static String encrypt(String key, String text, String algorithm) throws IllegalArgumentException {
SecretKeySpec securekey = new SecretKeySpec(key.getBytes(), algorithm);
try {
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, securekey);
byte[] encryptedData = cipher.doFinal(text.getBytes());
char[] temp = Base64.encode(encryptedData);
return new String(temp);
} catch (Exception var7) {
throw new IllegalArgumentException(var7.toString());
}
}
public static String decrypt(String key, String text, String algorithm) {
Key secureKey = new SecretKeySpec(key.getBytes(), algorithm);
byte[] encryptedData = Base64.decode(text.toCharArray());
try {
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, secureKey);
byte[] plainText = cipher.doFinal(encryptedData);
return new String(plainText);
} catch (Exception var7) {
throw new IllegalArgumentException(var7.toString());
}
}
</textarea>
</div>
</li>
</ul>
</div>
<div class="api_btn">
<a href="#none" class="common_btn_type_1" id="requestApiKey">API 이용 신청</a>
</div>
</div>
</div>
</section>
</body>
<th:block layout:fragment="contentScript">
<script>
document.addEventListener('DOMContentLoaded', (event) => {
const commonOptions = {
lineNumbers: false,
mode: { name: "text/x-java"},
theme: 'custom-dark',
readOnly: true,
autoCloseBrackets: true,
matchBrackets: true,
foldGutter: true,
indentWithTabs: true,
lineWrapping: true
};
const sampleCodeEditor = CodeMirror.fromTextArea(document.getElementById('sampleCode'), commonOptions);
sampleCodeEditor.setSize(null, 540);
sampleCodeEditor.refresh();
});
</script>
</th:block>
</html>