결제 - 키움결제 적용 1차

This commit is contained in:
이경숙
2026-03-27 18:34:29 +09:00
parent 721e28e4c2
commit 8573a3e7a4
9 changed files with 722 additions and 635 deletions

View File

@@ -53,7 +53,10 @@
const gcpayCardUseAt = $('#gcpayCardUseAt').val();
let gcpayAt = ( gcpayCardUseAt === 'Y')? 'Y' : 'N';
const setleTy = $('#setleSetupTyCd').val();
const setleTyCd = (setleTy==='01')?'#pg04':'#pg03';
const setleTyCd = '#pg04';
if(setleTy==='01')setleTyCd = '#pg04'; //kcp
else if(setleTy==='02')setleTyCd = '#pg03'; //toss
else if(setleTy==='03')setleTyCd = '#pg06'; //kiwoom
if (gcpayAt === 'N') {
$(setleTyCd).click();
@@ -525,7 +528,12 @@
$(form).find('.pgContent').hide();
$(form).find('#' + id + 'Content').show();
$(form).find('#setleSetupTyCd').val() === '01' ? $(form).find('#pg04Content').show() : $(form).find('#pg03Content').show();
//$(form).find('#setleSetupTyCd').val() === '01' ? $(form).find('#pg04Content').show() : $(form).find('#pg03Content').show();
if($(form).find('#setleSetupTyCd').val() === '01'){$(form).find('#pg04Content').show();}
else if($(form).find('#setleSetupTyCd').val() === '02'){$(form).find('#pg03Content').show();}
else if($(form).find('#setleSetupTyCd').val() === '03'){$(form).find('#pg06Content').show();}
$('.order-method-normal__btn').removeClass('active');
$(form).find('#pgCmpnyNm').val(pgCmpnyNm);
@@ -579,7 +587,10 @@
const content = $('.order-method-normal__content');
const useCashMlgAmt = $('#useCashMlgAmt').val();
$('#setleSetupTyCd').val() === '01' ? $('#pg04').click() : $('#pg03').click();
//$('#setleSetupTyCd').val() === '01' ? $('#pg04').click() : $('#pg03').click();
if($('#setleSetupTyCd').val() === '01'){$('#pg04').click();}
else if($('#setleSetupTyCd').val() === '02'){$('#pg03').click();}
else if($('#setleSetupTyCd').val() === '03'){$('#pg05').click();}
$('.order-method-normal__btn').removeClass('active');
$(this).addClass('active');
@@ -3014,7 +3025,12 @@
const id = '01' === issuTrgetDvCd ? 'issuTrgetMbtlnb' : 'issuTrgetBsnmNb';
let rlPgCmpnyNm = $('#pgCmpnyNm').val();
let setleTyId = $('kcp' === pgCmpnyNm ? '#pg04Content' : '#pg03Content').find('button[name="' + setleTyCd + '"]').attr('id');
let pgCont = "";
if('kiwoom' === pgCmpnyNm) pgCont='pg06Content';
else if('kcp' === pgCmpnyNm) pgCont='pg04Content';
else pgCont='pg03Content';
let setleTyId = $('#'+pgCont).find('button[name="' + setleTyCd + '"]').attr('id');
if ('tosspay' === rlPgCmpnyNm) {
setleTyId = 'acount'
@@ -3510,6 +3526,82 @@
});
}
</script>
<script>
var pf;
function kiwoomPay() {
console.log("kiwoomPay script start :::::");
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,
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.action = fileName;
pf.method = "post";
pf.submit();
} else {
alert("결제 정보를 가져오지 못했습니다.");
}
},
error : function(xhr, status, error) {
console.log("AJAX Error:", error);
alert("파일을 연동바랍니다.");
}
});
}
</script>
</head>
<body>
<%-- 공통 Header --%>
@@ -4428,6 +4520,138 @@
</div>
</c:if>
<%-- kcp 결제 종료 --%>
<%-- 키움 결제 시작 --%>
<c:if test="${'03' eq payInfo.setleSetupTyCd}">
<div class="custom-radio is-medium">
<input type="radio" name="pg" id="pg06" value="kiwoom">
<label for="pg06">일반결제</label>
</div>
<div id="pg06Content" class="pgContent order-method-normal" <%-- style="display: none"--%>>
<div class="order-method-normal__btn-container">
<c:if test="${'Y' eq payInfo.cardUseAt}">
<button type="button" name="01" id="card" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--card"></div>신용카드
</button>
</c:if>
<%--
<c:if test="${'Y' eq payInfo.rltmAcntUseAt}">
<button type="button" name="03" id="acount" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--transfer"></div>실시간 계좌이체
</button>
</c:if>
--%>
<c:if test="${'Y' eq payInfo.virtlAcntUseAt}">
<button type="button" name="04" id="virtual" class="order-method-normal__btn">
<div class="order-method-normal__icon order-method-normal__icon--account"></div>가상계좌
</button>
</c:if>
<c:if test="${'Y' eq payInfo.virtlAcntEscwUseAt}">
<button type="button" name="05" id="escrow-virtual" class="order-method-normal__btn not_multi_pay">
<div class="order-method-normal__icon order-method-normal__icon--account"></div>가상계좌(에스크로)
</button>
</c:if>
<c:if test="${'Y' eq payInfo.nbkkUseAt}">
<button type="button" name="02" id="bank" class="order-method-normal__btn">
<div class="order-method-normal__icon order-method-normal__icon--deposit"></div>무통장
</button>
</c:if>
<c:if test="${'Y' eq payInfo.paycoUseAt}">
<button type="button" name="10" id="payco" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--payco"></div>PAYCO
</button>
</c:if>
<c:if test="${'Y' eq payInfo.tpayUseAt}">
<button type="button" name="tosspay" id="tosspay" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--toss"></div>토스페이
</button>
</c:if>
<c:if test="${'Y' eq payInfo.npayUseAt}">
<button type="button" name="naverpay" id="naverpay" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--naver"></div>네이버페이
</button>
</c:if>
<c:if test="${'Y' eq payInfo.kpayUseAt}">
<button type="button" name="kakaopay" id="kakaopay" class="order-method-normal__btn gift_pay">
<div class="order-method-normal__icon order-method-normal__icon--kakao"></div>카카오페이
</button>
</c:if>
</div>
<div class="order-method-normal__content-wrapper">
<c:if test="${'Y' eq payInfo.cardUseAt}">
<div id="card-content" class="order-method-normal__content" style="display: none">
<div id="card-content-inner" class="order-method-normal__content-inner">
<p class="fyi gray-7 mt-10 ml-10 noempty">발급정보 : 카드매출전표(또는 휴대폰결제전표)로 대체합니다.</p>
</div>
</div>
</c:if>
<%--
<c:if test="${'Y' eq payInfo.rltmAcntUseAt}">
<div id="acount-content" class="order-method-normal__content" style="display: none">
<div id="acount-content-inner" class="order-method-normal__content-inner"></div>
</div>
</c:if>
--%>
<c:if test="${'Y' eq payInfo.virtlAcntUseAt}">
<div id="virtual-content" class="order-method-normal__content" style="display: none">
<div id="virtual-content-inner" class="order-method-normal__content-inner"></div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.virtlAcntEscwUseAt}">
<div id="escrow-virtual-content" class="order-method-normal__content" style="display: none">
<div id="escrow-virtual-content-inner" class="order-method-normal__content-inner"></div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.nbkkUseAt}">
<div id="bank-content" class="order-method-normal__content" style="display: none">
<div id="bank-content-inner" class="order-method-normal__content-inner"></div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.paycoUseAt}">
<div id="payco-content" class="order-method-normal__content" style="display: none">
<div id="payco-content-inner" class="order-method-normal__content-inner">
<div class="infoBox noempty">
<h6 class="infoBox__title">PAYCO 간편결제 안내</h6>
<ol class="infoBox__list">
<li>PAYCO는 온/오프라인 쇼핑은 물론 송금, 멤버십 적립까지 가능한 통합 서비스입니다.</li>
<li>휴대폰과 카드 명의자가 동일해야 결제 가능하며, 결제금액 제한은 없습니다.
<br>- 지원카드: 모든 국내 신용/체크카드
</li>
</ol>
</div>
<p class="textInfo noempty"><i class="icon icon_textInfo--sm"></i>발급정보 : 카드매출전표(또는 휴대폰결제전표)로 대체합니다.</p>
</div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.tpayUseAt}">
<div id="acount-content" class="order-method-normal__content" style="display: none">
<div id="acount-content-inner" class="order-method-normal__content-inner">
<p class="fyi gray-7 mt-10 ml-10 noempty">발급정보 : 카드매출전표(또는 휴대폰결제전표)로 대체합니다.</p>
</div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.npayUseAt}">
<div id="naverpay-content" class="order-method-normal__content" style="display: none">
<div id="naverpay-content-inner" class="order-method-normal__content-inner">
<div class="noempty">
</div>
</div>
</div>
</c:if>
<c:if test="${'Y' eq payInfo.kpayUseAt}">
<div id="kakaopay-content" class="order-method-normal__content" style="display: none">
<div id="kakaopay-content-inner" class="order-method-normal__content-inner">
<div class="noempty">
</div>
</div>
</div>
</c:if>
</div>
</div>
</c:if>
<%-- kcp 결제 종료 --%>
</div>
</form>
</div>

View File

@@ -34,10 +34,7 @@
const setleTyCd = orderForm.find('.setleTyCd').val();
const setleAmt = orderForm.find('.setleAmt').val();
const ordrInnb = orderForm.find('.ordrInnb').val();
const goodsNm = orderForm.find('.goodsNm').val();
const ordrrNm = orderForm.find('.ordrrNm').val();
const ordrrEmail = orderForm.find('.ordrrEmail').val();
const ordrrMbtlnb = orderForm.find('.ordrrMbtlnb').val().replace(/[^0-9]/g, '');
const sopmalCd = orderForm.find('.sopmalCd').val();
const mbrInnb = orderForm.find('.mbrInnb').val();
@@ -62,14 +59,13 @@
console.log("HOMEURL:::"+ pf.HOMEURL.value);
console.log("FAILURL:::"+ pf.FAILURL.value);
init();
kiwoomPay();
});
var pf;
function init() {
//alert(navigator.userAgent);
pf = document.payForm;
pf.ORDERNO.value = getTimeStamp();
}
@@ -165,52 +161,41 @@
</script>
</head>
<body>
<form name="order_info" id="order_info" accept-charset="euc-kr">
<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="pgCmpnyNm" class="pgCmpnyNm" value="${data.setle.pgCmpnyNm}"/>
<input type="hidden" name="setleTyCd" class="setleTyCd" value="${data.setle.setleTyCd}"/>
<%-- Controller에 넘어가는 값 --%>
<form name="order_info" id="order_info">
<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="pgCmpnyNm" class="pgCmpnyNm" value="${data.setle.pgCmpnyNm}" />
<input type="hidden" name="setleTyCd" class="setleTyCd" value="${data.setle.setleTyCd}" />
<input type="hidden" name="SERVER" class="SERVER" value="DEV"/> <!-- 서버환경 : LIVE -->
<input type="hidden" name="TYPE" class="TYPE" value="${data.setle.setleAmt}"/> <!-- 결제방식(P:PC/M:모바일/W:웹뷰) -->
<input type="hidden" name="PAYMETHOD" class="PAYMETHOD" value="${data.ordr.ordrrNm}"/> <!-- 결제수단 -->
<input type="hidden" name="TAXFREECD" class="TAXFREECD" value="00"/> <!-- 과세 비과세 여부(00: 과세, 01: 비과세, 02: 복합과세) -->
<input type="hidden" name="BILLTYPE" class="BILLTYPE" value="1"/> <!-- 과금 유형(1: 일반) -->
<input type="hidden" name="KIWOOM_ENC" class="KIWOOM_ENC" value="${data.ordr.ordrrNm}"/> <!-- 보안 기능 -->
<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="ordrrNm" class="ordrrNm" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
<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="mbrId" class="mbrId" value="${data.ordr.mbrId}"/> <!-- 쇼핑몰회원ID -->
<input type="hidden" name="mbrInnb" class="mbrInnb" value="${data.ordr.mbrInnb}" />
<input type="hidden" name="sesionId" class="sesionId" value="${data.ordr.sesionId}" />
</form>
<input type="hidden" name="CPID" class="CPID" value="${data.ordr.ordrrEmail}"/> <!-- 상점아이디 -->
<input type="hidden" name="ORDERNO" class="ORDERNO" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문번호 -->
<input type="hidden" name="PRODUCTTYPE" class="PRODUCTTYPE" value="${data.ordr.mbrId}"/> <!-- 상품구분(1: 디지털, 2: 실물) -->
<input type="hidden" name="AMOUNT" class="AMOUNT" value="${data.ordr.mbrInnb}" /><!-- 결제금액 -->
<input type="hidden" name="PRODUCTNAME" class="PRODUCTNAME" value="${data.ordr.sesionId}" /><!-- 상품명 -->
<input type="hidden" name="USERID" class="USERID" value="${data.setle.dueDt}" /> <!-- 고객 ID -->
<%-- 결제창에 넘어가는 값 --%>
<form name="payForm" accept-charset="euc-kr">
<input type="hidden" name="SERVER" value="DEV"/> <!-- 서버환경 : LIVE -->
<input type="hidden" name="TAXFREECD" value="01"/> <!-- 과세 비과세 여부(00: 과세, 01: 비과세, 02: 복합과세) -->
<input type="hidden" name="BILLTYPE" value="1"/> <!-- 과금 유형(1: 일반) -->
<input type="hidden" name="PRODUCTTYPE" value="2"/> <!-- 상품구분(1: 디지털, 2: 실물) -->
<input type="hidden" name="KIWOOM_ENC" value=""/> <!-- 보안 기능 -->
<input type="hidden" name="HOMEURL" class="HOMEURL" value="${data.setle.dueDt}" /> <!-- 결제 성공 후, 이동할 URL(결제 창에서 이동) -->
<input type="hidden" name="FAILURL" class="FAILURL" value="${data.setle.dueDt}" /> <!-- 결제실패 후, 확인버튼 입력 시 이동할 URL -->
<input type="hidden" name="TYPE" value="P"/> <!-- 결제방식(P:PC/M:모바일/W:웹뷰) -->
<input type="hidden" name="CPID" value="CFO20585"/> <!-- 상점아이디 CFO20585,CFO20586-->
<input type="hidden" name="PAYMETHOD" value="CARD"/> <!-- 결제수단 (CARD:카드/NAVERPAY:네이버페이)-->
<!--
payVO.setOrderId(request.getParameter("orderId"));
payVO.setPaymentKey(request.getParameter("paymentKey"));
payVO.setAmount(request.getParameter("amount"));
payVO.setSopmalCd(request.getParameter("sopmalCd"));
payVO.setMbrInnb(request.getParameter("mbrInnb"));
payVO.setMbrId(request.getParameter("mbrId"));
payVO.setSesionId(request.getParameter("sesionId"));
payVO.setPgCmpnyNm(request.getParameter("pgCmpnyNm"));
payVO.setSetleTyCd(request.getParameter("setleTyCd"));
payVO.setSetlerNm(request.getParameter("ordrrNm"));
let param = '?sopmalCd=' + sopmalCd;
param += '&mbrInnb=' + mbrInnb;
param += '&mbrId=' + mbrId;
param += '&sesionId=' + sesionId;
param += '&pgCmpnyNm=' + pgCmpnyNm;
param += '&setleTyCd=' + setleTyCd;
param += '&ordrrNm=' + ordrrNm;
-->
<input type="hidden" name="ORDERNO" value="${data.setle.ordrInnb}"/> <!-- 주문번호 -->
<input type="hidden" name="AMOUNT" value="${data.setle.setleAmt}" /><!-- 결제금액 -->
<input type="hidden" name="PRODUCTNAME" value="${data.setle.goodsNm}" /><!-- 상품명 -->
<input type="hidden" name="USERID" value="${data.ordr.mbrId}" /> <!-- 고객 ID -->
<input type="hidden" name="HOMEURL" value="" /> <!-- 결제 성공 후, 이동할 URL(결제 창에서 이동) -->
<input type="hidden" name="FAILURL" value="" /> <!-- 결제실패 후, 확인버튼 입력 시 이동할 URL -->
</form>
</body>