본문 바로가기

API, etc

금융결제원 오픈API 실계좌 인증

지난번에 사용자 인증하여 code를 발급받고 발급받은 code로 token까지 발급 완료

이번엔 발급받은 token으로 실계좌 인증을 해보려한다

 

 

token 발급 방법은 앞서 적은 포스팅으로!

https://whispertome.tistory.com/10

 

 

우선 계좌 인증에 필요한 parameter를 넣은 간단한 화면만 만들어보겠음!

 

 

[POST] https://testapi.openbanking.or.kr/v2.0/inquiry/real_name 

은행기관 코드, 생년월일은

MY PAGE > 테스트  정보 관리 > 오픈뱅킹 > 응답정보 관리 API 선택하여 나온 값을 임의로 입력

이용기관 코드는 

MY PAGE > 회원정보 관리 값이고

 

bank_tran_id (은행거래고유번호)는 다음과 같이 구성된다

이용기관코드 + "U"+임의 난수 9자리 (난수는 랜덤으로 하루동안 중복되지 않도록 입력)

bank_code_std = [은행기관 코드]
account_num = [계좌번호]
account_holder_info_type = [인증 방식인데 공백이 생년월일 6자리]
account_holder_info = [생년월일 6자리]
tran_dtime = [요청 시간]
bank_tran_id = [은행거래 고유번호]

 

 

그리고 Header 값에 위에 인증받은 token 값을 입력해야 하는데 실계좌 인증은 기관 인증 oob(2-legged) token이 필요

Headers에 Authorization key를 추가하고 값에 "Bearer"+인증받은 token을 입력하면 됨

요청했다니 다음과 같이 결과가 나온다

 

 

이 방법을 실제로 구현해보자

파라미터 값을 ajax를 통해 서버로 전달해보자.

그냥 javascript에서 하지 않고 server로 전달하는 이유는 cross Origin 문제 때문..

그냥 서버를 호출하는 ajax이고 data는 필요한 파라미터를 넣었다

ajax 방식은 지금 쓰는 프레임워크 공통 모듈로 기본적으로 사용하는 아래의 방식을 사용해도 무관하다.

$.ajax({
	url : /api/realNameApiAjax,
    type : json,
    data : data
    ..
    , success : function() {
    }
})

호출해서 실제로 구현되는 부분은 이렇다.

public String bankingRealNameApi(HashMap<String, String> p) throws Exception {

		String code = "";		// 최종 return 될 코드 값

		Random random = new Random();
		int n = random.nextInt(999999999);	// bank_tran_id(거래고유번호) 뒤의 임의 난수값으로 사용하기 위해

		HttpURLConnection conn = null;
		JSONObject responseJson = null;

		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		Calendar calendar = Calendar.getInstance();
		String time = df.format(calendar.getTime());

		try {
			
            // 요청할 api url
			URL url = new URL("https://testapi.openbanking.or.kr/v2.0/inquiry/real_name");

			conn = (HttpURLConnection) url.openConnection();

			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", "application/json");
			conn.setRequestProperty("Transfer-Encoding", "chunked");
			conn.setRequestProperty("Connection", "keep-alive\"");
			// token 값 header에 넣어주기
			conn.setRequestProperty("Authorization", "Bearer[token값]");
            // POST 방식 사용을 위해
			conn.setDoOutput(true);

			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));

			// 추후 parameter mapping 필요
			String bank_or_id = [은행고유번호];
			String bank_tran_id = bank_or_id+"U"+n;

			JsonObject params = new JsonObject();
			params.addProperty("bank_code_std", p.get("bank_code_std"));
			params.addProperty("account_num", p.get("account_num"));
			params.addProperty("account_holder_info_type", "");
			params.addProperty("account_holder_info", p.get("account_holder_info"));
			params.addProperty("bank_tran_id", bank_tran_id);
			params.addProperty("tran_dtime", time);

			bw.write(params.toString());
			bw.flush();
			bw.close();

			int responseCode = conn.getResponseCode();
			if (responseCode == 200) {

				BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
				StringBuilder sb = new StringBuilder();
				String line = "";
				while ((line = br.readLine()) != null) {
					sb.append(line);
				}
				JSONParser jparser = new JSONParser();
				responseJson = (JSONObject) jparser.parse(sb.toString());
				code = (String) responseJson.get("rsp_code");
				// 응답 데이터
				System.out.println("responseJson :: " + sb.toString());
				System.out.println("rsp_code :: " + code);
			
            // 아래 else 이후 코드는 입력하지 않아도 됨
			} else {
				code = [에러 코드];
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}


		return code;
	}

 

code값의 결과는 금융결제원 오픈API의 결과 확인하면 된다.

참고 사이트 url은 아래에!

https://developers.kftc.or.kr/dev/doc/open-banking

 

 

 

'API, etc' 카테고리의 다른 글

도로명주소 API (Thymeleaf 사용)  (0) 2021.07.29
금융결제원 오픈API token 발급  (0) 2021.07.28
금융결제원 오픈API 사용자 인증  (0) 2021.07.28