PC표준결제 연동하기


API 연동하기

NHN KCP에서 제공하는 API 연동 가이드를 안내합니다.

호출-인증-승인-결과 4STEP으로 진행되는 PC 표준결제 가이드를 확인해주세요

API Download

라이브러리와 샘플은 다운로드 자료실을 참조해주세요.


결제창 호출 함수 실행

NHN KCP 결제창 호출에 필요한 JS URL에 대해 안내합니다.

<!-- 결제 호출 JS -->

1https://spay.kcp.co.kr/plugin/kcp_spay_hub.js

테스트 환경 : https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js


결제창 실행 함수

NHN KCP 결제창 호출에 필요한 함수에 대해 안내합니다.

<!-- 호출함수(실행) -->

1<script type="text/javascript">
2function jsf_pay(form)
3{
4   try
5   {
6     KCP_Pay_Execute_Web(form);
7   }
8     catch (e)
9   {
10     /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
11   }
12}
13</script>
Type : text/javascript

인증데이터

결제 인증 후 리턴받는 데이터에 대해 확인 부탁 드립니다.

해당 함수는 결제 창 인증 완료 후 승인요청 처리를 위한 함수입니다. (함수 명 임의 변경 불가)

FormOrJson은 가맹점 임의 활용 금지,
frm 값에 FormOrJson 값이 설정 되므로 frm 값으로 활용 하셔야 됩니다

m_Completepayment 함수의 위치는 결제 창 호출 js_url보다 반드시 상단에 선언 되어야합니다.

표준웹 방식의 경우 리턴 값이 form으로 리턴 처리 됩니다.

<!-- m_Completepayment 함수 예시 -->

1<script type="text/javascript">
2function m_Completepayment( FormOrJson, closeEvent )
3   {
4     var frm = document.order_info; // submit  시킬 폼데이터 지정
5     GetField( frm, FormOrJson );
6       if( frm.res_cd.value == "0000"
7       {
8         /* 가맹점 리턴값 처리 영역 */
9         frm.submit();
10       }
11      else
12      {
13        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
14        closeEvent();
15      }
16  }
17</script>
Type : text/javascript

주문요청 파라미터 가이드

필수 파라미터

string5

site_cd

KCP 발급 사이트(상점)코드
테스트코드 : T0000


string40

ordr_idxx

상점관리 주문번호
(유니크한 값 설정 권장)
※ 주문번호는 영문과 숫자로 설정하셔야합니다.


string12

pay_method

결제수단코드
- 신용카드 : 100000000000
- 계좌이체 : 010000000000
- 가상계좌 : 001000000000
- 포인트 : 000100000000
- 휴대폰 : 000010000000
- 상품권 : 000000001000


string100

good_name

상품명
※ 고객안내 및 주문정보 관리를 위해 정확한 상품명으로 설정하셔야 합니다.


string12

good_mny

주문요청금액
(결제 창으로 전달하는 금액으로 결제 창에 보여지는 실제 결제금액이 아닙니다.)
결제 금액은 숫자 이외의 문자(콤마 등)는 허용 하지 않습니다.
결제창이 닫힌 후 ordr_chk 값에 리턴되는 금액정보가 변경되는지 체크하셔야 됩니다.
※ 화폐단위가 ‘USD’ 일 경우, Cent까지 설정
ex ) $10.55 일 경우 콤마를 뺀 1055 $100 일 경우 10000로 설정


string3

currency

화폐단위
※ 원화 - WON : 410 / 달러 - USD : 840
※ 달러의 경우 NHN KCP에 별도의 신청(국제 세미나, 국제 학술대회 등만 신청가능)해야 사용 가능합니다.


string20

shop_user_id

쇼핑몰에서 관리하는 회원 ID
※ 유니크한 값으로 입력
기관에 따라 리스크 관리 조치를 위한 쇼핑몰 관리 ID를 필수로 요청
휴대폰 소액결제 - 40Byte
상품권결제 - 20Byte

선택 파라미터

string20

site_name

상점이름(영문으로 작성권장)
예시 : site_name="NHNKCP"


string30

buyr_name

주문자이름


string50

buyr_mail

주문자 이메일


string20

buyr_tel1

주문자 전화번호
하이폰(-)포함 가능


string20

buyr_tel2

주문자 휴대폰번호
하이폰(-)포함 가능

옵션 파라미터

신용카드옵션


number2

quotaopt

50,000원 이상 거래에 대한 할부 옵션. 기본값은 12개월. 0~12의 값을 설정하면 결제 창에 할부 개월 수가 최대값까지 표기됩니다.


string1

kcp_noint

무이자할부 표시기능“” : 상점관리자 설정에 따름니다.

“Y” : kcp_noint_quota 값에 따라 무이자표시(단, 상점관리자에 설정이 되어야 합니다.)
“N” : 상점관리자 값을 무시하고 일반할부로 처리됩니다.


string256

kcp_noint_quota

무이자할부 표시기능이 Y 일 경우 무이자 설정 값을 결제 창에 표기
무이자 설정은 카드사 별로 설정 가능


string1

used_card_YN

결제 요청 시 원하는 신용카드사 확인
※ 해당 변수 값을 Y로 설정 후 used_card 변수 값에 원하는 신용카드사의 코드를 입력
※ 입력한 신용카드사만 결제 창에 노출


string256

used_card

used_card_YN 변수 값을 Y로 설정한 후 사용하길 원하는 신용카드사의 코드 입력


카드 코드보기 ▼

카드코드카드명 카드코드카드명
CCLG신한CCKJ광주
CCDI현대CCSU수협
CCLO롯데CCJB전북
CCKE외환CCCJ제주
CCSS삼성CCKDKDB산업은행
CCKM국민CCSB저축
CCBC비씨CCCU신협
CCNH농협CCPB우체국
CCHN하나CCSMMG새마을금고
CCCT씨티CCKA카카오뱅크
CCWR우리CCXB마스터
BC81하나비씨CCXCJCB
CCKK케이뱅크
CCUF은련
CCXA비자

string2

fix_inst

결제금액이 50,000원 이상일 경우 결제 창에서 선택 할 수 있는 할부 개월 수를 0~12 의 값 중 하나로 고정


<!-- 신용카드 옵션 설정 예제 -->
<input type=”hidden” name=”quotaopt” value=”6”> // 최대 할부 개월수
<input type=”hidden” name=”kcp_noint” value=”Y”> // 무이자할부 표시 여부
<input type=”hidden” name=”kcp_noint_quota” value=”CCBC-02:03:06,CCSS-03:06”>
//BC카드 2,3,6 무이자, 삼성카드 3,6 무이자
<input type=”hidden” name=”used_card_YN” value=”Y”> //원하는 카드사 설정 여부
<input type=”hidden” name=”used_card” value=”CCBC:CCKM:CCSS”> //결제창에 BC,국민,삼성카드만 노출

가상계좌옵션


string50

wish_vbank_list

NHN KCP에서 제공하는 은행 중 가맹점이 원하는 은행을 선택할 수 있습니다.


string2

vcnt_expire_term

가상계좌 유효기간 설정


string6

vcnt_expire_term_time

가상계좌 유효기간 설정
vcnt_expire_term과 함께 부수적으로 설정되는 변수


<!-- 가상계좌 옵션 설정 예제 -->
<input type=”hidden” name=”wish_vbank_list” value=”05:03:04:07:11:23”> //가상계좌 은행선택
<input type=”hidden” name=”vcnt_expire_term” value=”3”> //가상계좌 유효기간
<input type=”hidden” name=”vcnt_expire_term_time” value=“120000”> //가상계좌 유효시간

휴대폰결제 옵션


string1

hp_apply_yn

원하는 통신사만 노출시킬 수 있습니다.
※변수 값을 Y로 설정한 후 hp_commid 변수의 값에 통신사 코드를 입력하면 결제창에 해당 통신사만 노출됩니다.


string2

hp_commid

하나의 통신사만 설정 가능


<!-- 휴대폰폰옵션 설정 예제 -->
<input type=”hidden” name=”hp_apply_yn” value=”Y”>
<input type=”hidden” name=”hp_commid” value=“SKT”> //SKT 통신사만 노출

※ 휴대폰 결제를 NHN KCP 테스트서버로 테스트할 경우에도 실제 결제가 이뤄지기 때문에 결제 테스트를 하신 후 반드시 당월 내에 취소를 하셔야 청구되지 않습니다. (예. 2021년 8월 31일 결제 시 반드시 8월 31일 내에 취소)


포인트 옵션


string1

complex_pnt_yn

포인트 결제 시 결제 금액의 일부를 신용카드 결제와 함께 사용 가능합니다.
complex_pnt_yn 을 ‘N’으로 설정하면 포인트로만 결제 이루어집니다.


string2

pt_memcorp_cd

베네피아(SK M&C)에서 발급한 회원소속사코드로 베네피아 복지포인트를 사용한다면 필수로 처리됩니다.


추가 옵션 변수


string256

site_logo

결제 창 왼쪽 상단에 가맹점 사이트의 로고를 띄움니다.
업체의 로고가 있는 URL을 정확히 입력해야 하며 해당 변수 생략 시에는 로고가 뜨지 않고 site_name 값이 표시됨
로고 파일은 GIF, JPG 파일만 지원
최대 사이즈 : 150 X 50 미만
이미지 파일을 150 X 50 이상으로 설정 시 site_name 값이 표시됨
※ site_logo 설정 시 결제 창 호출이 느려질 수 있음


string1

eng_flag

결제 창 한글/영문 변환


number1

skin_indx

결제 창 스킨 변경. 1~11까지 설정 가능


string18

good_expr

상품 제공기간
“”, “0” : 일반결제
“1” : 제공기간
※ 기본 설정은 일반결제


string4

tax_flag

복합 과세 구문
TG03 : 복합과세


number14

comm_tax_mny

과세 승인금액 (공급가액)
과세 금액에 해당하는 공급가액 설정
과세 금액 = good_mny / 1.1


number12

comm_free_mny

비과세 승인금액
비과세 금액에 해당하는 공급가액 설정
비과세 금액 = good_mny – 과세금액 – 부가가치세


number12

comm_vat_mny

부가가치세
부가가치세는 과세금액 공금가액의 10%
부가가치세 = good_mny – 과세금액


string30

kcp_pay_title

결제창 상단 문구
예시 ) NHN KCP – 결제의 중심!


string1

disp_tax_yn

계좌이체, 가상계좌를 이용한 현금 결제 시 결제 금액이 1원 이상인 경우, 결제 창에 현금영수증 등록여부를 보여줌
현금영수증 자동등록을 원할 경우 해당 변수를 Y 로 설정. 가상계좌의 경우 입금 완료 후 현금영수증 등록됨

Y : 소득공제용, 지출증빙용 노출
N : 현금영수증 숨기기
R : 소득공제용만 노출
E : 지출증빙용만 노출

※ 현금영수증 자동 등록을 사용하시려면 사전에 가맹점 관리자 페이지 [결제관리 - 현금영수증] 에서 현금영수증 사용 등록을 해주셔야 합니다. 현금영수증 사용 옵션 ‘자진발급(자동)등록, 구매자 요청등록, 사용 안 함’ 중 [구매자 요청등록]이 설정되어 있어야 합니다.

결제(요청/인증리턴) 샘플코드 예시

<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute_Web( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>
<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testpay.kcp.co.kr/plugin/payplus_web.jsp"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>
<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testpay.kcp.co.kr/plugin/payplus_web.jsp"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>
<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testpay.kcp.co.kr/plugin/payplus_web.jsp"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>
<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testpay.kcp.co.kr/plugin/payplus_web.jsp"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>
<html>
<head>
<!-- 결제창 호출 JS -->
<script type="text/javascript" src="https://testpay.kcp.co.kr/plugin/payplus_web.jsp"></script>
<script type="text/javascript">

  /* 인증완료시 재귀 함수  */
  function m_Completepayment( FormOrJson, closeEvent )
  {
    var frm = document.order_info;
      GetField( frm, FormOrJson );

      if( frm.res_cd.value == "0000" )
      {
        frm.submit();
      }
      else
      {
        alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
        closeEvent();
      }
  }
  /* 결제창 실행 함수 */
  function jsf__pay( form )
  {
    form.pay_method.value="100000000000"; //신용카드
      try
      {
         KCP_Pay_Execute( form );
      }
      catch (e)
      {
        /* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
      }
  }
</script>
</head>
<body>

<form name="order_info" method="post" action="..승인요청URL">
<!-- 주문정보 세팅 -->
<input type="text" name="ordr_idxx" value="TEST12345" maxlength="40" />
<input type="text" name="good_name" value="운동화" />
<input type="text" name="good_mny" value="1004" maxlength="9" />
<input type="text" name="buyr_name" value="홍길동" />
<input type="text" name="buyr_tel2" value="010-0000-0000" />
<input type="text" name="buyr_mail" value="test@test.co.kr" />
<!-- 신용카드 -->
<input type="text" name="pay_method" value="100000000000" />
<!-- 결제요청  -->
<a href="#none" onclick="jsf__pay(document.order_info);">결제요청</a>
<!-- 가맹점 정보 설정-->
<input type="hidden" name="site_cd" value="T0000" />
<input type="hidden" name="site_name" value="TEST SITE" />
<!-- 인증데이터 처리-->
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<input type="hidden" name="enc_info" value=""/>
<input type="hidden" name="enc_data" value=""/>
<input type="hidden" name="ret_pay_method" value=""/>
<input type="hidden" name="tran_cd" value=""/>
<input type="hidden" name="use_pay_method" value=""/>
</form>
</body>
</html>

인증파라미터 가이드

리턴 파라미터

string가변

enc_data

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

enc_info

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

tran_cd

결제요청타입
통합 결제 창에서 처리하여 전달받는 상태 코드 값
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
※ 해당 값은 KCP 시스템에서 추가 및 변경이 되는 값으로 상점에서 자체 관리가 불가한 값입니다.

인증 callback 데이터

<!-- 인증 callback 데이터 수신 예시 -->

1<input type="hidden" name="enc_info"        value=""/>
2<input type="hidden" name="enc_data"        value=""/>
3<input type="hidden" name="tran_cd"         value=""/>

승인요청하기

인증데이터를 API URL로 승인요청 하세요.

<!-- API 호출 -->

1https://spl.kcp.co.kr/gw/enc/v1/payment

테스트 환경 : https://stg-spl.kcp.co.kr/gw/enc/v1/payment


승인요청데이터

승인요청 데이터는 Json String 전송방식으로 요청 하세요.

결제정보 검증을 위해 실제 결제되야할 ordr_mony, ordr_no, pay_type 을 넘겨주세요. 결제창에서 처리된 정보와 비교하여 검증해드립니다.

* ordr_no의 경우 결제창으로 전달하는 주문번호와 실제 승인요청때 처리하는 주문번호가 동일해야하는 경우 검증처리해주세요. 다를경우 주문번호 검증은 하지 않으시기 바랍니다.

승인요청을 위한 kcp_cert_info 인증서는 서비스인증서 페이지를 참고해주세요.

<!-- 승인요청 데이터 -->

1{
2 "tran_cd":”00100000”,
3 "ordr_mony":"100000",
4 "kcp_cert_info":"-----BEGIN CERTIFICATE-----MIID3DCCAsSgAwIBAgIJAM...=-----END CERTIFICATE-----",
5 "site_cd":"사이트코드",
6 "enc_data":"SnvXdGftIEjAequorkpNhJXc4u3GRuotLHW9vyDDOhdeorM4DPXMJgJlIEoRo6divo=",
7 "enc_info":"A12345B12345"
8 "ordr_no":"TEST123"
9 "pay_type":"PACA"
10}
Type : json / application

결제 응답 전문의 경우 동일한 형태로 리턴됩니다.


승인요청 파라미터 가이드

승인요청 파라미터

string5

site_cd

KCP발급 사이트(상점)코드
가입 시 발송해드리는 연동메일 참조 / 테스트코드 : T0000


string가변

kcp_cert_info

KCP 인증서정보(직렬화)
관리자 페이지에서 발급받은 인증서 정보(직렬화 하여 요청)


string가변

enc_data

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

enc_info

결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.


string가변

tran_cd

결제요청타입
통합 결제 창에서 처리하여 전달받는 상태 코드 값
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
※ 해당 값은 KCP 시스템에서 추가 및 변경이 되는 값으로 상점에서 자체 관리가 불가한 값입니다.


string4

pay_type

실제 결제수단
신용카드 : PACA
계좌이체 : PABK
가상계좌 : PAVC
휴 대 폰 : PAMC


string40

ordr_no

실제주문번호


number가변

ordr_mony

실제 결제요청 금액

API 승인처리 예시

String target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment";  // 승인요청 개발서버

JSONObject json_req = new JSONObject();

json_req.put("tran_cd", tran_cd);
json_req.put("site_cd", site_cd);
json_req.put("kcp_cert_info", kcp_cert_info);
json_req.put("enc_data", enc_data);
json_req.put("enc_info", enc_info);
json_req.put("ordr_mony",ordr_mony);
//json_req.put("ordr_no", ordr_no);
json_req.put("pay_type", pay_type);


String temp_req_data = json_req.toString();
String req_data = temp_req_data.replace(",",",\r\n");

String inputLine = null;
StringBuffer outResult = new StringBuffer();

// API REQ
URL url = new URL(target_URL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept-Charset", "UTF-8");

OutputStream os = conn.getOutputStream();
os.write(req_data.getBytes("UTF-8"));
os.flush();

// API RES
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while ((inputLine = in.readLine()) != null)
{
  outResult.append(inputLine);
}
conn.disconnect();

String temp_result = outResult.toString();
String res_data = temp_result.replace(",",",\r\n");
header("Content-type: text/html; charset=utf-8");

$target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment"; // 승인요청 개발서버

$data = [
          'tran_cd'        => $tran_cd,
          'site_cd'        => $site_cd,
          'kcp_cert_info'  => $kcp_cert_info,
          'enc_data'       => $enc_data,
          'enc_info'       => $enc_info,
          'ordr_mony'      => $ordr_mony,
       // 'ordr_no'      => $ordr_no,
          ‘pay_type'       => $pay_type
];

$req_data = json_encode($data);

$header_data = array( "Content-Type: application/json", "charset=utf-8" );

// API REQ
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $req_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// API RES
$res_data  = curl_exec($ch);

// RES JSON DATA Parsing
$json_res = json_decode($res_data, true);

$res_cd = $json_res["res_cd"];
$res_msg = $json_res["res_msg"];

curl_close($ch);
target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment"; // 승인요청 개발서버

req_data = "{\"tran_cd\" : \"" + tran_cd + "\"," +
            "\"site_cd\":\"" + site_cd + "\"," +
            "\"kcp_cert_info\":\"" + KCP_CERT_INFO + "\"," +
            "\"enc_data\":\"" + enc_data + "\"," +
            "\"enc_info\":\"" + enc_info + "\"," +
            "\"pay_type\":\"" + pay_type + "\"," +
            "\"ordr_mony\":\"" + ordr_mony + "\"}";

// ordr_no 필요시 처리

// API REQ
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(target_URL);
req.Method = "POST";
req.ContentType = "application/json";

byte[] byte_req = Encoding.UTF8.GetBytes(req_data);
req.ContentLength = byte_req.Length;

Stream st = req.GetRequestStream();
st.Write(byte_req, 0, byte_req.Length);
st.Close();

// API RES
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader st_read = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8"));
res_data = st_read.ReadToEnd();

st_read.Close();
res.Close();

// RES JSON DATA Parsing
JObject json_data = JObject.Parse(res_data);
res_cd = json_data["res_cd"].ToString();
res_msg = json_data["res_msg"].ToString();
target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment" '개발서버
req_data = "{""tran_cd"":""" & tran_cd & """,""site_cd"":""" & site_cd & """,""kcp_cert_info"":""" & kcp_cert_info & """,""enc_data"":""" & enc_data & """,""enc_info"":""" & enc_info & """,""ordr_mony"":""" & ordr_mony & """,""pay_type"":""" & pay_type & """}“
 ' order_no 는 필요시 처리

' API REQ
set req = Server.CreateObject("MSXML2.ServerXMLHTTP")
req.open "POST", target_URL, false
req.setRequestHeader "Content-Type", "application/json;charset=UTF-8"
req.send req_data

' API RES
'요청 성공인 경우
if req.status = 200 then
    res_data = req.ResponseText
'요청 실패인 경우
else
    res_data = "http error code : " & req.status
end if
set req = nothing

'' RES JSON DATA Parsing
set json_data = JSON.parse(res_data)

res_cd = json_data.res_cd
res_msg = json_data.res_msg
// 결제 REQ DATA
  var req_data = {
    tran_cd : f_get_parm(req.body.tran_cd),
    site_cd : site_cd,
    kcp_cert_info : KCP_CERT_INFO,
    enc_data : f_get_parm(req.body.enc_data),
    enc_info : f_get_parm(req.body.enc_info),
    ordr_mony : ‘1000’,
 // ordr_no: ‘TEST1234’,
    pay_type: ‘PACA’
};

  fetch("https://stg-spl.kcp.co.kr/gw/enc/v1/payment", {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(req_data),
    })
    // 결제 API RES
    .then(response => {
      return response.json();
    })
    .then(data => {

  res.render('kcp_api_pay', {
    req_data : JSON.stringify(req_data),
    res_data : JSON.stringify(data),
    });
});
# 결제요청 API
target_URL = 'https://stg-spl.kcp.co.kr/gw/enc/v1/payment' # 승인요청 API 개발환경
headers = {'Content-Type': 'application/json', 'charset': 'UTF-8'}

site_cd = f_get_parm(request.form['site_cd'])

# 결제 REQ DATA
req_data = {
  'tran_cd' : f_get_parm(request.form['tran_cd']),
  'site_cd' : site_cd,
  'kcp_cert_info' : KCP_CERT_INFO,
  'enc_data' : f_get_parm(request.form['enc_data']),
  'enc_info' : f_get_parm(request.form['enc_info']),
   'ordr_mony' : '1',
# 'ordr_no' : 'TEST12345',
   'pay_type' : 'PACA‘
}

res = requests.post(target_URL, headers=headers, data=json.dumps(req_data, ensure_ascii=False, indent="\t").encode('utf8'))

승인응답 파라미터 가이드

공통응답 파라미터

승인성공 파라미터


string4

res_cd

결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴


string100

res_msg

결과메세지


string100

res_en_msg

영문 결과 메시지


string4

pay_method

응답결제수단
신용카드 - PACA
계좌이체 - PABK
가상계좌 - PAVC
포인트 - PAPT
휴대폰 - PAMC
상품권 - PATK
카카오머니 - PAKM
네이버페이 포인트 - PANP
페이코 포인트 - PACP


string14

tno

NHN KCP 거래 고유번호
※ 거래고유번호 전체로 사용 하시기 바랍니다. (임의의 숫자나 파싱하여 사용 불가)


number12

amount

결제 금액
결제 건의 총 결제 금액이 리턴 됩니다.
최종 결제 금액의 처리는 승인완료 후 리턴 데이터 중 amount 로 처리하여야 하며 반드시 업체의 DB금액과 비교하여 검증하시기 바랍니다


승인실패 파라미터


string4

res_cd

결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴


string100

res_msg

결과메세지

승인응답 파라미터

신용카드 결제 응답


string4

card_cd

결제 건의 발급 사 코드


string32

card_name

결제 건의 발급 사 명


string16

card_no

결제 건의 카드번호 (카드번호 16자리 중 3번째구간은 마스킹)


string8

app_no

결제 건의 승인번호


number14

app_time

결제 건의 결제(승인) 시간


string1

noinf

결제 건의 무이자 여부


string4

noinf_type

noinf = Y 일 때 (무이자 결제인 경우)
카드사 이벤트 무이자인 경우 : CARD
상점 부담 무이자인 경우 : SHOP


number4

quota

결제 건의 할부 기간


number12

card_mny

결제 건의 총 결제금액 중 신용카드 결제금액
만약 총 결제금액(amount) 10000 원 중 쿠폰할인 2000 원 받았다면 card_mny=8000 이 됩니다.
*페이코 포인트, 쿠폰 100% 결제 시 card_mny=0 으로 리턴될 수 있으니 반드시 총 결제 금액 처리는 amount 금액으로 체크하시기 바랍니다.


number8

coupon_mny

결제 건의 무이자 여부결제 건의 쿠폰 할인, 페이코 포인트 사용 금액
결제 건의 쿠폰 할인 금액 또는 페이코 포인트 사용 금액이 리턴됩니다.
만약 총 결제금액(amount) 10000 원 중 쿠폰 할인을 2000 원 받았다면 coupon_mny=2000 이 됩니다.


string1

partcanc_yn

결제 건의 부분취소 가능 유무


number1

card_bin_type_01

결제 건의 카드 구분 정보
개인 : 0 / 법인 : 1


number1

card_bin_type_02

결제 건의 카드 구분 정보
일반 : 0 / 체크 : 1


string4

isp_issuer_cd

ISP 계열 카드 발급 사 코드
BC96 : 케이뱅크카드
KM90 : 카카오뱅크카드


string32

isp_issuer_nm

ISP 계열 카드 발급 사 명
카카오뱅크의 경우 카카오뱅크 케이뱅크의 경우 K뱅크카드로 리턴됨.


number12

payco_point_mny

결제 건의 페이코 포인트 사용 금액


계좌이체 결제 응답


string20

bankname

결제 건의 은행 명
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.


string4

bankcode

결제 건의 은행코드
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.


number9

cash_authno

현금영수증 승인번호
NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 승인번호


number14

cash_no

NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 거래번호


number12

bk_mny

결제 건의 계좌이체 결제 금액


number14

app_time

결제건의 계좌발급 시간


가상계좌 결제 응답


string20

bankname

결제 건의 은행 명


string4

bankcode

결제 건의 은행코드


string20

account

결제 건의 가상계좌 번호


number14

va_date

가상계좌 입금마감일


number14

app_time

결제건의 계좌발급 시간


휴대폰 결제 응답


string4

van_cd

결제 건의 결제 사 코드


string4

van_id

결제 건의 실물/컨텐츠 구분


string3

commid

결제 건의 통신사 코드


number11

mobile_no

결제 건의 휴대폰 번호


포인트 결제 응답


number12

pnt_amount

결제 건의 포인트 결제 금액


string4

pnt_issue

결제 건의 결제 사 코드


string20

pnt_app_no

결제 건의 포인트 승인번호


number14

pnt_app_time

결제 건의 포인트 승인시각


string1

pnt_receipt_gubn

결제 건의 현금영수증 등록유무


number9

cash_authno

결제 건의 현금영수증 승인번호


number12

add_pnt

결제 건의 적립/사용 포인트


number12

use_pnt

결제 건의 가용 포인트


number12

rsv_pnt

결제 건의 총 포인트


상품권 결제 응답


number12

tk_mny

결제 건의 상품권 결제 금액


string4

tk_van_code

결제 건의 결제 사 코드


number20

tk_app_no

결제 건의 승인번호


number14

tk_app_time

결제 건의 승인시간


현금영수증 응답


number9

cash_authno

현금영수증 승인번호


number14

cash_no

현금영수증 거래번호

승인처리 구성하기

승인처리 페이지 구성시 승인요청 서명데이터생성 망취소 결과처리 로직을 포함 할 수 있습니다.

망취소 로직은 거래취소 페이지를 참고 부탁 드리겠습니다.

서명데이터생성 로직은 참고사항의 서버인증서 페이지를 참고 부탁 드리겠습니다.

결제창 호출, 승인처리를 포함한 전체 샘플이 필요하신 경우 다운로드 자료실을 이용해 주세요.