전담지원 신청
API Reference > 본인확인 > 결과조회

본인확인 결과조회 API

해당 페이지는 NHN KCP 본인확인 V2의 결과조회 요청 및 응답에 대해 설명합니다.
본인확인 결과조회는 인증 완료 후 가맹점 Ret_URL로 전달된 결과가 정상인 경우, 거래등록키와 주문번호를 이용해 인증 결과 데이터를 조회하는 API입니다.
결과조회 요청은 암호화하지 않은 평문 JSON으로 전송하며, 정상 응답으로 받은 enc_cert_data와 rv는 NHN KCP에서 제공하는 라이브러리의 decryptJson 함수를 이용해 복호화합니다.

본인확인 거래등록
본인확인 인증
결과 조회
결과 복호화

요약

대상 서비스

본인확인 V2

HTTP Method

POST 방식으로 JSON Body를 전송합니다.

Content-Type

application/json; charset=utf-8 형식으로 요청합니다.

통신 보안

TLS 1.2 이상 환경에서 통신합니다.

테스트 URL

https://testcert.kcp.co.kr/api/query/getCertData.do

운영 URL

https://cert.kcp.co.kr/api/query/getCertData.do

Request Body

암호화를 적용하지 않은 평문 JSON을 전송합니다.

정상 응답 기준

res_cd 값이 0000이면 정상 처리입니다.

요청 정보

Request Header 예시

Content-Type: application/json
site_cd: AO7F3

Header 파라미터

site_cd필수 string5
길이 5자리로 영문대문자 또는 영문대문자+숫자로 구성됩니다. 모든 서비스에 사용합니다.
본인확인 거래등록과 결과 조회에는 동일한 사이트코드를 사용합니다.ex) site_cd: AO7F3

Request Body 예시

{
	"reg_cert_key": "1234567890123456",
	"ordr_idxx": "TEST1234567890"
}

요청 파라미터

reg_cert_key필수 string20
본인확인 거래등록 API 응답으로 받은 거래등록키입니다.
인증 결과 Callback으로 전달된 값이 가맹점 DB에 저장된 거래등록키와 일치하는지 검증한 후 사용합니다.ex) reg_cert_key: 1234567890123456
ordr_idxx필수 string50
가맹점에서 관리하는 주문번호입니다. 중복되지 않는 유니크한 값으로 사용하고, 가맹점에서 반드시 저장합니다.
본인확인 거래등록 요청 시 사용한 값과 동일한 주문번호를 입력합니다.ex) ordr_idxx: TEST1234567890

응답 정보

결과조회 실패 시 res_cd와 res_msg 외의 응답 데이터는 리턴되지 않습니다.
정상 응답으로 받은 enc_cert_data와 rv는 반드시 함께 복호화하고, 원문 인증정보와 암호화 키가 웹이나 로그에 노출되지 않도록 관리하세요.

Response Body 예시

{
	"res_cd": "0000",
	"res_msg": "정상처리",
	"enc_cert_data": "EqdEAebCPHh...",
	"rv": "Q2hhbmd1VGh...HQ="
}

응답 파라미터

res_cd string4
응답 코드입니다. 정상 처리 시 0000을 리턴합니다.ex) res_cd: 0000
res_msg string100
결과 메시지입니다.ex) res_msg: 정상처리
enc_cert_data string가변
암호화된 본인확인 결과 데이터입니다.
응답으로 받은 rv와 함께 NHN KCP 제공 라이브러리의 decryptJson 함수에 전달하여 복호화합니다.ex) enc_cert_data: EqdEAebCPHh...
rv string가변
복호화에 사용하는 랜덤 값입니다.
결과조회 응답으로 받은 enc_cert_data와 한 쌍으로 사용하며, 값을 변경하거나 다른 응답의 값과 혼합하지 않습니다.ex) rv: Q2hhbmd1VGh...HQ=

구현 참고사항

첨부한 JSP 샘플의 Callback 검증, 결과조회 API 호출, 응답 확인 및 decryptJson 복호화 방식을 기준으로 작성했습니다.

JSP 샘플 구현 포인트 보기

인증 결과 Callback으로 받은 reg_cert_key를 가맹점에 저장된 거래등록키와 비교한 후, 거래등록 단계에서 저장한 주문번호와 함께 결과조회 API를 호출합니다.

// Callback 거래등록키 검증
String callbackRegCertKey = request.getParameter("reg_cert_key");
String storedRegCertKey   = loadRegCertKeyFromDatabase();
String storedOrderId      = loadOrderIdFromDatabase();

if (!storedRegCertKey.equals(callbackRegCertKey)) {
    throw new IllegalArgumentException("거래등록키가 일치하지 않습니다.");
}
// 본인확인 결과조회 요청 JSON 구성
JSONObject body = new JSONObject();
body.put("reg_cert_key", storedRegCertKey);
body.put("ordr_idxx", storedOrderId);

String jsonBody = body.toJSONString();

URL url = new URL("https://testcert.kcp.co.kr/api/query/getCertData.do");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("site_cd", "AO7F3");

try (OutputStream os = conn.getOutputStream()) {
    os.write(jsonBody.getBytes(StandardCharsets.UTF_8));
    os.flush();
}
// 정상 응답 데이터 복호화
JSONObject queryResult =
    (JSONObject) new JSONParser().parse(responseBody);

String resCd       = (String) queryResult.get("res_cd");
String encCertData = (String) queryResult.get("enc_cert_data");
String rv          = (String) queryResult.get("rv");

if ("0000".equals(resCd)) {
    String certDataJson =
        Crypto.decryptJson(encCertData, rv, encKey, siteCd);

    JSONObject certData =
        (JSONObject) new JSONParser().parse(certDataJson);

    // CI, DI, 이름, 생년월일 등 필요한 인증정보를 서버에서 처리
}

샘플은 세션에 거래등록키와 주문번호를 저장하지만, 운영 환경에서는 DB나 별도 보안 저장소에서 조회하고 Callback 값과 일치 여부를 검증하는 방식을 사용하세요. 결과조회가 끝난 거래등록키는 재사용되지 않도록 처리하는 것이 안전합니다.