키움결제 테스트
This commit is contained in:
@@ -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());
|
||||
}};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -292,6 +292,9 @@ public class BOPayVO extends AbstractVO {
|
||||
/** 테스트 여부 - 테스트용 */
|
||||
private String testAt;
|
||||
|
||||
/** 키움 - 상점ID */
|
||||
private String cpId;
|
||||
|
||||
|
||||
// cookie
|
||||
/** 에이전트 ID */
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
51
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomPay2C.jsp
Normal file
51
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomPay2C.jsp
Normal 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>
|
||||
|
||||
446
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomPayC.jsp
Normal file
446
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomPayC.jsp
Normal 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>
|
||||
56
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomSucsC.jsp
Normal file
56
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKiwoomSucsC.jsp
Normal 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>
|
||||
Reference in New Issue
Block a user