키움결제 테스트

This commit is contained in:
이경숙
2026-03-23 16:04:25 +09:00
parent ef4f5f473c
commit b0b9ae46be
6 changed files with 802 additions and 3 deletions

View File

@@ -32,6 +32,7 @@ import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder;
import org.bouncycastle.operator.InputDecryptorProvider;
import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -1468,10 +1469,94 @@ public class BOPayService{
}
/* ============================================================================== */
/* = 여기서 부터 Kiwoom
/* = -------------------------------------------------------------------------- = */
/**
* Kiwoom 결제
* @param BOPayVO
*/
public Map<String, Object> insertKiwoomPay(BOPayVO payVO) throws Exception {
//관련 키값 DB 조회
/*DataMap resultMap = selectPayLink(payVO.getSopmalCd());
String reSetleAmt = StringUtil.isNullToString(selectRlSetleAmt(payVO.getSopmalCd(),payVO.getOrderId()));
reSetleAmt = reSetleAmt.isEmpty()? "10" : reSetleAmt; //0원은 정상거래로 인정되어서 10원으로 지정함*/
log.info("insertKiwoomPay step1 ");
String cpId = f_get_parm( payVO.getCpId());
String payMethod = f_get_parm( payVO.getPayMethod());
String orderNo = f_get_parm( payVO.getOrderId());
String type = f_get_parm( payVO.getType());
String amount = f_get_parm( payVO.getAmount());
JSONObject jsonObj = new JSONObject();
jsonObj.put("CPID", cpId);
jsonObj.put("PAYMETHOD", payMethod);
jsonObj.put("ORDERNO", orderNo);
jsonObj.put("TYPE", type);
jsonObj.put("AMOUNT", amount);
log.info("insertKiwoomPay step2 ::: {}", jsonObj);
//결제등록 요청시 실결제값(good_mny)
/*String payType = getPayMethod(payVO.getPayMethod());
jsonReq.put("ordr_mony", reSetleAmt); // ** 결제금액 유효성 검증 **
jsonReq.put("pay_type", payType); // ** 결제수단 유효성 검증 **
jsonReq.put("ordr_no", payVO.getOrderId()); // ** 주문번호검증 **
*/
String kiwoom_ENC = "";
try {
String url = "https://apitest.kiwoompay.co.kr/pay/hash";
URL goUrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) goUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
os.write((jsonObj.toString()).getBytes("euc-kr"));
os.flush();
os.close();
int responseCode = con.getResponseCode();
if (responseCode == 200) {
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response1 = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response1.append(inputLine);
}
in.close();
JSONObject jObj = (JSONObject) JSONValue.parse(response1.toString());
kiwoom_ENC = (String) jObj.get("KIWOOM_ENC");
log.info("insertKiwoomPay step3 ::: {}", jObj);
}
con.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
JSONObject resultObj = new JSONObject();
resultObj.put("KIWOOM_ENC", kiwoom_ENC);
log.info("insertKiwoomPay step4 ::: {}", resultObj.get("KIWOOM_ENC"));
return new HashMap<>() {{
put("response", resultObj.toString());
}};
}

View File

@@ -292,6 +292,9 @@ public class BOPayVO extends AbstractVO {
/** 테스트 여부 - 테스트용 */
private String testAt;
/** 키움 - 상점ID */
private String cpId;
// cookie
/** 에이전트 ID */

View File

@@ -22,9 +22,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.sopmal.ordr.vo.PayVO;
@@ -630,4 +628,164 @@ public class PayController {
return message;
}
/* *********************************************
* 키움결제
********************************************* */
/**
* 키움 결제 화면
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomSimple")
public String selectKiwoonPay(ModelMap model) throws Exception {
log.debug("selectKiwoonPay = {}");
return "sopmal/ordr/PayKiwoomPayC";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomSimple2")
public String selectKiwoonPay2(ModelMap model) throws Exception {
log.debug("selectKiwoonPay = {}");
return "sopmal/ordr/PayKiwoomPay2C";
}
/**
* 키움 결제 연계 전 getEnc 값 받아오기
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@ResponseBody
@RequestMapping(value="/kiwoomPayGetEnc")
public Map<String, Object> selectKiwoomGetEnc(HttpServletRequest request) throws Exception {
BOPayVO payVO = new BOPayVO();
log.debug("kiwoomPayGetEnc = {}");
payVO.setCpId(request.getParameter("CPID"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setType(request.getParameter("TYPE"));
payVO.setAmount(request.getParameter("AMOUNT"));
Map<String, Object> message;
String sopmalCd = payVO.getSopmalCd();
try {
message = service.insertKiwoomPay(payVO);
} catch (Exception e) {
message = new HashMap<>() {{
put("response", "결제를 실패하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}
log.info("insertKiwoomPay step5 ::: {}", message.get("KIWOOM_ENC"));
//model.addAttribute("message", message);
//return "sopmal/ordr/PayKiwoomSucsC";
return message;
}
/**
* 키움 결제 연계처리 - 결과통보페이지
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPayWebhook")
@ResponseBody
public ResponseEntity<String> selectPaymentkiwoomWebhook(HttpServletRequest request) throws Exception {
String resultCode = request.getParameter("RESULTCODE");
String orderNo = request.getParameter("ORDERNO");
String amount = request.getParameter("AMOUNT");
System.out.println("콜백 수신");
System.out.println("RESULTCODE = " + resultCode);
System.out.println("ORDERNO = " + orderNo);
System.out.println("AMOUNT = " + amount);
/* 실제 처리해야 되는 부분
// 1. 주문 조회
Order order = orderService.find(orderNo);
// 2. 중복 방지
if ("PAID".equals(order.getStatus())) return "OK";
// 3. 금액 검증
if (!order.getAmount().equals(Integer.parseInt(amount))) {
order.setStatus("FAIL");
return "OK";
}
// 4. 성공 처리
if ("0000".equals(resultCode)) {
order.setStatus("PAID");
} else {
order.setStatus("FAIL");
}
orderService.save(order);
*/
String response = "<html><body><RESULT>SUCCESS</RESULT></body></html>";
return ResponseEntity.ok()
.contentType(MediaType.TEXT_HTML)
.body(response);
}
/**
* 키움 결제 연계처리 - 성공결과페이지
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPaySuccss")
public String confirmPaymentkiwoom(HttpServletRequest request, ModelMap model) throws Exception {
BOPayVO payVO = new BOPayVO();
payVO.setCode(request.getParameter("RESULTCODE"));
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setAmount(request.getParameter("AMOUNT"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
Map<String, Object> message = new HashMap<>();
/*String sopmalCd = payVO.getSopmalCd();
try {
message = service.insertKcpPay(payVO);
} catch (Exception e) {
message = new HashMap<>() {{
put("response", "결제를 실패하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}*/
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", payVO.getCode());
jsonObject.put("orderId", payVO.getOrderId());
jsonObject.put("amount", payVO.getAmount());
jsonObject.put("payMethod", payVO.getPayMethod());
message.put("response",jsonObject.toString());
model.addAttribute("message", message);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/pay/kcpPayProc", payVO),
// model,
// "message"
// );
return "sopmal/ordr/PayKiwoomSucsC";
}
}

View File

@@ -0,0 +1,51 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : PayKiwoomPayC.jsp
Description : 키움 결제창
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026-03-18 이경숙 최초 생성
--%>
<html>
<head>
</head>
<body>
<script src="https://ssl-v2.kiwoompay.co.kr/sdk/v1/latest/kiwoompayEnc.js"
charset="EUC-KR"></script>
<script type="text/javascript">
function pay(){
KiwoomPaySDK.f_setInit("DEV","FRAME");
KiwoomPaySDK.f_payTotalLink({
//결제요청HASH값
"KIWOOM_ENC":"NmUwM2Q5YmZlZjhiNjA4ZDRlM2ZkNjA4MDdkYzI1ZjQxNDgxYmI5MDM0MjViYzM3NjQ4ZWM0MDllOTZkMGMwNQ=="
//P:PC/M:모바일/W:웹뷰
,"TYPE":"P"
//키움페이 발행 상점ID
,"CPID":"CTS18629"
//상점 주문번호
,"ORDERNO":"202504214170324"
//결제금액
,"AMOUNT":"1004"
//상품명
,"PRODUCTNAME":"결제테스트"
//사용자아이디
,"USERID":"USERID"
//결제 완료창에서 이동할 URL
,"HOMEURL":"https://pg.kiwoompay.co.kr"
});
}
</script>
<button onclick="pay()">결제창호출</button>
</body>
</html>

View File

@@ -0,0 +1,446 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : PayKiwoomPayC.jsp
Description : 키움 결제창
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026-03-18 이경숙 최초 생성
--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>통합LINK(보안 결제 창)</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Pragma" content="no-cache" />
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<style type="text/css">
</style>
<script type="text/javascript" language="javascript">
var pf;
function init() {
//alert(navigator.userAgent);
pf = document.payForm;
pf.ORDERNO.value = getTimeStamp();
}
function pay() {
pf = document.payForm;
// 입력값 가져오기
var CPID = pf.CPID.value;
var PAYMETHOD = pf.PAYMETHOD.value;
var ORDERNO = pf.ORDERNO.value;
var TYPE = pf.TYPE.value;
var AMOUNT = pf.AMOUNT.value;
const url = '<c:url value="/sopmal/pay/kiwoomPayGetEnc"/>';
// AJAX로 kiwoom_ENC 값 요청
$.ajax({
url : url, // 새로 만들어줄 JSP
type : "POST",
dataType : "json",
data : {
CPID : CPID,
PAYMETHOD : PAYMETHOD,
ORDERNO : ORDERNO,
TYPE : TYPE,
AMOUNT : AMOUNT
},
success : function(res) {
console.log("response :::::",res);
console.log("response KIWOOM_ENC :::::",JSON.parse(res.response).KIWOOM_ENC);
var enc = JSON.parse(res.response).KIWOOM_ENC;
if (enc) {
// kiwoom_ENC 값 입력
pf.KIWOOM_ENC.value = enc;
console.log("response enc :::::",enc);
// 결제창 URL 설정
var PayServer = pf.SERVER.value;
var PayType = pf.TYPE.value;
var fileName = "";
console.log("response PayServer :::::", PayServer);
console.log("response PayType :::::", PayType);
if (PayServer === "DEV") {
fileName = "https://apitest.kiwoompay.co.kr/pay/linkEnc";
} else if (PayServer === "LIVE") {
fileName = "https://api.kiwoompay.co.kr/pay/linkEnc";
}
console.log("response fileName :::::", fileName);
if (PayType === "P") {
var KIWOOMPAY = window.open("", "KIWOOMPAY", "width=468,height=750");
pf.target = "KIWOOMPAY";
} else if (PayType === "M" || PayType === "W") {
pf.target = "_self";
}
pf.HOMEURL.value="https://sake1jan.com/sopmal/pay/kiwoomPaySuccss";
pf.FAILURL.value="";
pf.action = fileName;
pf.method = "post";
pf.submit();
} else {
alert("결제 정보를 가져오지 못했습니다.");
}
},
error : function(xhr, status, error) {
console.log("AJAX Error:", error);
alert("파일을 연동바랍니다.");
}
});
}
function getTimeStamp() {
var d = new Date();
var month = d.getMonth() + 1
var date = d.getDate()
var hour = d.getHours()
var minute = d.getMinutes()
var second = d.getSeconds()
month = (month < 10 ? "0" : "") + month;
date = (date < 10 ? "0" : "") + date;
hour = (hour < 10 ? "0" : "") + hour;
minute = (minute < 10 ? "0" : "") + minute;
second = (second < 10 ? "0" : "") + second;
var s = d.getFullYear() + month + date + hour + minute + second
return s;
}
</script>
</head>
<body onLoad="init();">
<form name="payForm">
<table style="width: 100%; border: 1px; cellspacing: 0; cellpadding: 0">
<colgroup>
<col width="160px" />
<col width="*" />
</colgroup>
<tr>
<td></td>
<br />
<td><input type=button value="결제하기" onClick="pay()" width="63" height="25"></td>
</tr>
</table>
<br />
<table style="width: 100%; border: 1px; cellspacing: 0; cellpadding: 0">
<colgroup>
<col width="160px" />
<col width="180px" />
<col width="*" />
</colgroup>
<tr>
<td colspan="3" style=""><b>----------공통항목(필수)</b></td>
</tr>
<tr>
<td><b>파라미터</b></td>
<td><b>값</b></td>
<td><b>설명</b></td>
</tr>
<tr>
<td>서버</td>
<td><select name="SERVER">
<option value="DEV">개발
<option value="LIVE">운영
</select></td>
<td>서버환경</td>
</tr>
<tr>
<td>TYPE</td>
<td><select name="TYPE">
<option value="P">일반
<option value="M">모바일
<option value="W">웹뷰
</select></td>
<td>결제방식(P:PC/M:모바일/W:웹뷰)</td>
</tr>
<tr>
<td>PAYMETHOD</td>
<td><input type="text" name="PAYMETHOD" placeholder="매뉴얼에 있는 결제수단별 PAYMETHOD확인"></td>
<td>결제수단</td>
</tr>
<tr>
<td>CPID</td>
<td><input type="text" name="CPID" placeholder="키움페이에서 발급받은 테스트ID입력" value="CTS18056"></td>
<td>상점아이디</td>
</tr>
<tr>
<td>ORDERNO</td>
<td><input type="text" name="ORDERNO" value=""></td>
<td>주문번호</td>
</tr>
<tr>
<td>PRODUCTTYPE</td>
<td><input type="text" name="PRODUCTTYPE" placeholder="1"></td>
<td>상품구분(1: 디지털, 2: 실물)</td>
</tr>
<tr>
<td>AMOUNT</td>
<td><input type="text" name="AMOUNT" placeholder="1004"></td>
<td>결제금액</td>
</tr>
<tr>
<td>PRODUCTNAME</td>
<td><input type="text" name="PRODUCTNAME" placeholder="테스트상품"></td>
<td>상품명</td>
</tr>
<tr>
<td>PRODUCTCODE</td>
<td><input type="text" name="PRODUCTCODE" placeholder="10001"></td>
<td>상품코드</td>
</tr>
<tr>
<td>USERID</td>
<td><input type="text" name="USERID" placeholder="test테스터"></td>
<td>고객 ID</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------공통항목(선택)</b></td>
</tr>
<tr>
<td>KIWOOM_ENC</td>
<td><input type="text" name="KIWOOM_ENC" value=""></td>
<td>보안 기능</td>
</tr>
<tr>
<td>EMAIL</td>
<td><input type="text" name="EMAIL" value=""></td>
<td>고객 이메일</td>
</tr>
<tr>
<td>USERNAME</td>
<td><input type="text" name="USERNAME" placeholder="고객이름"></td>
<td>고객명</td>
</tr>
<tr>
<td>RESERVEDINDEX1</td>
<td><input type="text" name="RESERVEDINDEX1" placeholder="예약어1"></td>
<td>예약항목</td>
</tr>
<tr>
<td>RESERVEDINDEX2</td>
<td><input type="text" name="RESERVEDINDEX2" placeholder="예약어2"></td>
<td>예약항목</td>
</tr>
<tr>
<td>RESERVEDSTRING</td>
<td><input type="text" name="RESERVEDSTRING" placeholder="RESERVED STRING"></td>
<td>예약스트링</td>
</tr>
<tr>
<td>HOMEURL</td>
<td><input type="text" name="HOMEURL" placeholder="https://www.naver.com"></td>
<td>결제 성공 후, 이동할 URL(결제 창에서 이동)</td>
</tr>
<tr>
<td>DIRECTRESULTFLAG</td>
<td><input type="text" name="DIRECTRESULTFLAG" value=""></td>
<td>키움페이 결제 완료 창 없이 HOMEURL로 바로 이동(Y/N)</td>
</tr>
<tr>
<td>SET_LOGO</td>
<td><input type="text" name="SET_LOGO" value=""></td>
<td>결제 창 하단 상점로고 URL</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------웹뷰결제창(필수)</b></td>
<tr>
<td>HOMEURL</td>
<td>공통항목(선택)에 있음</td>
<td>결제 성공 후, 이동할 URL(결제 창에서 이동)</td>
</tr>
<tr>
<td>CLOSEURL</td>
<td><input type="text" name="CLOSEURL" placeholder="https://www.daum.net"></td>
<td>결제 창에서 취소 누를 시 이동할 URL</td>
</tr>
<tr>
<td>FAILURL</td>
<td><input type="text" name="FAILURL" placeholder="https://www.nate.com"></td>
<td>결제실패 후, 확인버튼 입력 시 이동할 URL</td>
</tr>
<tr>
<td>APPURL</td>
<td><input type="text" name="APPURL" value=""></td>
<td>인증완료 후 돌아갈 앱의 URL(CARD(K), BANK 필수)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------신용카드(필수)</b></td>
</tr>
<tr>
<td>TAXFREECD</td>
<td><input type="text" name="TAXFREECD" placeholder="00"></td>
<td>과세/비과세여부(00: 과세, 01: 비과세, 02: 복합과세)</td>
</tr>
<tr>
<td>TELNO2</td>
<td><input type="text" name="TELNO2" value=""></td>
<td>비과세 대상금액(TAXFREECD가 02인 경우에만 필수전송)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------신용카드(조건부 필수)</b></td>
</tr>
<tr>
<td>BILLTYPE</td>
<td><input type="text" name="BILLTYPE" value=""></td>
<td>CARD(K)-SUGI, CARD(K)-BATCH, MOBILE-BATCH인 경우 필수 과금 유형(1: 일반, 2: 월자동, 14:카드월자동, 13:수기일반, 18:수기비인증)</td>
</tr>
<tr>
<td>CERTTYPE</td>
<td><input type="text" name="CERTTYPE" value=""></td>
<td>CARD(K)-SUGI인 경우 필수(00:카드번호/유효기간)(11:카드번호/유효기간/생년월일/비밀번호앞2자리)</td>
</tr>
<tr>
<td>AUTOINFOFLAG</td>
<td><input type="text" name="AUTOINFOFLAG" value=""></td>
<td>CARD(K)-BATCH인 경우 필수 AUTOKEY 전송방식(A~D타입 메뉴얼참고)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------신용카드(선택)</b></td>
</tr>
<tr>
<td>CPQUOTA</td>
<td><input type="text" name="CPQUOTA" value=""></td>
<td>CARD, CARD-SUGI인 경우 최대 할부 개월 수(구분자 “ : “) (일시불~12개월 예: 0:2:3:4~~~:12)</td>
</tr>
<tr>
<td>CARDQUOTA</td>
<td><input type="text" name="CARDQUOTA" value=""></td>
<td>CARD, CARD-SUGI인 경우 카드사별 할부 개월 수(예시 : CCBC-0:2:3:4:5:6^CCNH-0:2:3)</td>
</tr>
<tr>
<td>QUOTAOPT</td>
<td><input type="text" name="QUOTAOPT" value=""></td>
<td>CARDK, CARDK-SUGI인 경우 최대 할부 개월 수 (일시불~12개월 예: 12)</td>
</tr>
<tr>
<td>CARDLIST</td>
<td><input type="text" name="CARDLIST" value=""></td>
<td>CARD(K)인 경우 결제 창 카드사 노출 값(구분자 “ : “)(카드사코드는 매뉴얼 하단참고)</td>
</tr>
<tr>
<td>HIDECARDLIST</td>
<td><input type="text" name="HIDECARDLIST" value=""></td>
<td>CARD(K)인 경우 결제 창 카드사 숨김 값(구분자 “ : “)(카드사코드는 매뉴얼 하단참고)</td>
</tr>
<tr>
<td>SKIP_YN</td>
<td><input type="text" name="SKIP_YN" value=""></td>
<td>카드사 인증창 바로 이동 Y/N(CARDLIST에 하나의 카드사 코드만)</td>
</tr>
<tr>
<td>ENG_FLAG</td>
<td><input type="text" name="eng_flag" value=""></td>
<td>CARDK인 경우 영문 결제창 사용여부 Y/N</td>
</tr>
<tr>
<td>OPTIONPARAMS</td>
<td><input type="text" name="OPTIONPARAMS" value=""></td>
<td>CARD-BATCH인 경우 CARDCODE를 값에 추가하여 AUTOKEY 전송방식 변경 (추가 옵션)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------휴대폰(선택)</b></td>
</tr>
<tr>
<td>MOBILECOMPANYLIST</td>
<td><input type="text" name="MOBILECOMPANYLIST" value=""></td>
<td>MOBILE,MOBILE-BATCH 결제 창 통신사만 노출 값(구분자 “ , “)통신사 코드: SKT/KTF/LGT/CJH/KCT</td>
</tr>
<tr>
<td>FIXTELNO</td>
<td><input type="text" name="FIXTELNO" value=""></td>
<td>휴대폰 번호 고정 입력</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------가상계좌(선택)</b></td>
</tr>
<tr>
<td>DEPOSITENDDATE</td>
<td><input type="text" name="DEPOSITENDDATE" value=""></td>
<td>입금만료일(YYYYMMDD24MISS)(미지정 기본값 7일)</td>
</tr>
<tr>
<td>VTAXFREECD</td>
<td><input type="text" name="CASHRECEIPTFLAG" value=""></td>
<td>과세여부(00:과세 / 01:비과세 / 02:복합) RESERVEDSTIRNG : 비과세 대상금액 ^[비과세금액] 형식, 복합일 경우에만 사용</td>
</tr>
<tr>
<td>BANKCODE</td>
<td><input type="text" name="BANKCODE" value=""></td>
<td>은행코드(제한하는 경우에만)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------현금영수증(선택)</b></td>
</tr>
<tr>
<td>CASHRECEIPTFLAG</td>
<td><input type="text" name="CASHRECEIPTFLAG" value=""></td>
<td>현금영수증 발행여부(1:발행, 0:미발행)</td>
</tr>
<tr>
<td>CASHRECEIPTUSE</td>
<td><input type="text" name="CASHRECEIPTUSE" value=""></td>
<td>현금영수증 발행용도(1:소득공제, 2:지출증빙, 9:미발행)</td>
</tr>
<tr>
<td>CASHRECEIPTINFO</td>
<td><input type="text" name="CASHRECEIPTINFO" value=""></td>
<td>현금영수증 발행정보(휴대폰번호, 사업자번호)</td>
</tr>
<tr>
<td colspan="3" style=""><b>----------카카오페이(선택)</b></td>
</tr>
<tr>
<td>FREE_AMT</td>
<td><input type="text" name="FREE_AMT" value=""></td>
<td>결제금액 중 비과세 금액</td>
</tr>
<tr>
<td>CASHRECEIPTFLAG</td>
<td>
<!-- <input type="text" name="CASHRECEIPTFLAG" value=""> -->
</td>
<td>현금영수증 발행여부(Y:발행, N:미발행)는 카카오페이 현금영수증 발행은 구분하여 사용바랍니다.</td>
</tr>
<tr>
<td>PAYTYPE</td>
<td><input type="text" name="PAYTYPE" value=""></td>
<td>결제방식 CARD, MONEY(카드, 카카오머니)</td>
</tr>
<tr>
<td>USEKAKAO</td>
<td><input type="text" name="USEKAKAO" value=""></td>
<td>Y/N(신용카드, 카카오 모두 사용시 신용카드 결제 창에서 카카오 표기 여부)</td>
</tr>
</table>
</form>
</body>
</html>

View File

@@ -0,0 +1,56 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : PayKiwoomSucsC.jsp
Description : 키움 결과창
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026-03-23 이경숙 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>결제 성공</title>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
<script>
$(document).ready(function() {
var jsonObject = JSON.parse('${message.response}');
var method = "";
var rstNumber = "";
// JSON 데이터 표시
$('#responseMessage').text('${message}');
$('#responseOrderName').text(jsonObject.orderId);
$('#responseMethod').text(jsonObject.payMethod);
$('#responseAmount').text(jsonObject.amount);
$('#resCode').text(jsonObject.code);
//$('#resMessage').text(jsonObject.res_msg);
});
</script>
</head>
<body>
<section>
<h1>결제 성공</h1>
<p>결과 데이터 : <span id="responseMessage"></span></p>
<p>orderName : <span id="responseOrderName"></span></p>
<p>method : <span id="responseMethod"></span></p>
<p>금액 : <span id="responseAmount"></span></p>
<p>메세지 : <span id="resMessage"></span></p>
<p>결과코드 : <span id="resCode"></span><p>
</section>
</body>
</html>