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
주문요청 파라미터 가이드
필수 파라미터
site_cd
KCP 발급 사이트(상점)코드
테스트코드 : T0000
ordr_idxx
상점관리 주문번호
(유니크한 값 설정 권장)
※ 주문번호는 영문과 숫자로 설정하셔야합니다.
pay_method
결제수단코드
- 신용카드 : 100000000000
- 계좌이체 : 010000000000
- 가상계좌 : 001000000000
- 포인트 : 000100000000
- 휴대폰 : 000010000000
- 상품권 : 000000001000
good_name
상품명
※ 고객안내 및 주문정보 관리를 위해 정확한 상품명으로 설정하셔야 합니다.
good_mny
주문요청금액
(결제 창으로 전달하는 금액으로 결제 창에 보여지는 실제 결제금액이 아닙니다.)
결제 금액은 숫자 이외의 문자(콤마 등)는
허용 하지 않습니다.
결제창이 닫힌 후 ordr_chk 값에 리턴되는 금액정보가 변경되는지 체크하셔야 됩니다.
※ 화폐단위가 ‘USD’ 일 경우, Cent까지 설정
ex ) $10.55 일 경우 콤마를 뺀 1055
$100 일 경우 10000로 설정
currency
화폐단위
※ 원화 - WON : 410 / 달러 - USD : 840
※ 달러의 경우 NHN KCP에 별도의 신청(국제 세미나, 국제 학술대회 등만 신청가능)해야 사용 가능합니다.
shop_user_id
쇼핑몰에서 관리하는 회원 ID
※ 유니크한 값으로 입력
기관에 따라 리스크 관리 조치를 위한 쇼핑몰 관리 ID를 필수로 요청
휴대폰 소액결제 - 40Byte
상품권결제 - 20Byte
선택 파라미터
site_name
상점이름(영문으로 작성권장)
예시 : site_name="NHNKCP"
buyr_name
주문자이름
buyr_mail
주문자 이메일
buyr_tel1
주문자 전화번호
하이폰(-)포함 가능
buyr_tel2
주문자 휴대폰번호
하이폰(-)포함 가능
옵션 파라미터
신용카드옵션
quotaopt
50,000원 이상 거래에 대한 할부 옵션. 기본값은 12개월. 0~12의 값을 설정하면 결제 창에 할부 개월 수가 최대값까지 표기됩니다.
kcp_noint
무이자할부 표시기능“” : 상점관리자 설정에 따름니다.
“Y” : kcp_noint_quota 값에 따라 무이자표시(단, 상점관리자에 설정이 되어야 합니다.)
“N” : 상점관리자 값을 무시하고 일반할부로 처리됩니다.
kcp_noint_quota
무이자할부 표시기능이 Y 일 경우 무이자 설정 값을 결제 창에 표기
무이자 설정은 카드사 별로 설정 가능
used_card_YN
결제 요청 시 원하는 신용카드사 확인
※ 해당 변수 값을 Y로 설정 후 used_card 변수 값에 원하는 신용카드사의 코드를 입력
※ 입력한 신용카드사만 결제 창에 노출
used_card
used_card_YN 변수 값을 Y로 설정한 후 사용하길 원하는 신용카드사의 코드 입력
카드 코드보기 ▼
카드코드 | 카드명 | 카드코드 | 카드명 |
---|---|---|---|
CCLG | 신한 | CCKJ | 광주 |
CCDI | 현대 | CCSU | 수협 |
CCLO | 롯데 | CCJB | 전북 |
CCKE | 외환 | CCCJ | 제주 |
CCSS | 삼성 | CCKD | KDB산업은행 |
CCKM | 국민 | CCSB | 저축 |
CCBC | 비씨 | CCCU | 신협 |
CCNH | 농협 | CCPB | 우체국 |
CCHN | 하나 | CCSM | MG새마을금고 |
CCCT | 씨티 | CCKA | 카카오뱅크 |
CCWR | 우리 | CCXB | 마스터 |
BC81 | 하나비씨 | CCXC | JCB |
CCKK | 케이뱅크 | ||
CCUF | 은련 | ||
CCXA | 비자 |
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,국민,삼성카드만 노출
가상계좌옵션
wish_vbank_list
NHN KCP에서 제공하는 은행 중 가맹점이 원하는 은행을 선택할 수 있습니다.
vcnt_expire_term
가상계좌 유효기간 설정
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”> //가상계좌 유효시간
휴대폰결제 옵션
hp_apply_yn
원하는 통신사만 노출시킬 수 있습니다.
※변수 값을 Y로 설정한 후 hp_commid 변수의 값에 통신사 코드를 입력하면 결제창에 해당 통신사만 노출됩니다.
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일 내에 취소)
포인트 옵션
complex_pnt_yn
포인트 결제 시 결제 금액의 일부를 신용카드 결제와 함께 사용 가능합니다.
complex_pnt_yn 을 ‘N’으로 설정하면 포인트로만 결제 이루어집니다.
pt_memcorp_cd
베네피아(SK M&C)에서 발급한 회원소속사코드로 베네피아 복지포인트를 사용한다면 필수로 처리됩니다.
추가 옵션 변수
site_logo
결제 창 왼쪽 상단에 가맹점 사이트의 로고를 띄움니다.
업체의 로고가 있는 URL을 정확히 입력해야 하며 해당 변수 생략 시에는 로고가 뜨지 않고 site_name 값이 표시됨
로고 파일은 GIF, JPG 파일만 지원
최대 사이즈 : 150 X 50 미만
이미지 파일을 150 X 50 이상으로 설정 시 site_name 값이 표시됨
※ site_logo 설정 시 결제 창 호출이 느려질 수 있음
eng_flag
결제 창 한글/영문 변환
skin_indx
결제 창 스킨 변경. 1~11까지 설정 가능
good_expr
상품 제공기간
“”, “0” : 일반결제
“1” : 제공기간
※ 기본 설정은 일반결제
tax_flag
복합 과세 구문
TG03 : 복합과세
comm_tax_mny
과세 승인금액 (공급가액)
과세 금액에 해당하는 공급가액 설정
과세 금액 = good_mny / 1.1
comm_free_mny
비과세 승인금액
비과세 금액에 해당하는 공급가액 설정
비과세 금액 = good_mny – 과세금액 – 부가가치세
comm_vat_mny
부가가치세
부가가치세는 과세금액 공금가액의 10%
부가가치세 = good_mny – 과세금액
kcp_pay_title
결제창 상단 문구
예시 ) NHN KCP – 결제의 중심!
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>
인증파라미터 가이드
리턴 파라미터
enc_data
결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
enc_info
결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
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
결제 응답 전문의 경우 동일한 형태로 리턴됩니다.
승인요청 파라미터 가이드
승인요청 파라미터
site_cd
KCP발급 사이트(상점)코드
가입 시 발송해드리는 연동메일 참조 / 테스트코드 : T0000
kcp_cert_info
KCP 인증서정보(직렬화)
관리자 페이지에서 발급받은 인증서 정보(직렬화 하여 요청)
enc_data
결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
enc_info
결제창 인증결과 암호화 정보
통합 결제 창으로부터 전달 받는 인증결과 암호화 데이터
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
tran_cd
결제요청타입
통합 결제 창에서 처리하여 전달받는 상태 코드 값
※ 절대 임의로 변경 불가하며 결제 창에서 내려 주는 값을 그대로 사용 부탁 드립니다.
※ 해당 값은 KCP 시스템에서 추가 및 변경이 되는 값으로 상점에서 자체 관리가 불가한 값입니다.
pay_type
실제 결제수단
신용카드 : PACA
계좌이체 : PABK
가상계좌 : PAVC
휴 대 폰 : PAMC
ordr_no
실제주문번호
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'))
승인응답 파라미터 가이드
공통응답 파라미터
승인성공 파라미터
res_cd
결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴
res_msg
결과메세지
res_en_msg
영문 결과 메시지
pay_method
응답결제수단
신용카드 - PACA
계좌이체 - PABK
가상계좌 - PAVC
포인트 - PAPT
휴대폰 - PAMC
상품권 - PATK
카카오머니 - PAKM
네이버페이 포인트 - PANP
페이코 포인트 - PACP
tno
NHN KCP 거래 고유번호
※ 거래고유번호 전체로 사용 하시기 바랍니다.
(임의의 숫자나 파싱하여 사용 불가)
amount
결제 금액
결제 건의 총 결제 금액이 리턴 됩니다.
최종 결제 금액의 처리는 승인완료 후 리턴 데이터 중 amount 로 처리하여야 하며 반드시 업체의 DB금액과 비교하여 검증하시기 바랍니다
승인실패 파라미터
res_cd
결과코드
정상 승인이 이루어졌을 경우 ‘0000’ 값 리턴
res_msg
결과메세지
승인응답 파라미터
신용카드 결제 응답
card_cd
결제 건의 발급 사 코드
card_name
결제 건의 발급 사 명
card_no
결제 건의 카드번호 (카드번호 16자리 중 3번째구간은 마스킹)
app_no
결제 건의 승인번호
app_time
결제 건의 결제(승인) 시간
noinf
결제 건의 무이자 여부
noinf_type
noinf = Y 일 때 (무이자 결제인 경우)
카드사 이벤트 무이자인 경우 : CARD
상점 부담 무이자인 경우 : SHOP
quota
결제 건의 할부 기간
card_mny
결제 건의 총 결제금액 중 신용카드 결제금액
만약 총 결제금액(amount) 10000 원 중 쿠폰할인 2000 원 받았다면 card_mny=8000 이 됩니다.
*페이코 포인트, 쿠폰 100% 결제 시 card_mny=0 으로 리턴될 수 있으니 반드시
총 결제 금액 처리는 amount 금액으로 체크하시기 바랍니다.
coupon_mny
결제 건의 무이자 여부결제 건의 쿠폰 할인, 페이코 포인트 사용 금액
결제 건의 쿠폰 할인 금액 또는 페이코 포인트 사용 금액이 리턴됩니다.
만약 총 결제금액(amount) 10000 원 중 쿠폰 할인을 2000 원 받았다면 coupon_mny=2000 이 됩니다.
partcanc_yn
결제 건의 부분취소 가능 유무
card_bin_type_01
결제 건의 카드 구분 정보
개인 : 0 / 법인 : 1
card_bin_type_02
결제 건의 카드 구분 정보
일반 : 0 / 체크 : 1
isp_issuer_cd
ISP 계열 카드 발급 사 코드
BC96 : 케이뱅크카드
KM90 : 카카오뱅크카드
isp_issuer_nm
ISP 계열 카드 발급 사 명
카카오뱅크의 경우 카카오뱅크 케이뱅크의 경우 K뱅크카드로 리턴됨.
payco_point_mny
결제 건의 페이코 포인트 사용 금액
계좌이체 결제 응답
bankname
결제 건의 은행 명
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.
bankcode
결제 건의 은행코드
※ 테스트서버에서 계좌이체 테스트 시 금융결제원과 협의된 은행 코드로 리턴됩니다.
cash_authno
현금영수증 승인번호
NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 승인번호
cash_no
NHN KCP 결제 창에서 현금영수증 등록 요청한 결제 건의 현금영수증 거래번호
bk_mny
결제 건의 계좌이체 결제 금액
app_time
결제건의 계좌발급 시간
가상계좌 결제 응답
bankname
결제 건의 은행 명
bankcode
결제 건의 은행코드
account
결제 건의 가상계좌 번호
va_date
가상계좌 입금마감일
app_time
결제건의 계좌발급 시간
휴대폰 결제 응답
van_cd
결제 건의 결제 사 코드
van_id
결제 건의 실물/컨텐츠 구분
commid
결제 건의 통신사 코드
mobile_no
결제 건의 휴대폰 번호
포인트 결제 응답
pnt_amount
결제 건의 포인트 결제 금액
pnt_issue
결제 건의 결제 사 코드
pnt_app_no
결제 건의 포인트 승인번호
pnt_app_time
결제 건의 포인트 승인시각
pnt_receipt_gubn
결제 건의 현금영수증 등록유무
cash_authno
결제 건의 현금영수증 승인번호
add_pnt
결제 건의 적립/사용 포인트
use_pnt
결제 건의 가용 포인트
rsv_pnt
결제 건의 총 포인트
상품권 결제 응답
tk_mny
결제 건의 상품권 결제 금액
tk_van_code
결제 건의 결제 사 코드
tk_app_no
결제 건의 승인번호
tk_app_time
결제 건의 승인시간
현금영수증 응답
cash_authno
현금영수증 승인번호
cash_no
현금영수증 거래번호
승인처리 구성하기
승인처리 페이지 구성시 승인요청 서명데이터생성 망취소 결과처리 로직을 포함 할 수 있습니다.
망취소 로직은 거래취소 페이지를 참고 부탁 드리겠습니다.
서명데이터생성 로직은 참고사항의 서버인증서 페이지를 참고 부탁 드리겠습니다.
결제창 호출, 승인처리를 포함한 전체 샘플이 필요하신 경우 다운로드 자료실을 이용해 주세요.