Guide > API 전환 가이드
REST API 전환 가이드
REST API 전환 가이드
KCP 결제 통신 방식이 TCP/IP에서 HTTPS로 변경됨에 따라, ppcli에서 REST API로 전환 작업을 해 주셔야 합니다.
주요 변경 사항은 API URL, 인증서 적용, 요청 데이터 세팅이며, NHN KCP 샘플 내에 승인 요청 페이지명은 pp_cli_hub입니다.
아래 결제 승인 및 취소 API 전환 방법을 참고해 주세요.
결제 승인 변경 사항
1. API URL
ppcli 모듈 내 g_conf_gw_url을 제거한 후, 아래와 같이 새로운 승인 요청 URL을 추가합니다.
- -테스트:
https://stg-spl.kcp.co.kr/gw/enc/v1/payment - -운영:
https://spl.kcp.co.kr/gw/enc/v1/payment
String target_URL = "https://stg-spl.kcp.co.kr/gw/enc/v1/payment";
2. 인증서 적용
ppcli 모듈 내 site_key를 제거한 후, 파트너 관리자에서 발급한 서비스 인증서(kcp_cert_info)를 추가합니다.
서비스 인증서와 개인 키는 가맹점 인증을 위해 사용됩니다.
- -파트너 관리자에서 발급한 서비스 인증서와 개인키는 다운로드 폴더에 저장됩니다.
- -다운로드 폴더 경로 : C:\Users\사용자명\Downloads
String kcp_cert_info = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmg...bazMZEyj2O42hw==-----END CERTIFICATE-----";
3. 요청 데이터 세팅
ppcli 라이브러리 객체 대신 JSON 객체에 승인 요청 데이터를 담아 POST 방식으로 전송합니다.
// REST API 요청 JSON 생성 및 필수 파라미터 설정 JSONObject json_req = new JSONObject(); json_req.put("kcp_cert_info", kcp_cert_info); json_req.put("site_cd", site_cd); json_req.put("tran_cd", tran_cd); json_req.put("enc_data", enc_data); json_req.put("enc_info", enc_info); // 결제 검증 파라미터 json_req.put("ordr_mony", "1004"); json_req.put("pay_type", "PACA"); String temp_req_data = json_req.toString(); String req_data = temp_req_data.replace(",",",\r\n"); String inputLine = null; StringBuffer outResult = new StringBuffer(); // HTTPS POST 방식으로 승인 요청 URL url = new URL(target_URL); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); OutputStream os = conn.getOutputStream(); os.write(req_data.getBytes("UTF-8")); os.flush();
+ 응답 데이터 추출
ppcli 라이브러리의 응답 조회 방식 대신 JSON 응답을 파싱하여 값을 추출합니다.
// API 응답 데이터를 문자열로 변환 String temp_result = outResult.toString(); // JSON 응답을 파싱하여 값 추출 JSONObject res = (JSONObject) new JSONParser().parse(temp_result); res_cd = (String) res.get("res_cd"); res_msg = (String) res.get("res_msg"); pay_method = (String) res.get("pay_method"); // 카드 결제 응답 예시 card_cd = (String) res.get("card_cd"); card_name = (String) res.get("card_name"); app_time = (String) res.get("app_time");
결제 취소 변경 사항
1. API URL
- -테스트:
https://stg-spl.kcp.co.kr/gw/mod/v1/cancel - -운영:
https://spl.kcp.co.kr/gw/mod/v1/cancel
2. 인증서 적용
ppcli 모듈 내 site_key를 제거한 후, 파트너 관리자에서 발급한 서비스 인증서(kcp_cert_info)를 추가합니다.
서비스 인증서와 개인 키는 가맹점 인증을 위해 사용됩니다.
String kcp_cert_info = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmg...bazMZEyj2O42hw==-----END CERTIFICATE-----";
3. 서명데이터 생성
서명데이터(kcp_sign_data)는 가맹점 부인 방지와 요청 데이터의 무결성 검증을 위한 데이터입니다.
kcp_sign_data = site_cd + "^" + tno + "^" + mod_type 규칙으로 원문을 조합한 뒤, 개인키로 SHA256withRSA 서명을 생성하고 Base64로 인코딩하여 전달합니다.
코드 예시(JSP)
아래는 Java(JSP) 환경에서 서명데이터를 생성하는 예시입니다.
// 개인 키 경로 및 비밀번호 String filePath = "C:/.../certificate/splPrikeyPKCS8.pem"; String privateKeyPassword = "changeit"; // 서명데이터 생성 public static String makeSignatureData(String targetData){ String signData = null; PrivateKey priKey = null; priKey = loadSplMctPrivateKeyPKCS8(); byte[] btArrTargetData = targetData.getBytes( StandardCharsets.UTF_8 ); try { Signature sign = Signature.getInstance( "SHA256WithRSA" ); sign.initSign( priKey ); sign.update( btArrTargetData ); byte[] btArrSignData = sign.sign(); signData = Base64.getEncoder().encodeToString( btArrSignData ); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (SignatureException e) { e.printStackTrace(); } return signData; } // 서명데이터 생성 호출 String cancel_target_data = site_cd + "^" + tno + "^" + mod_type; String kcp_sign_data = makeSignatureData(cancel_target_data);
4. 요청 데이터 세팅
ppcli 라이브러리 객체 대신 JSON 객체에 취소 요청 데이터를 담아 POST 방식으로 전송합니다.
// REST API 요청 JSON 생성 및 필수 파라미터 설정 JSONObject json_req = new JSONObject(); json_req.put("kcp_cert_info", kcp_cert_info ); json_req.put("site_cd" , site_cd ); json_req.put("mod_type" , mod_type ); json_req.put("mod_ip" , mod_ip ); json_req.put("tno" , tno ); json_req.put("mod_desc" , mod_desc ); json_req.put("kcp_sign_data", kcp_sign_data ); if (mod_type.equals("STPC")) { json_req.put("mod_mny", mod_mny ); json_req.put("rem_mny", rem_mny ); } String req_data = json_req.toString(); String inputLine = null; StringBuffer outResult = new StringBuffer(); // HTTPS POST 방식으로 취소 요청 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();