결제 - 키움결제 적용 3차

This commit is contained in:
이경숙
2026-03-31 14:31:37 +09:00
parent 0c2be2d1d2
commit 7e98b7acfb
7 changed files with 164 additions and 71 deletions

View File

@@ -5484,6 +5484,8 @@ public class BOOrdrService{
orderVO.setMbrInnb(new BigInteger(payVO.getMbrInnb())); orderVO.setMbrInnb(new BigInteger(payVO.getMbrInnb()));
} }
log.info("insertKiwoomSetle service start ::: ");
// 주문 공통 전처리 ( 상태체크, 상태변경, 마일리지, 쿠폰, GC머니 ) // 주문 공통 전처리 ( 상태체크, 상태변경, 마일리지, 쿠폰, GC머니 )
orderCommService.commonOrderPreProcess(payVO, orderVO); orderCommService.commonOrderPreProcess(payVO, orderVO);

View File

@@ -1439,9 +1439,12 @@ public class OrdrController {
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertKiwoomSetle") @RequestMapping(value="/insertKiwoomSetle")
public String insertKiwoomSetle(ModelMap model, HttpServletRequest request) { public String insertKiwoomSetle(ModelMap model, HttpServletRequest request) {
log.info("insertKiwoomSetle controller start ::: ");
BOPayVO payVO = new BOPayVO(); BOPayVO payVO = new BOPayVO();
payVO.setOrderId(request.getParameter("orderId")); payVO.setOrderId(request.getParameter("ordrInnb"));
payVO.setAmount(request.getParameter("setleAmt")); payVO.setAmount(request.getParameter("setleAmt"));
payVO.setSopmalCd(request.getParameter("sopmalCd")); payVO.setSopmalCd(request.getParameter("sopmalCd"));
payVO.setMbrInnb(request.getParameter("mbrInnb")); payVO.setMbrInnb(request.getParameter("mbrInnb"));

View File

@@ -5784,6 +5784,15 @@
AND O.SUBSVC_AT = 'Y' AND O.SUBSVC_AT = 'Y'
</select> </select>
<select id="selectKiwoomPgApiLog"
parameterType="com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO"
resultType="dataMap">
SELECT GOPAL.RSLT_PARAM FROM GC_ORDER_PG_API_LOG GOPAL
WHERE GOPAL.SOPMAL_CD = #{sopmalCd}
AND GOPAL.ORDR_INNB = #{orderId}
</select>
</mapper> </mapper>

View File

@@ -3403,38 +3403,6 @@
fn_get_setle_amt(); fn_get_setle_amt();
} }
</script>
<script>
/****************************************************************/
/* m_Completepayment 설명 */
/****************************************************************/
/* 인증완료시 재귀 함수 */
/* 해당 함수명은 절대 변경하면 안됩니다. */
/* 해당 함수의 위치는 kcp_spay_hub.js 보다먼저 선언되어여 합니다. */
/* Web 방식의 경우 리턴 값이 form 으로 넘어옴 */
/****************************************************************/
function m_Completepayment(FormOrJson, closeEvent) {
var frm = document.order_info;
/********************************************************************/
/* FormOrJson은 가맹점 임의 활용 금지 */
/* frm 값에 FormOrJson 값이 설정 된 frm 값으로 활용 하셔야 됩니다. */
/********************************************************************/
GetField(frm, FormOrJson);
if (frm.res_cd.value == "0000"){
/* 결제인증 완료 후 결제승인 요청을 위한 비즈니스 로직 구현 */
frm.submit();
} else {
/* 결제인증 실패에 대한 처리 */
alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
location.reload();
closeEvent();
}
}
/* 약관 상세 보기, 마케팅동의여부 모달 데이터 정제*/ /* 약관 상세 보기, 마케팅동의여부 모달 데이터 정제*/
const fn_select_clause = (stplatDvCd,agreeAt) => { const fn_select_clause = (stplatDvCd,agreeAt) => {
@@ -3497,6 +3465,38 @@
} }
</script> </script>
<script>
/****************************************************************/
/* m_Completepayment 설명 */
/****************************************************************/
/* 인증완료시 재귀 함수 */
/* 해당 함수명은 절대 변경하면 안됩니다. */
/* 해당 함수의 위치는 kcp_spay_hub.js 보다먼저 선언되어여 합니다. */
/* Web 방식의 경우 리턴 값이 form 으로 넘어옴 */
/****************************************************************/
function m_Completepayment(FormOrJson, closeEvent) {
var frm = document.order_info;
/********************************************************************/
/* FormOrJson은 가맹점 임의 활용 금지 */
/* frm 값에 FormOrJson 값이 설정 된 frm 값으로 활용 하셔야 됩니다. */
/********************************************************************/
GetField(frm, FormOrJson);
if (frm.res_cd.value == "0000"){
/* 결제인증 완료 후 결제승인 요청을 위한 비즈니스 로직 구현 */
frm.submit();
} else {
/* 결제인증 실패에 대한 처리 */
alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
location.reload();
closeEvent();
}
}
</script>
<c:choose> <c:choose>
<c:when test="${data.payInfo.kcpMid eq 'T0007'}"> <c:when test="${data.payInfo.kcpMid eq 'T0007'}">
<script type="text/javascript" src="https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js"></script> <script type="text/javascript" src="https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js"></script>
@@ -3615,6 +3615,22 @@
} }
}); });
} }
function kiwoom_Completepayment() {
console.log("::: parent window 호출 됨 ::::");
var frm = document.order_info;
frm.submit();
/*if (frm.res_cd.value == "0000"){
/!* 결제인증 완료 후 결제승인 요청을 위한 비즈니스 로직 구현 *!/
frm.submit();
} else {
/!* 결제인증 실패에 대한 처리 *!/
alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
location.reload();
}*/
}
</script> </script>
</head> </head>
<body> <body>

View File

@@ -29,9 +29,7 @@
<script type="text/javascript" language="javascript"> <script type="text/javascript" language="javascript">
$(document).ready(function() { $(document).ready(function() {
/*
var pf = document.payForm;
const orderForm = $('#order_info'); const orderForm = $('#order_info');
const setleTyCd = orderForm.find('.setleTyCd').val(); const setleTyCd = orderForm.find('.setleTyCd').val();
const setleAmt = orderForm.find('.setleAmt').val(); const setleAmt = orderForm.find('.setleAmt').val();
@@ -54,24 +52,25 @@
param += '&orderId=' + ordrInnb; param += '&orderId=' + ordrInnb;
param += '&setleAmt=' + setleAmt; param += '&setleAmt=' + setleAmt;
const encodedParam = encodeURIComponent(param); console.log("param:::"+ param);
pf.HOMEURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPaySuccss"/>' + encodedParam;
pf.FAILURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPayFail"/>'+ encodedParam;
console.log("HOMEURL:::"+ pf.HOMEURL.value); const encodedParam = encodeURIComponent(param);
console.log("FAILURL:::"+ pf.FAILURL.value);
console.log("encodedParam:::"+ encodedParam);
document.payForm.HOMEURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPaySuccss"/>' + encodedParam;
document.payForm.FAILURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPayFail"/>'+ encodedParam;
*/
document.payForm.HOMEURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPaySuccss"/>';
document.payForm.FAILURL.value=window.location.origin + '<c:url value="/sopmal/pay/kiwoomPayFail"/>';
console.log("HOMEURL:::"+ document.payForm.HOMEURL.value);
console.log("FAILURL:::"+ document.payForm.FAILURL.value);
kiwoomPay(); kiwoomPay();
}); });
function init() {
pf = document.payForm;
pf.ORDERNO.value = getTimeStamp();
}
function pay() { function pay() {
pf = document.payForm; pf = document.payForm;
@@ -142,36 +141,18 @@
}); });
} }
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> </script>
</head> </head>
<body> <body>
<%-- Controller에 넘어가는 값 --%> <%-- Controller에 넘어가는 값 --%>
<form name="order_info" id="order_info"> <form name="order_info" id="order_info" method="post" action="<c:url value="/sopmal/ordr/insertKiwoomSetle"/>">
<input type="hidden" name="sopmalCd" class="sopmalCd" value="${data.setle.sopmalCd}" /> <input type="hidden" name="sopmalCd" class="sopmalCd" value="${data.setle.sopmalCd}" />
<input type="hidden" name="ordrInnb" class="ordrInnb" value="${data.setle.ordrInnb}" /> <input type="hidden" name="ordrInnb" class="ordrInnb" value="${data.setle.ordrInnb}" />
<input type="hidden" name="pgCmpnyNm" class="pgCmpnyNm" value="${data.setle.pgCmpnyNm}" /> <input type="hidden" name="pgCmpnyNm" class="pgCmpnyNm" value="${data.setle.pgCmpnyNm}" />
<input type="hidden" name="setleTyCd" class="setleTyCd" value="${data.setle.setleTyCd}" /> <input type="hidden" name="setleTyCd" class="setleTyCd" value="${data.setle.setleTyCd}" />
<input type="hidden" name="goodsNm" class="goodsNm" value="${data.setle.goodsNm}"/> <!-- 상품명 --> <input type="hidden" name="goodsNm" class="goodsNm" value="${data.setle.goodsNm}"/> <!-- 상품명 -->
<input type="hidden" name="setleAmt" class="setleAmt" value="${data.setle.setleAmt}"/> <!-- 결제 금액 --> <input type="hidden" name="setleAmt" class="setleAmt" value="${data.setle.wonSetleAmt}"/> <!-- 결제 금액 -->
<input type="hidden" name="ordrrNm" class="ordrrNm" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 --> <input type="hidden" name="ordrrNm" class="ordrrNm" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
<input type="hidden" name="ordrrEmail" class="ordrrEmail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 --> <input type="hidden" name="ordrrEmail" class="ordrrEmail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 -->
<input type="hidden" name="ordrrMbtlnb" class="ordrrMbtlnb" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 --> <input type="hidden" name="ordrrMbtlnb" class="ordrrMbtlnb" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 -->
@@ -198,7 +179,7 @@
<input type="hidden" name="USERID" value="${data.ordr.mbrId}" /> <!-- 고객 ID --> <input type="hidden" name="USERID" value="${data.ordr.mbrId}" /> <!-- 고객 ID -->
<input type="hidden" name="HOMEURL" value="" /> <!-- 결제 성공 후, 이동할 URL(결제 창에서 이동) --> <input type="hidden" name="HOMEURL" value="" /> <!-- 결제 성공 후, 이동할 URL(결제 창에서 이동) -->
<input type="hidden" name="FAILURL" value="" /> <!-- 결제실패 후, 확인버튼 입력 시 이동할 URL --> <input type="hidden" name="FAILURL" value="" /> <!-- 결제실패 후, 확인버튼 입력 시 이동할 URL -->
<input type="hidden" name="DIRECTRESULTFLAG" value="" /> <!-- 키움페이 결제 완료 창 없이 HOMEURL로 바로 이동(Y/N) -->
</form> </form>
</body> </body>
</html> </html>

View File

@@ -0,0 +1,80 @@
<%@ 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 : OrdrPay.jsp
Description : 결제
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-11 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
<script>
$(document).ready(function() {
//alert($('#message').val());
const status = $('#status').val();
if ('0' === status) {
let form = $('<form></form>');
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/ordr/selectOrdrCompt"/>');
history.replaceState(null, '', '/sopmal/ordr/selectOrdrCompt');
$(form).append($('<input/>', {type:'hidden', name:'sopmalCd', value:$('#sopmalCd').val()}));
$(form).append($('<input/>', {type:'hidden', name:'ordrInnb', value:$('#ordrInnb').val()}));
$(form).append($('<input/>', {type:'hidden', name:'message', value:$('#message').val()}));
$(form).appendTo('body');
$(form).submit();
} else {
const form = $('<form></form>');
$(form).append($('<input/>', {type:'hidden', name:'sopmalCd', value:$('#sopmalCd').val()}));
$(form).append($('<input/>', {type:'hidden', name:'ordrInnb', value:$('#ordrInnb').val()}));
$(form).append($('<input/>', {type:'hidden', name:'mbrInnb', value:$('#mbrInnb').val()}));
$(form).append($('<input/>', {type:'hidden', name:'mbrId', value:$('#mbrId').val()}));
$(form).append($('<input/>', {type:'hidden', name:'sesionId', value:$('#sesionId').val()}));
$(form).append($('<input/>', {type:'hidden', name:'message', value:$('#message').val()}));
$(form).append($('<input/>', {type:'hidden', name:'subsvcInnb', value:$('#subsvcInnb').val()}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/ordr/selectOrdrFailr"/>');
history.replaceState(null, '', '/sopmal/ordr/selectOrdrFailr');
$(form).appendTo('body');
$(form).submit();
}
});
</script>
</head>
<body>
<form name="successForm" id="successForm">
<input type="hidden" name="status" id="status" value="${data.status}"/>
<input type="hidden" name="message" id="message" value="${data.message}"/>
<input type="hidden" name="sopmalCd" id="sopmalCd" value="${paramVO.sopmalCd}"/>
<input type="hidden" name="ordrInnb" id="ordrInnb" value="${paramVO.orderId}"/>
<input type="hidden" name="mbrInnb" id="mbrInnb" value="${paramVO.mbrInnb}"/>
<input type="hidden" name="mbrId" id="mbrId" value="${paramVO.mbrId}"/>
<input type="hidden" name="sesionId" id="sesionId" value="${paramVO.sesionId}"/>
<input type="hidden" name="subsvcInnb" id="subsvcInnb" value="${subsvcInnb}"/>
</form>
</body>
</html>

View File

@@ -51,6 +51,8 @@
<p>메세지 : <span id="resMessage"></span></p> <p>메세지 : <span id="resMessage"></span></p>
<p>결과코드 : <span id="resCode"></span><p> <p>결과코드 : <span id="resCode"></span><p>
<input type="button" onclick="window.opener.kiwoom_Completepayment(); self.close();" value="확인"/>
</section> </section>
</body> </body>
</html> </html>