CODEF๋ ์จ๋ผ์ธ์ ํฉ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ ์์ง๊ณผ ์น API ๋ฑ์ ํ์ฉํด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์ต๋๋ค. ์์ด๋์ด๊ฐ ๊ตฌํ๋๊ธฐ ์ํ ๋ณต์กํ ๊ณผ์ ์ ๊ฐ๊ฒฐํ๊ฒ ๋ฐ๊พธ๊ณ , ์๊ณ ๋ก์์ ์ค์ด๊ณ ์ ๋ ธ๋ ฅํฉ๋๋ค.
ํํ์ด์ง
๊ฐ๋ฐ๊ฐ์ด๋
๋ธ๋ก๊ทธ
easycodef-java๋ CODEF API ์ฐ๋ ๊ฐ๋ฐ์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํธ์ ๋๋ค. ์ฌ์ฉ์ ์ํด์๋ ํํ์ด์ง ๊ฐ์ ํ ๋ฐ๋ชจ/์ ์ ์๋น์ค ์ ์ฒญ์ ํตํด ์๊ฒฉ ์ฆ๋ช ์ ์ํ ํด๋ผ์ด์ธํธ ์ ๋ณด ๋ฑ์ ๋ฐ๊ธ๋ฐ์์ผ ํ๋ฉฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ API์ ์๋ํฌ์ธํธ(์ํ, ์นด๋, ๋ณดํ, ์ฆ๊ถ, ๊ณต๊ณต, ๊ธฐํ)์ ์์ฒญ/์๋ต ํญ๋ชฉ์ ๋ชจ๋ ๊ฐ๋ฐ๊ฐ์ด๋๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Maven ์ค์ ์ ์ฅ์์์ ํ์ธ ๊ฐ๋ฅํ io.codef.api ํจํค์ง์ ์ํด ์์ผ๋ฉฐ ์์กด๊ด๊ณ ์ค์ ์ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- Maven
<dependencies>
...
<!-- ๊ฐ๊ธ์ ์ต์ ๋ฒ์ ์ฌ์ฉ ๊ถ์ฅ -->
<dependency>
<groupId>io.codef.api</groupId>
<artifactId>easycodef-java</artifactId>
<version>1.0.6</version>
</dependency>
...
</dependencies>- Gradle
implementation 'io.codef.api:easycodef-java:1.0.6'๋ฉ์ด๋ธ ์ค์ ์ ์ฅ์์์ ๋ชจ๋ ๋ฒ์ ์ easycodef-java jar ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
CODEF API ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ์๋น์ค ์ด์ฉ์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ํตํด ํ ํฐ์ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค. ํ ํฐ์ ๋ชจ๋ ์์ฒญ์ ํค๋ ๊ฐ์ ํฌํจ๋์ด์ผ ํ๋ฉฐ ํ๋ฒ ๋ฐ๊ธ ๋ฐ์ ํ ํฐ์ ์ผ์ฃผ์ผ๊ฐ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
easycodef-java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ ํฐ์ ๋ฐ๊ธ๊ณผ ์ฌ์ฌ์ฉ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ฌ์ฌ์ฉ ์ค์ธ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ ๊ฒฝ์ฐ ์ฌ๋ฐ๊ธ ๋ํ ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ฌ์ฉ์๋ ๋จ์ํ ์๊ฒฉ์ฆ๋ช ์ ์ํ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์ ๋ง์ ์งํํ๋ฉด ๋ฉ๋๋ค. ์๋์ ์์ ๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๋ ๊ณผ์ ์ ์ค๋ช ํฉ๋๋ค. ๊ณ์ ๊ด๋ฆฌ๋ ์ํ ์์ฒญ์ ํ ํฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์์ ์๋ ๋ฐ๊ธ๋ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ ํ ํฐ์ ์์ฒญํ ํ์๋ ์์ต๋๋ค.
// #1.์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ
EasyCodef codef = new EasyCodef();
/** #2.๋ฐ๋ชจ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์
* - ๋ฐ๋ชจ ์๋น์ค ๊ฐ์
ํ ์ฝ๋์ํ ํํ์ด์ง์ ํ์ธ ๊ฐ๋ฅ(https://codef.io/#/account/keys)
* - ๋ฐ๋ชจ ์๋น์ค๋ก ์ํ ์กฐํ ์์ฒญ์ ํ์ ์
๋ ฅ ํญ๋ชฉ */
codef.setClientInfoForDemo(EasyCodefClientInfo.DEMO_CLIENT_ID, EasyCodefClientInfo.DEMO_CLIENT_SECRET);
/** #3.์ ์ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์
* - ์ ์ ์๋น์ค ๊ฐ์
ํ ์ฝ๋์ํ ํํ์ด์ง์ ํ์ธ ๊ฐ๋ฅ(https://codef.io/#/account/keys)
* - ์ ์ ์๋น์ค๋ก ์ํ ์กฐํ ์์ฒญ์ ํ์ ์
๋ ฅ ํญ๋ชฉ */
codef.setClientInfo(EasyCodefClientInfo.CLIENT_ID, EasyCodefClientInfo.CLIENT_SECRET);
/** #4.RSA์ํธํ๋ฅผ ์ํ ํผ๋ธ๋ฆญํค ์ค์
* - ๋ฐ๋ชจ/์ ์ ์๋น์ค ๊ฐ์
ํ ์ฝ๋์ํ ํํ์ด์ง์ ํ์ธ ๊ฐ๋ฅ(https://codef.io/#/account/keys)
* - ์ํธํ๊ฐ ํ์ํ ํ๋์ ์ฌ์ฉ (ex)encryptValue(String plainText); */
codef.setPublicKey(EasyCodefClientInfo.PUBLIC_KEY);
/** #5.์ฝ๋์ํ ํ ํฐ ๋ฐ๊ธ ์์ฒญ - ์๋น์คํ์
(API:์ ์, DEMO:๋ฐ๋ชจ, SANDBOX:์๋๋ฐ์ค) */
String accessToken1 = codef.requestToken(EasyCodefServiceType.SANDBOX); // ํ ํฐ ์์ฒญ1 (requestToken)
System.out.println(accessToken1);
String accessToken2 = codef.requestToken(EasyCodefServiceType.SANDBOX); // ํ ํฐ ์์ฒญ2 (requestToken)
System.out.println(accessToken2);
assertEquals("์ฑ๋ฅ ํฅ์์ ์ํ ์ฌ์ฌ์ฉ ํ ํฐ ์ด์ฉ ํ์ธ", accessToken1, accessToken2);
String accessToken3 = codef.requestNewToken(EasyCodefServiceType.SANDBOX);// ์ ๊ท ํ ํฐ ์์ฒญ1 (requestNewToken)
System.out.println(accessToken3);
String accessToken4 = codef.requestNewToken(EasyCodefServiceType.SANDBOX);// ์ ๊ท ํ ํฐ ์์ฒญ2 (requestNewToken)
System.out.println(accessToken4);
assertNotEquals("ํ ํฐ ๊ถํ ๋ณ๊ฒฝ ๋ฑ์ ๋ฐ๋ผ ํ์ํ ์ ๊ท ํ ํฐ ๋ฐ๊ธ ํ์ธ", accessToken3, accessToken4);CODEF API ์๋น์ค์ ์ฌ๋ฌ ์ํ๋ค ์ค ์์ฒญ ํ๋ผ๋ฏธํฐ์ Connected ID๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ธ์ฆ์ด ํ์ํ CODEF API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋ ์ ์ (End User) ๊ณ์ ์ ๋ณด(๋์๊ธฐ๊ด์ ์ธ์ฆ์๋จ)๋ฑ๋ก์ด ํ์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅธ Connected ID๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค. (Connected ID๋ ๊ฐ๋ฐ๊ฐ์ด๋ ์ธ์ฆ๋ฐฉ์์์ ์์ธํ ๋ด์ฉ์ ํ์ธํ์ธ์.)
Connected ID ๋ฐ๊ธ ์ดํ์๋ ์ง์ ์ ์ธ ๊ณ์ ์ ๋ณด ์ ์ก ์์ด ๋์๊ธฐ๊ด์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. Connected ID๋ ๊ณ์ ๋ฑ๋ก ์์ฒญ ์ ๋ฐ๊ธ๋๋ฉฐ ์ดํ ๊ณ์ ์ถ๊ฐ/๊ณ์ ์์ /๊ณ์ ์ญ์ ์์ฒญ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋์ผํ ๊ธฐ๊ด์ ๋์ผํ ๊ณ์ ์ ๋ณด๋ ์ค๋ณตํด์ ๋ฑ๋กํ ์ ์์ผ๋ฉฐ ๊ฐ์ธ ๊ณ ๊ฐ/๊ธฐ์ ๊ณ ๊ฐ ๊ฐ๊ฐ 1๊ฐ์ฉ ๋ฑ๋ก์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ชจ๋ ์ํ์ ํ๋ผ๋ฏธํฐ์ Connected ID๊ฐ ํ์ํ ๊ฒ์ ์๋๋๋ค. ์ํ๋ณ ํ๋ผ๋ฏธํฐ๋ ๊ฐ๋ฐ๊ฐ์ด๋ ์ํ์๋ด์์ ํ์ธํ ์ ์์ต๋๋ค.
Connected ID๋ฅผ ์ฌ์ฉํ์ง ์๋ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ์ ๊ด๋ฆฌ๋ ์๋ตํ์ธ์.
// ์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์ ๋ณด, ํผ๋ธ๋ฆญํค ์ค์ ์ ๊ดํ #1~#4 ๋จ๊ณ๋ ์๋ต.
/**
* #5.์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์
* - ๊ณ์ ๊ด๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ (https://developer.codef.io/cert/account/cid-overview)
*/
List<HashMap<String, Object>> accountList = new ArrayList<HashMap<String, Object>> ();
HashMap<String, Object> accountMap = new HashMap<String, Object>();
accountMap.put("countryCode", "KR");
accountMap.put("businessType", "CD");
accountMap.put("clientType", "P");
accountMap.put("organization", "0309"); // ๊ธฐ๊ด์ฝ๋๋ ๊ฐ ์ํ ํ์ด์ง์์ ํ์ธ ๊ฐ๋ฅ
accountMap.put("loginType", "1");
accountMap.put("id", "user_id");
try {
accountMap.put("password", EasyCodefUtil.encryptRSA("user_password", codef.getPublicKey())); // RSA์ํธํ๊ฐ ํ์ํ ํ๋๋ encryptRSA(String plainText, String publicKey) ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ํธํ
} catch (Exception e) {
e.printStackTrace();
return;
}
accountList.add(accountMap);
HashMap<String, Object> parameterMap = new HashMap<String, Object> ();
parameterMap.put("accountList", accountList);
/** #6.๊ณ์ ๋ฑ๋ก ์์ฒญ(Connected ID ๋ฐ๊ธ ์์ฒญ) - ์๋น์คํ์
(API:์ ์, DEMO:๋ฐ๋ชจ, SANDBOX:์๋๋ฐ์ค) */
String result = codef.createAccount(EasyCodefServiceType.SANDBOX, parameterMap);
/** #7.๊ฒฐ๊ณผ ํ์ธ */
System.out.println(result);๊ณ์ ๋ฑ๋ก ์์ฒญ์ ๋ฑ๋กํ๋ ค๋ ์ฌ๋ฌ ๊ธฐ๊ด์ ๊ณ์ ์ ๋ชฉ๋ก ํ๋ผ๋ฏธํฐ๋ก ์ค์ ํด ํ๋ฒ์ ์์ฒญ์ด ๊ฐ๋ฅํ๋ฉฐ ์๋ต ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค. ์ฌ์ฉ์๋ ๋ฐ๊ธ๋ฐ์ Connected ID๋ฅผ ๊ณ์ ๋ฑ๋ก์ ์ฑ๊ณตํ ๊ธฐ๊ด(successList) ์ํ ์กฐํ ์์ฒญ์ ์ฌ์ฉ์ ํ ์ ์์ต๋๋ค.
์) ์ฐ๋ฆฌ์นด๋(0309)์ผ๋ก ๋ฑ๋กํ Connected ID๋ฅผ KB์นด๋(0301) ์ํ ์กฐํ์ ์ฌ์ฉํ ์ ์์
{
"result" : {
"code" : "CF-00000",
"extraMessage" : "",
"message" : "์ ์",
"transactionId":"786e01e459af491888e1f782d1902e40"
},
"data" : {
"successList" : [ {
"code" : "CF-00000",
"message" : "์ ์",
"extraMessage" : "",
"countryCode" : "KR",
"businessType" : "CD",
"clientType" : "P",
"loginType" : "1",
"organization" : "0309"
}],
"errorList" : [ ],
"connectedId" : "byi1wYwD40k8hEIiXl6bRF"
}
}๊ณ์ ๋ฑ๋ก ์ด์ธ์ ๊ณ์ ์ถ๊ฐ, ์์ , ์ญ์ ๋ฑ์ ๊ณ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ๊ณผ ๊ณ์ ๋ชฉ๋ก ์กฐํ, Connected ID ๋ชฉ๋ก ์กฐํ ๋ฑ ์กฐํ ๊ธฐ๋ฅ์ ๊ณ์ ๊ด๋ฆฌ ํ ์คํธ ํจํค์ง์์ ํ์ธ ํ ์ ์์ต๋๋ค. ํ ์คํธ ํจํค์ง์ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ ์๋๋ฐ์ค ์๋ฒ๋ฅผ ๋์์ผ๋ก ์ฆ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์๋๋ฐ์ค์์๋ ํ์ ์์ฒญ ํ๋ผ๋ฏธํฐ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ๋ค ์์ฒญ ์ํ์ ๋ฐ๋ฅธ ์์ ๋์ด ์๋ ๊ณ ์ ์๋ต ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ์๋ ์๋๋ฐ์ค๋ฅผ ํตํด ์ฝ๋์ํ ์ฐ๋์ ๋ํ ๊ฐ๋ฐ ์ฐ์ต๊ณผ ์ํ ๋ณ ์๋ต ์๋ฃ ๊ตฌ์กฐ ๋ฑ์ ํ์ธ ํ ์ ์์ต๋๋ค.
์ธ์ฆ์๋ก ๊ณ์ ์ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ์๋ certํ์ผ, keyํ์ผ ์ธํธ ํน์ pfxํ์ผ 2๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค. ๊ฐ๋ฐ๊ฐ์ด๋ ๊ณ์ ๋ฑ๋ก์์ ์์ธํ ๋ด์ฉ์ ํ์ธํ์ธ์. ์ธ์ฆ์ ๋ด๋ณด๋ด๊ธฐ/๊ฐ์ ธ์ค๊ธฐ ๋ฑ ์ธ์ฆ์ ๋ฆด๋ ์ด ์๋ฒ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ support@codef.io๋ก ๋ฌธ์ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ฝ๋์ํ์์๋ ๊ณ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์ธ์ฆ์ ํ์ ๊ณผ ์ ์ก ์๋ฒ๋ฅผ ์๋น์ค ํ๊ณ ์์ต๋๋ค.
์๋ ์ ์ ์ ๊ณ์ ๋ฑ๋ก ๊ณผ์ ์ ๊ฑฐ์ณ ์ํ ์ฌ์ฉ ์ค๋น๊ฐ ๋๋ฌ๋ค๋ฉด ์ด์ ๋ฐ๊ธ๋ฐ์ Connected ID์ ํ์ํ ํ๋ผ๋ฏธํฐ ์ ๋ณด ์ค์ ๋ฑ์ ํตํด ์ฝ๋์ํ API ์ํ ์์ฒญ์ ํ ์ ์์ต๋๋ค. Connected ID๋ฅผ ์ฌ์ฉํ๋ ์ํ๊ณผ Connected ID๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ํ ์์ฒญ ์์ ๋ฅผ ์๋ ์ฝ๋๋ฅผ ํตํด ํ์ธํ๊ฒ ์ต๋๋ค.
ํ๋ฒ ๋ ๊ฐ์กฐํ์๋ฉด ๋ชจ๋ ์ํ์ ํ๋ผ๋ฏธํฐ์ Connected ID๊ฐ ํ์ํ ๊ฒ์ ์๋๋๋ค.
์ํ๋ณ ํ๋ผ๋ฏธํฐ๋ ๊ฐ๋ฐ๊ฐ์ด๋ ์ํ์๋ด์์ ํ์ธํ ์ ์์ต๋๋ค.
// ๊ฐ์ธ ๋ณด์ ์นด๋ ์กฐํ(Connected ID ์ฌ์ฉ)
/** #1.์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์ */
EasyCodef codef = new EasyCodef();
codef.setClientInfoForDemo(EasyCodefClientInfo.DEMO_CLIENT_ID, EasyCodefClientInfo.DEMO_CLIENT_SECRET);
codef.setClientInfo(EasyCodefClientInfo.CLIENT_ID, EasyCodefClientInfo.CLIENT_SECRET);
codef.setPublicKey(EasyCodefClientInfo.PUBLIC_KEY);
/** #5.์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์ - ๊ฐ ์ํ๋ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ (https://developer.codef.io/products) */
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("connectedId", "sandbox_connectedId_01");
parameterMap.put("organization", "0309");
parameterMap.put("birthDate", "");
parameterMap.put("inquiryType", "0");
/** #6.์ฝ๋์ํ ์ ๋ณด ์กฐํ ์์ฒญ - ์๋น์คํ์
(API:์ ์, DEMO:๋ฐ๋ชจ, SANDBOX:์๋๋ฐ์ค) */
String productUrl = "/v1/kr/card/p/account/card-list"; // (์์)๊ฐ์ธ ๋ณด์ ์นด๋ ์กฐํ URL
String result = codef.requestProduct(productUrl, EasyCodefServiceType.SANDBOX, parameterMap);
/** #7.์ฝ๋์ํ ์ ๋ณด ๊ฒฐ๊ณผ ํ์ธ */
System.out.println(result);
HashMap<String, Object> responseMap = new ObjectMapper().readValue(result, HashMap.class);
HashMap<String, Object> resultMap = (HashMap<String, Object>)responseMap.get("result");
assertEquals("์ฝ๋์ํ ์ํ ์์ฒญ ๊ฒฐ๊ณผ ์คํจ(๋ฐํ๋ ์ฝ๋์ ๋ฉ์์ง ํ์ธ ํ์)", "CF-00000", (String)resultMap.get("code"));์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ํ ํด๋ผ์ด์ธํธ ์ ๋ณด ๋ฑ์ ์ค์ ํ ๋ค์ ๊ฐ์ธ ๋ณด์ ์นด๋ ์กฐํ๋ฅผ ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํด์ ์ํ ์์ฒญ์ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ ํ ํฐ ๋ฐ๊ธ์ด๋ ํ ํฐ ๊ด๋ฆฌ, ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ธ์ฝ๋ฉ, ์๋ต ๋ฐ๋์ ๋์ฝ๋ฉ ๋ฑ API์ด์ฉ์ ์ํ ๋ถ์์ ์ธ ์์ ์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ํ ์์ฒญ์ ํ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๊ณ requestProduct ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก Connected ID๋ก ๋ฑ๋ก๋ ๊ณ์ ์ ๊ธฐ๊ด(0309 ์ฐ๋ฆฌ์นด๋)์ ๋ณด์ ์นด๋ ๋ชฉ๋ก์ ์๋์ ๊ฐ์ด ์๋ต๋ฐ๊ฒ ๋ฉ๋๋ค.
{
"result" : {
"code" : "CF-00000",
"extraMessage" : "",
"message" : "์ฑ๊ณต",
"transactionId" : "5069429e367745baba92f5c12c4343de"
},
"data" : [ {
"resCardType" : "์ฒดํฌ/๋ณธ์ธ",
"resValidPeriod" : "",
"resCardName" : "OO์ฒดํฌ์นด๋-๊ตญ์ ATM",
"resTrafficYN" : "๋ถ๊ฐ๋ฅ",
"resIssueDate" : "",
"resUserNm" : "***",
"resSleepYN" : "",
"resCardNo" : "6056********0000"
}, {
"resCardType" : "์ ์ฉ/๋ณธ์ธ",
"resValidPeriod" : "",
"resCardName" : "ํ ์ธ์นด๋",
"resTrafficYN" : "๋ถ๊ฐ๋ฅ",
"resIssueDate" : "",
"resUserNm" : "***",
"resSleepYN" : "",
"resCardNo" : "6253********0000"
}, {
"resCardType" : "์ฒดํฌ/๋ณธ์ธ",
"resValidPeriod" : "",
"resCardName" : "OO์ฒดํฌ์นด๋",
"resTrafficYN" : "๋ถ๊ฐ๋ฅ",
"resIssueDate" : "",
"resUserNm" : "***",
"resSleepYN" : "",
"resCardNo" : "4214********0000"
} ]
}์ด๋ฒ์๋ ์ฌ์ ์ ํดํ์ ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ์ํ์ ์์ ์ ๋๋ค.
// ์ฌ์
์๋ฑ๋ก์ํ(ํดํ์
์กฐํ)(Connected ID ๋ฏธ์ฌ์ฉ)
/** #1.์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์ */
EasyCodef codef = new EasyCodef();
codef.setClientInfoForDemo(EasyCodefClientInfo.DEMO_CLIENT_ID, EasyCodefClientInfo.DEMO_CLIENT_SECRET);
codef.setClientInfo(EasyCodefClientInfo.CLIENT_ID, EasyCodefClientInfo.CLIENT_SECRET);
codef.setPublicKey(EasyCodefClientInfo.PUBLIC_KEY);
/** #5.์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์ - ๊ฐ ์ํ๋ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ (https://developer.codef.io/products) */
HashMap<String, Object> parameterMap = **new** HashMap<String, Object>();
parameterMap.put("organization", "0004"); // ๊ธฐ๊ด์ฝ๋ ์ค์
List<HashMap<String, String>> reqIdentityList = **new** ArrayList<HashMap<String, String>>();
HashMap<String, String> reqIdentityMap1 = **new** HashMap<String, String>();
reqIdentityMap1.put("reqIdentity", "3333344444");
reqIdentityList.add(reqIdentityMap1);
HashMap<String, String> reqIdentityMap2 = **new** HashMap<String, String>();
reqIdentityMap2.put("reqIdentity", "1234567890");
reqIdentityList.add(reqIdentityMap2);
parameterMap.put("reqIdentityList", reqIdentityList);
/** #6.์ฝ๋์ํ ์ ๋ณด ์กฐํ ์์ฒญ - ์๋น์คํ์
(API:์ ์, DEMO:๋ฐ๋ชจ, SANDBOX:์๋๋ฐ์ค) */
String productUrl = "/v1/kr/public/nt/business/status"; // (์์)์ฌ์
์๋ฑ๋ก์ํ(ํดํ์
์กฐํ) URL
String result = codef.requestProduct(productUrl, EasyCodefServiceType.SANDBOX, parameterMap);
/** #7.์ฝ๋์ํ ์ ๋ณด ๊ฒฐ๊ณผ ํ์ธ */
System.out.println(result);
HashMap<String, Object> responseMap = new ObjectMapper().readValue(result, HashMap.class);
HashMap<String, Object> resultMap = (HashMap<String, Object>)responseMap.get("result");
assertEquals("์ฝ๋์ํ ์ํ ์์ฒญ ๊ฒฐ๊ณผ ์คํจ(๋ฐํ๋ ์ฝ๋์ ๋ฉ์์ง ํ์ธ ํ์)", "CF-00000", (String)resultMap.get("code"));2๊ฐ์ ์ํผ ์์ฒญ ์์๋ฅผ ๋น๊ตํด ์ฝ๋์ ๋ด์ฉ์ ์ดํด๋ณด๋ฉด ๊ฐ์ธ ๋ณด์ ์นด๋ ์กฐํ์ ์ฌ์ ์๋ฑ๋ก์ํ ์กฐํ์ ์ฐจ์ด๋ ์์ฒญ์ฃผ์(URL)์ ํ๋ผ๋ฏธํฐ ์ค์ ์๋ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ํตํด ์ผ๊ด๋ ํํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๊ฐ๋ฐํ ์ ์๊ณ ๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ ์ํ ์์ฒญ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
{
"result" : {
"code" : "CF-00000",
"extraMessage" : "",
"message" : "์ฑ๊ณต",
"transactionId" : "786e01e459af491888e1f782d1902e40"
},
"data" : [ {
"resBusinessStatus" : "์ฌ์
์ํ์ง์๊ณ ์์ต๋๋ค.",
"resCompanyIdentityNo" : "3333344444",
"code" : "CF-00000",
"resTaxationTypeCode" : "98",
"extraMessage" : null,
"resClosingDate" : "",
"resTransferTaxTypeDate" : "",
"message" : "์ฑ๊ณต"
}, {
"resBusinessStatus" : "๋ถ๊ฐ๊ฐ์น์ธ์ผ๋ฐ๊ณผ์ธ์์
๋๋ค.\n*๊ณผ์ธ์ ํ์ ํ๋๋ ์ง๋2011๋
07์01์ผ์
๋๋ค.",
"resCompanyIdentityNo" : "1234567890",
"code" : "CF-00000",
"resTaxationTypeCode" : "1",
"extraMessage" : null,
"resClosingDate" : "",
"resTransferTaxTypeDate" : "20110701",
"message" : "์ฑ๊ณต"
} ]
}์ถ๊ฐ ์ธ์ฆ ์ํ์ด๋ APIํธ์ถ ํ๋ฒ์ผ๋ก ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋ ์ผ๋ฐ ์ํ๊ณผ๋ ๋ฌ๋ฆฌ ์ฒซ ์์ฒญ ์ดํ ๋์๊ธฐ๊ด์ด ์๊ตฌํ๋ ์ถ๊ฐ ์ธ์ฆ(์ด๋ฉ์ผ, SMS, ๋ณด์๋ฌธ์ ์ ๋ ฅ ๋ฑ)์ ์ํํด์ผ ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋ ์ํ์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ก๊ทธ์ธ์ ํ๋ ๊ฒฝ์ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ ์ธ์ ๋์๊ธฐ๊ด์์ ์ถ๊ฐ์ ์ผ๋ก ์๊ตฌํ๋ ๋ณด์๋ฌธ์ ์ ๋ ฅ์ด ์งํ๋์ด์ผ ํฉ๋๋ค. ๊ณ ์ ๊ฐ์ธ ์์ด๋, ๋น๋ฐ๋ฒํธ์ ๋ค๋ฅด๊ฒ ๋ณด์๋ฌธ์ ์ด๋ฏธ์ง๋ ๋๋คํ๊ฒ ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ์๋ ์ ์ ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด ์ ๋ ฅ์ด ํ์ํฉ๋๋ค.
๋์๊ธฐ๊ด์ด ์๊ตฌํ๋ ์ธ์ฆ๋ฐฉ์์ ๋ฐ๋ผ N์ฐจ ์ถ๊ฐ์ธ์ฆ์ด ์๊ตฌ ๋ ์ ์์ผ๋ฉฐ, ์ถ๊ฐ ์ธ์ฆ ์ ๋ณด ์ ๋ ฅ์ด ์งํ๋์ด์ผ ์ ์์ ์ผ๋ก CODEF API ์์ฒญ๋ ์๋ฃ๋ฉ๋๋ค. 1์ฐจ ์ ๋ ฅ๋ถ[๊ธฐ๋ณธํ๋ผ๋ฏธํฐ] -> n์ฐจ ์ถ๊ฐ ์ธ์ฆ[๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ + ์ถ๊ฐ ์ธ์ฆ ํ๋ผ๋ฏธํฐ] ์์ฒญ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ถ๊ฐ ์ธ์ฆ์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ํ ์ ๋ณด๊ฐ ๋๋ถ๋ถ์ด๋ฉฐ ์ถ๊ฐ ์ธ์ฆ ์์ฒญ์์๋ Endpoint URL์ ๋์ผํฉ๋๋ค.
์๋๋ฐ์ค ์๋ฒ๋ฅผ ํตํด ์ถ๊ฐ์ธ์ฆ ์ํ์ ๋ํ ํ ์คํธ๋ฅผ ์งํ ํ ์๋ ์์ต๋๋ค.
์ถ๊ฐ ์ธ์ฆ์ ํ์ํ ํ๋ผ๋ฏธํฐ ์ค๋ช ์ ๊ฐ๋ฐ ๊ฐ์ด๋์ ๊ฐ ์ํ ํ์ด์ง์์ ํ์ธํ ์ ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ ๊ฐ๋ฐ๊ฐ์ด๋ ์ถ๊ฐ์ธ์ฆ์ ํตํด ํ์ธํ์ธ์.
์ฝ๋์ํ API๋ 1๊ฐ ์์ฒญ 1๊ฐ ์๋ต์ ์์น์ผ๋ก ํฉ๋๋ค. ์ถ๊ฐ ์ธ์ฆ์ด ํ์ํ ์ํ์ธ ๊ฒฝ์ฐ ๊ฐ์ ๊ณ ๊ฐ์ด ์์ฒญ A์ ์์ฒญ B๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ถ๊ฐ ์ธ์ฆ์
๋ ๋ฒ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ๋ค๊ฑด ์์ฒญ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์์ฒญ A์ ์ธ์ฆ๋ง์ผ๋ก ์์ฒญ B๋ ์ถ๊ฐ ์ธ์ฆ ์์ด ์๋ต๋ฐ์ ์ ์์ต๋๋ค.
๋ค๊ฑด์์ฒญ ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ์ค๋ช ์ ๊ฐ๋ฐ๊ฐ์ด๋ ๋ค๊ฑด์์ฒญ์์ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ฑด๊ฐ๋ณดํ๊ณต๋จ ๊ฑด๊ฐ๊ฒ์ง๊ฒฐ๊ณผ ๋ค๊ฑด์์ฒญ ์์
// ๊ฑด๊ฐ๋ณดํ๊ณต๋จ ๊ฑด๊ฐ๊ฒ์ง๊ฒฐ๊ณผ (๋ค๊ฑด์์ฒญ)
/** #1.์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์ */
EasyCodef codef = new EasyCodef();
codef.setClientInfoForDemo(DEMO_CLIENT_ID, DEMO_CLIENT_SECRET);
codef.setClientInfo(CLIENT_ID, CLIENT_SECRET);
codef.setPublicKey(PUBLIC_KEY);
/** #2.์๋ณ ์์ด๋ ์์ฑ / ์์ฒญ ์๋ณ ์์ด๋(SSO(๋์ผ๊ณ์ ) ๊ตฌ๋ถ๊ฐ) / ์ฌ์ฉ์ ๊ณ์ ์ ์๋ณํ ์ ์๋ ์ ์ผ ๊ฐ ์ธํ
(ex. ์์ด๋ + UUID)
* ๋ค๊ฑด์์ฒญ์์ ์ฌ์ฉ๋๋ ์๋ณ์์ด๋๋ ๊ฐ ์์ฒญ์ ํ์๋ก ์
๋ ฅํด์ผ ํฉ๋๋ค.
* */
ID = "testID" + UUID.randomUUID();
/** #3.๋ค๊ฑด ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ํ์ธํ๊ธฐ ์ํด API์์ฒญ Thread๋ฅผ ์์ฑํ์ฌ ํ์ธ */
for (int i = 0; i < 2; i++) {
/** #4.์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์ - ๊ฐ ์ํ๋ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ (https://developer.codef.io/products) */
// ๋ค๊ฑด์์ฒญ ํ์ธ์ ์ํด ์กฐํ ์ฐ๋๋ฅผ ๋ค๋ฅด๊ฒ ์ค์
// ์์ฒญA : 2018๋
๋ ๋ฐ์ดํฐ / ์์ฒญ B : 2019๋
๋ ๋ฐ์ดํฐ
String searchStartYear = String.valueOf(2018+i);
String searchEndYear = String.valueOf(2018+i);
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("organization", "0002");
parameterMap.put("loginType", "5"); // "0":(๊ณต๋/๊ธ์ต)์ธ์ฆ์ "5":๊ฐํธ์ธ์ฆ
parameterMap.put("loginTypeLevel", "1"); // 1:์นด์นด์คํก, 2:ํ์ด์ฝ, 3:์ผ์ฑํจ์ค, 4:KB๋ชจ๋ฐ์ผ, 5:ํต์ ์ฌ(PASS), 6:๋ค์ด๋ฒ, 7:์ ํ์ธ์ฆ์, 8: toss
parameterMap.put("userName", "ํ๊ธธ๋");
parameterMap.put("phoneNo", "0101234xxxx");
parameterMap.put("identity", "19000101");
parameterMap.put("inquiryType", "0");
parameterMap.put("id", ID); //์๋ณ์์ด๋
parameterMap.put("searchStartYear", searchStartYear);
parameterMap.put("searchEndYear", searchEndYear);
parameterMap.put("type", "1");
/** #5.Thread ์คํ*/
Thread t = new requestThread(codef, parameterMap, i);
t.start();
// API ์์ฒญA์ ์์ฒญB ๋ค๊ฑด ์์ฒญ์ ์ํด์๋ ์์ฒญA ์ฒ๋ฆฌ ํ ์์ฒญB๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก
// ์์ฒญA ์ก์ ํ ์ฝ 0.5์ด ~ 1์ด ์ด๋ด ์์ฒญB ์ก์ ํ์
Thread.sleep(1000);
}๋ค๊ฑด ์์ฒญ Thread ์ ์ ์์
/** #6.๋ค๊ฑด ์์ฒญ ํ์ธ์ ์ํ ์์ฒญ Thread ์ ์ */
public class requestThread extends Thread{
private EasyCodef codef;
private HashMap<String, Object> parameterMap;
private int threadNo;
public requestThread(EasyCodef codef, HashMap<String, Object> parameterMap, int threadNo) {
this.codef = codef;
this.parameterMap = parameterMap;
this.threadNo = threadNo;
}
@Override
public void run() {
/** #7.์ฝ๋์ํ ์ ๋ณด ์กฐํ ์์ฒญ - ์๋น์คํ์
(API:์ ์, DEMO:๋ฐ๋ชจ, SANDBOX:์๋๋ฐ์ค) */
String productUrl = "/v1/kr/public/pp/nhis-health-checkup/result";
String result;
String code;
boolean continue2Way = false;
try {
result = codef.requestProduct(productUrl, EasyCodefServiceType.DEMO, parameterMap);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
HashMap<String, Object> responseMap = null;
try {
responseMap = new ObjectMapper().readValue(result, HashMap.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
HashMap<String, Object> resultMap = (HashMap<String, Object>)responseMap.get("result");
//์ถ๊ฐ ์ธ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ result ๊ฐ์ฒด์ ์๋ต์ฝ๋๊ฐ CF-03002
code = (String)resultMap.get("code");
System.out.println("์๋ต์ฝ๋ : " + code);
HashMap<String, Object> dataMap = (HashMap<String, Object>)responseMap.get("data");
// data๊ฐ์ฒด์ continue2Way ํ๋๊ฐ ์กด์ฌํ๋์ง ํ์ธ
if (dataMap.containsKey("continue2Way")) {
continue2Way = Boolean.valueOf((boolean)dataMap.get("continue2Way"));
}
// ์๋ต์ฝ๋๊ฐ CF-03002 ์ด๊ณ continue2Way ํ๋๊ฐ true์ธ ๊ฒฝ์ฐ ์ถ๊ฐ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณ์์ ์ ์ฅ
if (code.equals("CF-03002") && continue2Way){
JOB_INDEX = (int)dataMap.get("jobIndex");
THREAD_INDEX = (int)dataMap.get("threadIndex");
JTI = (String) dataMap.get("jti");
TWO_WAY_TIMESTAMP = (Long)dataMap.get("twoWayTimestamp");
}
/** #8.๊ฒฐ๊ณผ๊ฐ ํ์ธ */
System.out.println("threadNo " + threadNo + " result : " + result);
}
}์์ฒญ A ๊ฐํธ์ธ์ฆ ์๋ฃ ์์
/** #1.์ฌ์ด ์ฝ๋์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์ ๋ณด ์ค์ */
EasyCodef codef = new EasyCodef();
codef.setClientInfoForDemo(DEMO_CLIENT_ID, DEMO_CLIENT_SECRET);
codef.setClientInfo(CLIENT_ID, CLIENT_SECRET);
codef.setPublicKey(PUBLIC_KEY);
/** #2.์ถ๊ฐ์ธ์ฆ ์
๋ ฅ๋ถ ํ๋ผ๋ฏธํฐ ์ค์ */
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("organization", "0002"); //๊ธฐ๊ด์ฝ๋ ํ์ ์
๋ ฅ
parameterMap.put("id", ID); //์๋ณ์์ด๋ ํ์ ์
๋ ฅ
//๊ฐํธ์ธ์ฆ ์ถ๊ฐ์ธ์ฆ ์
๋ ฅ๋ถ
parameterMap.put("simpleAuth", "1");
parameterMap.put("is2Way", true);
/** #3.twoWayInfo ํ๋ผ๋ฏธํฐ ์ค์ */
HashMap<String, Object> twoWayInfo = new HashMap<String, Object>();
twoWayInfo.put("jobIndex", JOB_INDEX);
twoWayInfo.put("threadIndex", THREAD_INDEX);
twoWayInfo.put("jti", JTI);
twoWayInfo.put("twoWayTimestamp", TWO_WAY_TIMESTAMP);
parameterMap.put("twoWayInfo", twoWayInfo);
// ์์ฒญ Endpoint๋ ๋์ผํจ
String productUrl = "/v1/kr/public/pp/nhis-health-checkup/result";
String result;
// ์ถ๊ฐ์ธ์ฆ ์์ฒญ ์์๋ ์ด์ง์ฝ๋์ํ.requestCertification ์ผ๋ก ํธ์ถ
result = codef.requestCertification(productUrl, EasyCodefServiceType.DEMO, parameterMap);
/** #4.๊ฒฐ๊ณผ๊ฐ ํ์ธ */
System.out.println("์์ฒญA(์ถ๊ฐ์ธ์ฆ) result : " + result);easycodef-java ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ๋ํ ๋ฌธ์์ฌํญ๊ณผ ๊ฐ๋ฐ ๊ณผ์ ์์์ ์ค๋ฅ ๋ฑ์ ๋ํ ๋ฌธ์๋ฅผ ํํ์ด์ง ๋ฌธ์๊ฒ์ํ์ ์ฌ๋ ค์ฃผ์๋ฉด ์ด์ํ์ด ๋ต๋ณ์ ๋๋ฆฝ๋๋ค. ๋ฌธ์๊ฒ์ํ์ ์์ฑ ์์์ ๋ง์ถฐ ๋ฌธ์ ๊ธ์ ๋จ๊ฒจ์ฃผ์ธ์. ๊ฐ๋ฅํ ๋น ๋ฅด๊ฒ ์๋ต์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.

