Skip to content

codef-io/easycodef-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

37 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Overview

CODEF๋Š” ์˜จ๋ผ์ธ์— ํฉ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์—”์ง„๊ณผ ์›น API ๋“ฑ์„ ํ™œ์šฉํ•ด ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๊ฐ€ ๊ตฌํ˜„๋˜๊ธฐ ์œ„ํ•œ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๊พธ๊ณ , ์ˆ˜๊ณ ๋กœ์›€์„ ์ค„์ด๊ณ ์ž ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํ™ˆํŽ˜์ด์ง€
๊ฐœ๋ฐœ๊ฐ€์ด๋“œ
๋ธ”๋กœ๊ทธ

easycodef-java๋Š” CODEF API ์—ฐ๋™ ๊ฐœ๋ฐœ์„ ๋•๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ ํ‹ธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ํ™ˆํŽ˜์ด์ง€ ๊ฐ€์ž… ํ›„ ๋ฐ๋ชจ/์ •์‹ ์„œ๋น„์Šค ์‹ ์ฒญ์„ ํ†ตํ•ด ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ๋“ฑ์„ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  API์˜ ์—”๋“œํฌ์ธํŠธ(์€ํ–‰, ์นด๋“œ, ๋ณดํ—˜, ์ฆ๊ถŒ, ๊ณต๊ณต, ๊ธฐํƒ€)์™€ ์š”์ฒญ/์‘๋‹ต ํ•ญ๋ชฉ์€ ๋ชจ๋‘ ๊ฐœ๋ฐœ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Maven Central javadoc License: MIT

Get it!

Dependency

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” 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'

Non-Maven dependency resolution

๋ฉ”์ด๋ธ ์ค‘์•™ ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  ๋ฒ„์ „์˜ easycodef-java jar ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Use it!

1. ํ† ํฐ ์š”์ฒญ

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);

2. ๊ณ„์ • ๊ด€๋ฆฌ

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๋กœ ๋ฌธ์˜ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฝ”๋“œ์—ํ”„์—์„œ๋Š” ๊ณ„์ • ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ธ์ฆ์„œ ํŒ์—…๊ณผ ์ „์†ก ์„œ๋ฒ„๋ฅผ ์„œ๋น„์Šค ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ์—ํ”„ ์ธ์ฆ์„œ ๋ฆด๋ ˆ์ด ์„œ๋น„์Šค

3. ์ƒํ’ˆ ์š”์ฒญ

์—”๋“œ ์œ ์ €์˜ ๊ณ„์ • ๋“ฑ๋ก ๊ณผ์ •์„ ๊ฑฐ์ณ ์ƒํ’ˆ ์‚ฌ์šฉ ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ์ด์ œ ๋ฐœ๊ธ‰๋ฐ›์€ 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์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ƒŒ๋“œ๋ฐ•์Šค ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ธ์ฆ ์ƒํ’ˆ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ธ์ฆ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…์€ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ์˜ ๊ฐ ์ƒํ’ˆ ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ๊ฐ€์ด๋“œ ์ถ”๊ฐ€์ธ์ฆ์„ ํ†ตํ•ด ํ™•์ธํ•˜์„ธ์š”.

4.๋‹ค๊ฑด์š”์ฒญ

์ฝ”๋“œ์—ํ”„ 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);

Ask us

easycodef-java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ฌธ์˜์‚ฌํ•ญ๊ณผ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ์˜ ์˜ค๋ฅ˜ ๋“ฑ์— ๋Œ€ํ•œ ๋ฌธ์˜๋ฅผ ํ™ˆํŽ˜์ด์ง€ ๋ฌธ์˜๊ฒŒ์‹œํŒ์— ์˜ฌ๋ ค์ฃผ์‹œ๋ฉด ์šด์˜ํŒ€์ด ๋‹ต๋ณ€์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์˜๊ฒŒ์‹œํŒ์˜ ์ž‘์„ฑ ์–‘์‹์— ๋งž์ถฐ ๋ฌธ์˜ ๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ ์‘๋‹ต์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

About

Codef API SDK ver 1. for JDK Clients

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages