클로드로 KCP 결제창 연동하기
개발 경험이 거의 없어도 NHN KCP 표준결제 결제창을 연동할 수 있도록, 환경 준비부터 거래등록·결제창 호출·승인·검증까지 단계별 프롬프트를 정리했습니다. 개발 언어를 선택한 뒤 1단계부터 차례대로 복사해 Claude Code에 입력하고, 각 단계의 정상 화면 기준을 확인하세요.
개발 언어 선택
연동하려는 개발 언어를 선택하면 아래 단계별 프롬프트가 해당 언어 기준으로 자동 변경됩니다.
컴퓨터 환경 차이는 1단계에서 Claude Code가 먼저 확인하도록 구성했습니다.
0단계 Claude Code 시작하기
프롬프트를 붙여넣으려면 먼저 Claude Code를 열어야 합니다.
비개발자라면 클로드 데스크톱 앱 또는 VS Code 확장 방식 중 익숙한 방법을 선택하세요.
1단계 개발 환경 만들기환경 설정
프로젝트 폴더를 만들고 선택한 언어의 로컬 서버를 실행할 수 있도록 준비합니다.
이 단계가 끝나면 브라우저에서 Hello KCP가 보여야 합니다. 화면이 열리지 않으면 서버 실행 명령어와 포트 번호를 Claude에 다시 확인시키세요.
NHN KCP 표준결제를 JSP로 연동할 프로젝트를 만들어줘. [목표] 내 컴퓨터에서 JSP 로컬 서버를 실행하고 브라우저에서 "Hello KCP" 화면을 확인합니다. [작업] - 현재 컴퓨터에서 JSP 실행 환경과 버전 확인 - 실행 환경이 없으면 현재 OS에 맞는 방법으로 직접 자동 설치까지 진행 - 자동 설치가 불가능한 경우에만 이유와 함께 쉬운 수동 설치 방법 안내 - 설치가 끝나면 버전과 정상 실행 여부까지 확인 - 프로젝트명: kcp-standard-pay - 프로젝트 구조: Tomcat 웹앱 프로젝트 - HTTP 요청과 JSON 처리를 위한 라이브러리 준비 - 첫 화면에 "Hello KCP" 문구 표시 - 세션은 HttpSession 방식으로 구성 [주의] - 중간에 확인받지 말고, 직접 만들 수 있는 파일과 설정은 바로 진행 - 내가 직접 클릭하거나 입력해야 하는 작업만 마지막에 따로 안내 - 선택한 언어와 현재 컴퓨터 환경이 맞지 않으면 이유와 준비 방법을 쉽게 설명 [완료 기준] Tomcat 실행 후 http://localhost:8080/kcp-standard-pay/ 접속 [완료 후 알려줄 것] - 만든 파일과 수정한 파일 - 실행 명령어와 접속 URL - 정상 화면 기준과 다음 단계 전 확인값 [정상 기준] 브라우저에서 Hello KCP 화면이 열리는지 확인합니다.
2단계 모바일 거래등록Mobile
주문 정보를 KCP에 등록하고 결제창 호출에 필요한 값을 받습니다.
이 단계가 끝나면 거래등록 응답에서 approvalKey와 PayUrl이 보여야 합니다. Code가 0000이 아닐 경우, 요청값과 Ret_URL을 먼저 확인하세요.
NHN KCP 표준결제 모바일 거래등록 기능을 만들어줘. [목표] 결제창을 띄우기 전에 주문 정보를 KCP 거래등록 API로 전송하고 approvalKey와 PayUrl을 받습니다. [만들 파일] - 주문 입력 화면: trade_reg.html - 거래등록 처리 파일: kcp_api_trade_reg.jsp [주문 입력값] - site_cd: T0000 - ordr_idxx: TEST + 현재 시각으로 자동 생성 - good_name: 운동화 - good_mny: 1004 - pay_method: CARD, BANK, MOBX 중 선택 - Ret_URL: 내 로컬 서버의 order_mobile.jsp 주소 - user_agent: 빈 값 [거래등록 처리] - 요청 URL: https://testsmpay.kcp.co.kr/trade/register.do - JSON POST 방식 - Content-Type: application/json; charset=utf-8 - 응답에서 Code, Message, approvalKey, PayUrl, traceNo 확인 - Code가 0000이면 approvalKey와 PayUrl을 order_mobile.jsp 화면으로 전달 - 실패하면 Code와 Message를 화면에 표시 [주의] - ordr_idxx, good_mny, pay_method, Ret_URL은 HttpSession에 저장 - 금액은 콤마나 원 표시 없이 숫자만 사용 - Ret_URL 뒤에 쿼리스트링을 붙이지 않기 [완료 기준] 거래등록 응답에서 Code=0000, approvalKey, PayUrl이 확인되어야 합니다. [완료 후 알려줄 것] - 만든 파일과 수정한 파일 - 실행 명령어와 접속 URL - 정상 화면 기준과 다음 단계 전 확인값 [정상 기준] 거래등록 결과 Code가 0000이고 approvalKey, PayUrl이 표시되는지 확인합니다.
3단계 모바일 결제창 호출Mobile
모바일 환경에서 거래등록 응답값으로 결제창을 호출합니다.
이 단계가 끝나면 모바일 결제창이 열리거나 인증 결과가 승인 화면으로 넘어가야 합니다.
앞 단계에서 받은 approvalKey와 PayUrl로 모바일 결제창 호출 화면을 만들어줘. [만들 파일] - 모바일 결제창 호출 및 인증 결과 수신 화면: order_mobile.jsp [결제창 호출] - 모바일 결제창은 팝업이나 iframe이 아니라 PayUrl로 form submit하여 화면 전체를 이동 - approvalKey는 결제창 호출 시 approval_key 이름으로 전달 - 필수 전송값: site_cd, ordr_idxx, good_mny, good_name, currency=410, pay_method, approval_key, Ret_URL, PayUrl - 선택값: shop_name=TEST SITE, buyr_name, buyr_tel2, buyr_mail, quotaopt=12, encoding_trans=UTF-8 [call_pay_form 처리] - encoding_trans가 UTF-8이면 PayUrl의 마지막 / 앞부분에 /jsp/encodingFilter/encodingFilter.jsp를 붙여 submit - /jsp/encodingFilter/encodingFilter.jsp 경로는 KCP 고정 경로이므로 언어가 달라도 변경 금지 [인증 결과 처리] - 페이지가 열릴 때 chk_pay 함수 실행 - chk_pay 맨 위에 self.name = "tar_opener"; 추가 - res_cd가 0000이면 enc_info, enc_data, tran_cd를 kcp_api_page.jsp로 전달 - res_cd가 3001이면 "사용자가 취소하였습니다" 표시 - 그 외 오류는 메시지를 보여주고 주문 입력 화면으로 이동 [주의] - enc_info와 enc_data는 KCP가 내려준 암호화 값이므로 절대 수정하지 않기 [완료 기준] 모바일 결제창으로 이동하거나 인증 결과가 kcp_api_page.jsp 화면으로 전달되어야 합니다. [완료 후 알려줄 것] - 만든 파일과 수정한 파일 - 실행 명령어와 접속 URL - 정상 화면 기준과 다음 단계 전 확인값 [정상 기준] 모바일 결제창으로 이동하거나 인증 결과가 승인 처리 화면으로 넘어가는지 확인합니다.
4단계 PC 결제창 호출PC
PC 환경에서 KCP 결제창 스크립트로 결제창을 실행합니다. 결제창 호출 후, 카드사를 선택할 때 카드사별 보안 프로그램 설치가 요구될 수 있습니다.
이 단계가 끝나면 PC 결제창이 정상적으로 떠야 합니다. 결제창이 안 뜨면 스크립트 주소와 m_Completepayment 함수명을 확인하세요.
NHN KCP 표준결제 PC 결제창 호출 화면을 만들어줘.
[목표]
PC 환경에서 KCP 결제창 스크립트를 불러와 결제창을 실행하고 인증 결과를 받습니다.
[만들 파일]
- PC 결제창 호출 화면: order.html
[결제창 스크립트]
- 테스트 주소: https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js
[주문 입력값]
- site_cd: T0000
- site_name: TEST SITE
- ordr_idxx: TEST + 현재 시각으로 자동 생성
- good_name: 운동화
- good_mny: 1004
- quotaopt: 12
- buyr_name, buyr_tel2, buyr_mail 입력
- pay_method: 신용카드 100000000000, 계좌이체 010000000000, 휴대폰 000010000000 중 선택
- 결제창이 채울 빈 값: res_cd, res_msg, enc_info, enc_data, tran_cd
[필수 함수]
- m_Completepayment(FormOrJson, closeEvent): 이름 변경 금지, 결제창 JS보다 먼저 선언
- GetField(frm, FormOrJson)로 결과값을 주문 폼에 채우기. 넘어온 FormOrJson을 직접 쓰지 말고 GetField로 frm에 채운 값만 사용
- res_cd가 0000이면 kcp_api_page.jsp로 submit
- 실패하면 res_cd와 res_msg를 보여주고 closeEvent() 호출
- jsf__pay(form): try { KCP_Pay_Execute_Web(form); } catch(e){} 형태로 실행. 정상 실행 시에도 throw가 발생하므로 catch는 비워두기
[주의]
- 결제 요청 시 ordr_idxx, good_mny, pay_method를 HttpSession에 저장
- transform, filter, perspective 같은 CSS는 상위 요소에 적용하지 않기
- KCP 함수명에는 변경 금지 주석 추가
[완료 기준]
PC 결제창이 열리고 인증 완료 후 kcp_api_page.jsp 화면으로 이동해야 합니다.
[완료 후 알려줄 것]
- 만든 파일과 수정한 파일
- 실행 명령어와 접속 URL
- 정상 화면 기준과 다음 단계 전 확인값
[정상 기준] PC 결제창이 열리고 인증 완료 후 승인 처리 화면으로 이동하는지 확인합니다.5단계 결제 승인 처리공통
결제창 인증 결과로 KCP 승인 서버에 최종 승인을 요청합니다.
5단계 프롬프트를 입력 후, 테스트용 서비스인증서 pem 파일도 함께 업로드 하세요.
이 단계가 끝나면 승인 성공 결과에 res_cd 0000과 거래번호가 표시되어야 합니다.
만약 8350 오류가 발생한다면 6단계 결제 검증 규칙을 적용하고, 결제가 실패한다면 인증서 경로와 승인 URL을 확인하세요.
PC와 모바일이 함께 사용하는 결제 승인 처리 화면을 만들어줘. [목표] 결제창 인증 결과로 받은 enc_data, enc_info, tran_cd를 이용해 KCP 승인 서버에 최종 승인을 요청합니다. [만들 파일] - 승인 처리 화면: kcp_api_page.jsp [승인 요청] - 테스트 URL: https://stg-spl.kcp.co.kr/gw/enc/v1/payment - HTTP POST - Content-Type: application/json - Accept-Charset: UTF-8 [요청 JSON] - site_cd: T0000 - kcp_cert_info: 서비스 인증서 파일 /WEB-INF/cert/splCert.pem 을 읽어 한 줄 문자열로 만든 값 - enc_data, enc_info, tran_cd: 결제창에서 받은 값 그대로 사용 - ordr_mony: HttpSession에 저장된 실제 결제금액 - ordr_no: HttpSession에 저장된 주문번호 - pay_type: HttpSession에 저장된 결제수단을 승인용 코드로 변환한 값 [pay_type 변환] - 신용카드 → PACA - 계좌이체 → PABK - 휴대폰 → PAMC [응답 처리] - res_cd가 0000이면 승인 성공 처리 - tno, amount, pay_method, card_cd, card_name, card_no, app_no, quota 등을 화면에 표시 - 성공 후에도 KCP 응답 amount와 세션에 저장된 금액이 같은지 한 번 더 확인 - 실패하면 res_cd와 res_msg 표시 [주의] - kcp_cert_info는 외부에 노출되면 안 되는 보안값이므로 하드코딩 금지 - kcp_cert_info를 만들 때 \n 같은 이스케이프 문자열을 넣지 말고, 줄바꿈 자체를 제거해 한 줄로 이어붙이기 - kcp_api_page.jsp에 사용자가 직접 주소로 접근하면 처리하지 않기 - 인증서와 로그가 웹에서 다운로드되지 않도록 주의 - enc_data, enc_info, tran_cd는 수정 금지 값으로 처리 - 실제 서비스에서는 승인 결과를 DB에 저장해야 한다는 주석 추가 [완료 기준] 승인 성공 시 res_cd=0000과 거래번호가 화면에 표시되어야 합니다. [완료 후 알려줄 것] - 만든 파일과 수정한 파일 - 실행 명령어와 접속 URL - 정상 화면 기준과 다음 단계 전 확인값 [정상 기준] 승인 결과 res_cd가 0000이고 거래번호가 표시되는지 확인합니다.
6단계 결제건 검증 규칙 적용공통
8350 오류 발생 방지를 위해 승인 전후로 금액·결제수단·주문번호가 일치하는지 확인하는 검증 규칙을 적용합니다.
이 단계가 끝나면 신용카드·계좌이체·휴대폰 테스트에서 금액, 결제수단, 주문번호 검증을 통과하여 8350 오류가 발생하지 않아야 합니다.
KCP 결제 검증 규칙을 적용해줘. [목표] 결제창에 보낸 값과 승인 요청 값이 일치하는지 확인해 8350 오류를 방지합니다. [검증 기준] - 결제금액: 결제창 good_mny == 승인요청 ordr_mony - 결제수단: 결제창 pay_method == 승인요청 pay_type - 주문번호: 결제창 ordr_idxx == 승인요청 ordr_no [결제수단 변환표] - PC 신용카드 100000000000 / 모바일 CARD → PACA - PC 계좌이체 010000000000 / 모바일 BANK → PABK - PC 휴대폰 000010000000 / 모바일 MOBX → PAMC [작업] - 모바일 거래등록과 PC 결제 요청 시 ordr_idxx, good_mny, pay_method를 HttpSession에 저장 - 승인 요청에서는 화면에서 넘어온 값보다 HttpSession에 저장된 값을 우선 사용 - pay_type을 고정하지 말고 저장된 pay_method 기준으로 변환 - 변환표에 없는 값이면 승인 요청을 보내지 않고 오류 처리 - KCP 승인 요청 전 서버에서 금액, 결제수단, 주문번호 일치 여부 확인 - 하나라도 다르면 승인 요청을 중단하고 어떤 값이 다른지 로그로 남기기 - 신용카드, 계좌이체, 휴대폰 테스트 방법을 마지막에 정리 [주의] - 인증서, 개인정보, enc_data 전문은 로그에 남기지 않기 - PC와 모바일 흐름 모두에 적용 - 수정한 부분에는 "결제 검증 보완" 주석 추가 [완료 기준] 신용카드, 계좌이체, 휴대폰 모두 금액·주문번호·결제수단 검증이 통과해야 합니다. [완료 후 알려줄 것] - 만든 파일과 수정한 파일 - 실행 명령어와 접속 URL - 정상 화면 기준과 다음 단계 전 확인값 [정상 기준] 신용카드, 계좌이체, 휴대폰 모두 금액·결제수단·주문번호 검증이 통과하는지 확인합니다.
단계별 정상 화면 예시




막혔을 때 Claude에게 다시 물어보는 방법은 무엇인가요?
오류가 발생하면 “안 돼요”라고만 입력하지 말고, 현재 단계·오류 메시지·화면 상태·직전에 실행한 내용을 한 번에 전달하세요.
그래야 Claude가 원인을 좁혀서 바로 수정할 수 있습니다.
현재 단계
예: 2단계 모바일 거래등록을 진행 중입니다.
오류 메시지
터미널·브라우저 콘솔·KCP 응답 메시지를 그대로 붙여넣으세요.
현재 화면
가능하면 화면 캡처를 함께 첨부하세요.
직전에 한 일
복사한 프롬프트, 실행한 명령어, 접속한 URL을 알려주세요.
오류 질문 템플릿
나는 지금 KCP 표준결제 결제창 연동 가이드의 [단계명]을 진행 중이야. 1. 발생한 오류 [오류 메시지를 그대로 붙여넣기] 2. 현재 화면 상태 [브라우저 화면 / Claude가 출력한 내용 / KCP 응답값] 3. 직전에 실행한 내용 [복사한 프롬프트 / 실행 명령어 / 접속 URL] 아래 기준으로 답변해줘. - 오류 원인을 비개발자도 이해할 수 있게 설명 - 내가 직접 확인해야 하는 것 - 네가 코드에서 수정해야 하는 것 - 수정 후 다시 확인할 화면 또는 URL - 다음 단계로 넘어가도 되는지 여부
상황별로 함께 보내면 좋은 정보
| 상황 | 함께 보내면 좋은 정보 |
|---|---|
| 결제창이 안 열릴 때 | 브라우저 콘솔 오류, kcp_spay_hub.js 로드 여부, 버튼 클릭 시 반응 |
| 거래등록이 실패할 때 | KCP 응답 코드, 요청 JSON, Ret_URL, site_cd 값 |
| 승인이 실패할 때 | res_cd, res_msg, enc_data·enc_info 수신 여부, 서비스 인증서 경로 |
| 8350 오류가 날 때 | 결제창에 보낸 금액·주문번호·결제수단과 승인 요청값 |
비개발자를 위해 용어 설명을 해주세요.
프롬프트 안에서 자주 등장하는 용어를 먼저 이해하면 Claude가 만든 결과를 확인하기 쉬워집니다.
거래등록
모바일 결제창을 열기 전에 주문 정보를 KCP에 미리 등록하는 단계입니다.
approvalKey
거래등록 성공 후 KCP가 주는 결제창 호출용 키입니다. 결제창에는 approval_key라는 이름으로 전달합니다.
enc_data / enc_info
결제창 인증 결과로 내려오는 암호화 값입니다. 절대 수정하지 않고 승인 요청에 그대로 사용합니다.
세션
결제 중간에 주문번호, 금액, 결제수단을 서버에 잠시 저장하는 공간입니다.
Ret_URL
모바일 결제창 인증이 끝난 뒤 결과를 돌려받는 가맹점 주소입니다.
pay_type
승인 요청 때 사용하는 KCP 결제수단 코드입니다. CARD, BANK, MOBX를 PACA, PABK, PAMC로 바꿔 보냅니다.
운영환경으로 전환하는 방법은 무엇인가요?
KCP 운영환경으로 전환하기 위해서는 먼저 KCP와의 계약을 진행하셔야 합니다.
KCP 간편신청으로 빠르게 계약을 진행해 보세요.
계약을 완료하셨다면, 온보딩 페이지를 참고하시어 운영환경 값으로 교체하세요.
| 항목 | 테스트 | 운영 |
|---|---|---|
| 사이트코드 | T0000 | 계약 후 발급된 실제 사이트코드 |
| 거래등록 URL | testsmpay.kcp.co.kr | smpay.kcp.co.kr |
| PC 결제창 JS | testspay.kcp.co.kr | spay.kcp.co.kr |
| 승인 URL | stg-spl.kcp.co.kr | spl.kcp.co.kr |
| 서비스 인증서 | 테스트 인증서 | 파트너관리자에서 발급한 운영 인증서 |
테스트 환경 값
프롬프트를 통해 테스트 환경을 구현할 경우, 아래 테스트 값들이 사용됩니다.
실제 운영 환경에서는 계약 후 발급받은 값으로 변경해야 합니다.
| 항목 | 테스트 값 | 설명 |
|---|---|---|
| 사이트코드 | T0000 | KCP 테스트 가맹점 코드입니다. |
| 서비스인증서 | 테스트용 서비스인증서 다운로드 | KCP 테스트 서비스 인증서입니다. |
| 거래등록 URL | https://testsmpay.kcp.co.kr/trade/register.do | Mobile 결제창 호출 전에 주문을 등록하는 주소입니다. |
| PC 결제창 JS | https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js | PC 결제창을 호출하는 KCP 스크립트입니다. |
| 승인 URL | https://stg-spl.kcp.co.kr/gw/enc/v1/payment | 결제창 인증 후 최종 승인을 요청하는 주소입니다. |
