초기소스
This commit is contained in:
2142
src/main/webapp/WEB-INF/views/sopmal/ordr/IndvdlSetleC.jsp
Normal file
2142
src/main/webapp/WEB-INF/views/sopmal/ordr/IndvdlSetleC.jsp
Normal file
File diff suppressed because it is too large
Load Diff
2134
src/main/webapp/WEB-INF/views/sopmal/ordr/IndvdlSetleUrlC.jsp
Normal file
2134
src/main/webapp/WEB-INF/views/sopmal/ordr/IndvdlSetleUrlC.jsp
Normal file
File diff suppressed because it is too large
Load Diff
4509
src/main/webapp/WEB-INF/views/sopmal/ordr/MbrPurchsC.jsp
Normal file
4509
src/main/webapp/WEB-INF/views/sopmal/ordr/MbrPurchsC.jsp
Normal file
File diff suppressed because it is too large
Load Diff
2392
src/main/webapp/WEB-INF/views/sopmal/ordr/NmbrPurchsC.jsp
Normal file
2392
src/main/webapp/WEB-INF/views/sopmal/ordr/NmbrPurchsC.jsp
Normal file
File diff suppressed because it is too large
Load Diff
598
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrComptR.jsp
Normal file
598
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrComptR.jsp
Normal file
@@ -0,0 +1,598 @@
|
||||
<%@ 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 : selectOrdrComptR.jsp
|
||||
Description : 마이페이지 주문 완료
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
|
||||
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
fn_init();
|
||||
|
||||
fn_event();
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 초기 설정
|
||||
**********************************************************/
|
||||
const fn_init = function() {
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 이벤트 설정
|
||||
**********************************************************/
|
||||
const fn_event = function() {
|
||||
/* 주소 상세보기 버튼 선택 이벤트*/
|
||||
$('.multiDeliveryInfo__detailBtn').on('click', function () {
|
||||
if ($(this).closest('.multiDeliveryInfo__info').find('.multiDeliveryInfo__subContent').is(':visible')) {
|
||||
$(this).closest('.multiDeliveryInfo__info').find('.multiDeliveryInfo__subContent').hide();
|
||||
$(this).removeClass('opened');
|
||||
} else {
|
||||
$(this).closest('.multiDeliveryInfo__info').find('.multiDeliveryInfo__subContent').show();
|
||||
$(this).addClass('opened');
|
||||
}
|
||||
});
|
||||
|
||||
/* 쇼핑하기 버튼 선택 이벤트 */
|
||||
$('#btnGoHome').on('click', function() {
|
||||
location.href = '<c:url value="/index"/>';
|
||||
});
|
||||
|
||||
/* 주문/배송 목록 화면 이동 버튼 선택 이벤트 */
|
||||
$('#btnOrdrList').on('click', function() {
|
||||
location.href = '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrListInqire"/>';
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* function
|
||||
**********************************************************/
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<c:set var="order" value="${data.order}"/>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="orderCompleted">
|
||||
<div class="orderCompletedTop">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100" fill="none">
|
||||
<path d="M4.23525 45.1313C3.79366 45.6356 3.47034 46.2322 3.28894 46.8775C3.10755 47.5228 3.07265 48.2004 3.18682 48.861L4.28994 55.8266C5.75375 64.9548 10.1829 73.3469 16.8931 79.7063V81.25H15.6259C15.2115 81.25 14.8141 81.4146 14.521 81.7077C14.228 82.0007 14.0634 82.3981 14.0634 82.8125V95.3125C14.0634 95.7269 14.228 96.1243 14.521 96.4174C14.8141 96.7104 15.2115 96.875 15.6259 96.875H34.3759C34.7903 96.875 35.1877 96.7104 35.4807 96.4174C35.7738 96.1243 35.9384 95.7269 35.9384 95.3125V82.8125C35.9384 82.3981 35.7738 82.0007 35.4807 81.7077C35.1877 81.4146 34.7903 81.25 34.3759 81.25H34.3384L34.1899 75.1141V75.0875C34.0669 72.5414 33.4221 70.0476 32.2957 67.7609C31.1692 65.4741 29.5851 63.4431 27.6415 61.7938L25.3759 57.3C25.0538 56.6405 24.5624 56.0783 23.9518 55.6709C23.3413 55.2635 22.6335 55.0255 21.9009 54.9813C21.3358 54.9529 20.7718 55.0561 20.2534 55.2828C19.735 55.5094 19.2762 55.8534 18.9134 56.2875C18.5242 56.7621 18.251 57.3209 18.1154 57.9194C17.9797 58.518 17.9855 59.14 18.1321 59.736L19.1618 64.2453C15.8735 60.59 13.6341 56.114 12.6806 51.2906L11.9712 47.6969C11.7729 46.6419 11.2306 45.6824 10.4292 44.9683C9.62771 44.2543 8.61225 43.8258 7.5415 43.75C6.92202 43.7169 6.30305 43.8239 5.73064 44.0631C5.15822 44.3022 4.64708 44.6673 4.23525 45.1313ZM32.8134 93.75H17.1884V84.375H32.8134V93.75ZM8.90713 48.3031L9.6165 51.8969C10.404 55.9056 11.996 59.713 14.2965 63.0891C16.597 66.4652 19.5581 69.3397 23.0009 71.5391C23.2903 71.7242 23.6327 71.8088 23.975 71.7797C24.3174 71.7506 24.6406 71.6095 24.8947 71.3782C25.1487 71.1469 25.3195 70.8384 25.3805 70.5002C25.4415 70.1621 25.3893 69.8133 25.2321 69.5078L22.1884 63.5031L21.1681 59.0406C21.1316 58.9138 21.125 58.7803 21.1485 58.6505C21.1721 58.5207 21.2253 58.3981 21.304 58.2922C21.3585 58.2284 21.4271 58.1781 21.5044 58.1453C21.5817 58.1124 21.6655 58.098 21.7493 58.1031C21.9276 58.1246 22.0973 58.1913 22.2426 58.2969C22.3878 58.4024 22.5036 58.5434 22.579 58.7063L25.0009 63.4938C25.1006 63.691 25.2412 63.8646 25.4134 64.0031C27.0868 65.3704 28.4547 67.0735 29.4287 69.0025C30.4028 70.9314 30.9613 73.0433 31.0681 75.2016L31.2134 81.25H20.0181V79.025C20.0181 78.8081 19.973 78.5935 19.8855 78.395C19.7981 78.1965 19.6703 78.0183 19.5103 77.8719C13.0423 71.9419 8.76653 64.0015 7.37588 55.3375L6.27275 48.3719C6.23288 48.1696 6.2384 47.9609 6.28893 47.7609C6.33946 47.561 6.43373 47.3747 6.56494 47.2156C6.67054 47.102 6.79957 47.0127 6.9431 46.9539C7.08663 46.8951 7.24123 46.8682 7.39619 46.875C7.76945 46.9154 8.11923 47.0768 8.39208 47.3347C8.66492 47.5926 8.84582 47.9327 8.90713 48.3031Z" fill="#7E8282"></path>
|
||||
<path d="M74.625 57.3001L72.3594 61.7939C70.416 63.4435 68.8321 65.4746 67.7057 67.7613C66.5793 70.0479 65.9344 72.5416 65.8109 75.0876V75.1142L65.6625 81.2501H65.625C65.2106 81.2501 64.8132 81.4148 64.5201 81.7078C64.2271 82.0008 64.0625 82.3982 64.0625 82.8126V95.3126C64.0625 95.727 64.2271 96.1245 64.5201 96.4175C64.8132 96.7105 65.2106 96.8751 65.625 96.8751H84.375C84.7894 96.8751 85.1868 96.7105 85.4799 96.4175C85.7729 96.1245 85.9375 95.727 85.9375 95.3126V82.8126C85.9375 82.3982 85.7729 82.0008 85.4799 81.7078C85.1868 81.4148 84.7894 81.2501 84.375 81.2501H83.1078V79.7064C89.8183 73.3466 94.2475 64.9539 95.7109 55.8251L96.8141 48.8611C96.9282 48.2006 96.8933 47.5229 96.7119 46.8776C96.5305 46.2323 96.2072 45.6357 95.7656 45.1314C95.354 44.6672 94.8429 44.3019 94.2704 44.0627C93.698 43.8235 93.0789 43.7167 92.4594 43.7501C91.3901 43.8267 90.3762 44.2549 89.5758 44.968C88.7754 45.6811 88.2334 46.639 88.0344 47.6923L87.325 51.2861C86.3714 56.1094 84.1321 60.5855 80.8438 64.2408L81.8734 59.7314C82.0201 59.1354 82.0258 58.5135 81.8902 57.9149C81.7546 57.3163 81.4814 56.7575 81.0922 56.2829C80.7291 55.8491 80.2703 55.5053 79.752 55.2787C79.2336 55.052 78.6697 54.9487 78.1047 54.9767C77.3707 55.0206 76.6617 55.2589 76.0502 55.6672C75.4387 56.0755 74.9468 56.6391 74.625 57.3001ZM82.8125 93.7501H67.1875V84.3751H82.8125V93.7501ZM78.2438 58.1033C78.3282 58.0932 78.4139 58.1053 78.4923 58.1385C78.5707 58.1716 78.639 58.2247 78.6906 58.2923C78.7693 58.3982 78.8225 58.5208 78.8464 58.6506C78.8702 58.7803 78.864 58.9138 78.8281 59.0408L77.8125 63.5033L74.7813 69.5142C74.624 69.8197 74.5719 70.1685 74.6329 70.5066C74.6939 70.8447 74.8646 71.1533 75.1187 71.3846C75.3728 71.6159 75.696 71.757 76.0383 71.7861C76.3807 71.8151 76.7231 71.7306 77.0125 71.5454C80.4548 69.3448 83.4151 66.469 85.7145 63.0918C88.0139 59.7147 89.6047 55.9063 90.3906 51.897L91.1 48.3033C91.161 47.9338 91.341 47.5944 91.6126 47.3366C91.8842 47.0788 92.2325 46.9168 92.6047 46.8751C92.7601 46.8625 92.9164 46.8865 93.0608 46.9454C93.2052 47.0044 93.3337 47.0964 93.4359 47.2142C93.5672 47.3733 93.6614 47.5595 93.7119 47.7595C93.7625 47.9594 93.768 48.1681 93.7281 48.3704L92.625 55.3345C91.2348 63.9991 86.959 71.9402 80.4906 77.8704C80.3306 78.0169 80.2028 78.195 80.1153 78.3936C80.0279 78.5921 79.9828 78.8066 79.9828 79.0236V81.2501H68.7875L68.9344 75.2017C69.0412 73.0434 69.5997 70.9315 70.5737 69.0026C71.5477 67.0736 72.9157 65.3705 74.5891 64.0033C74.7607 63.8646 74.9008 63.6909 75 63.4939L77.4141 58.7064C77.4895 58.5435 77.6053 58.4025 77.7505 58.297C77.8957 58.1914 78.0655 58.1247 78.2438 58.1033Z" fill="#7E8282"></path>
|
||||
<path d="M26.5625 31.2499V37.4999C26.5625 37.9143 26.7271 38.3117 27.0201 38.6048C27.3132 38.8978 27.7106 39.0624 28.125 39.0624H29.6875V59.3749C29.6875 59.7893 29.8521 60.1867 30.1451 60.4798C30.4382 60.7728 30.8356 60.9374 31.25 60.9374H68.75C69.1644 60.9374 69.5618 60.7728 69.8549 60.4798C70.1479 60.1867 70.3125 59.7893 70.3125 59.3749V39.0624H71.875C72.2894 39.0624 72.6868 38.8978 72.9799 38.6048C73.2729 38.3117 73.4375 37.9143 73.4375 37.4999V31.2499C73.4375 30.8355 73.2729 30.4381 72.9799 30.1451C72.6868 29.852 72.2894 29.6874 71.875 29.6874H66.3344C66.8884 28.7388 67.1827 27.6609 67.1875 26.5624C67.2075 25.3189 66.8493 24.0986 66.1604 23.0632C65.4715 22.0277 64.4844 21.226 63.3297 20.764C62.2128 20.2964 60.9801 20.1794 59.7952 20.4286C58.6103 20.6778 57.5292 21.2814 56.6953 22.1593L50 29.014L43.3047 22.164C42.4704 21.2866 41.3893 20.6834 40.2046 20.4343C39.0198 20.1851 37.7873 20.3017 36.6703 20.7687C35.5164 21.2304 34.5298 22.0314 33.8409 23.0659C33.1521 24.1005 32.7935 25.3197 32.8125 26.5624C32.8173 27.6609 33.1116 28.7388 33.6656 29.6874H28.125C27.7106 29.6874 27.3132 29.852 27.0201 30.1451C26.7271 30.4381 26.5625 30.8355 26.5625 31.2499ZM67.1875 57.8124H32.8125V39.0624H67.1875V57.8124ZM58.9297 24.3483C59.331 23.917 59.8554 23.6198 60.4316 23.497C61.0078 23.3743 61.6078 23.4321 62.15 23.6624C62.8059 23.9414 63.3472 24.4353 63.6851 25.0629C64.0229 25.6905 64.1372 26.4144 64.009 27.1155C63.8808 27.8166 63.5178 28.4532 62.9798 28.9207C62.4417 29.3881 61.7606 29.6585 61.0484 29.6874H53.7047L58.9297 24.3483ZM37.85 23.6624C38.2094 23.5146 38.5942 23.4381 38.9828 23.4374C39.3745 23.4408 39.7614 23.5236 40.1202 23.6807C40.4789 23.8378 40.8022 24.066 41.0703 24.3515L46.2891 29.6874H38.9453C38.2338 29.6569 37.5537 29.3853 37.0169 28.9173C36.4801 28.4493 36.1184 27.8127 35.9912 27.1119C35.864 26.4112 35.9788 25.688 36.3169 25.0612C36.655 24.4343 37.1946 23.9411 37.85 23.6624ZM29.6875 32.8124H70.3125V35.9374H29.6875V32.8124Z" fill="#7E8282"></path>
|
||||
<path class="svg-themeColor" d="M57.7306 8.96596C57.639 8.69301 57.4738 8.45065 57.2533 8.26564C57.0327 8.08063 56.7653 7.96016 56.4806 7.91752L52.9868 7.38471L51.4087 4.02377C51.2825 3.75534 51.0825 3.52837 50.8321 3.36938C50.5817 3.2104 50.2912 3.12598 49.9946 3.12598C49.698 3.12598 49.4075 3.2104 49.1571 3.36938C48.9067 3.52837 48.7067 3.75534 48.5806 4.02377L47.0024 7.38471L43.5087 7.91752C43.2247 7.96082 42.9581 8.08159 42.7382 8.26655C42.5184 8.45152 42.3538 8.69353 42.2625 8.96597C42.1713 9.2384 42.1569 9.53073 42.221 9.81079C42.2851 10.0909 42.4252 10.3478 42.6259 10.5535L45.2009 13.191L44.5899 16.941C44.5427 17.2304 44.578 17.5273 44.6916 17.7977C44.8052 18.0681 44.9926 18.301 45.2324 18.4699C45.4721 18.6388 45.7546 18.7368 46.0475 18.7527C46.3403 18.7685 46.6317 18.7017 46.8884 18.5597L49.9993 16.8378L53.1056 18.5566C53.3623 18.6985 53.6538 18.7652 53.9467 18.7492C54.2396 18.7332 54.5221 18.635 54.7618 18.466C55.0014 18.2971 55.1887 18.0643 55.3022 17.7941C55.4158 17.5239 55.4511 17.2271 55.404 16.9378L54.7931 13.1878L57.3681 10.5503C57.568 10.3449 57.7076 10.0884 57.7715 9.80899C57.8355 9.52954 57.8213 9.23789 57.7306 8.96596ZM52.0056 11.5738C51.8347 11.7489 51.7073 11.9618 51.6338 12.1952C51.5602 12.4286 51.5425 12.676 51.5821 12.9175L51.8024 14.2628L50.7556 13.6847C50.5241 13.5567 50.2639 13.4895 49.9993 13.4895C49.7348 13.4895 49.4746 13.5567 49.2431 13.6847L48.1962 14.2628L48.4165 12.9175C48.4561 12.676 48.4384 12.4286 48.3648 12.1952C48.2913 11.9618 48.1639 11.7489 47.9931 11.5738L46.9915 10.5472L48.304 10.3472C48.5576 10.3083 48.7978 10.2076 49.0033 10.0539C49.2087 9.90023 49.3732 9.69829 49.4821 9.46596L49.9993 8.37221L50.5165 9.46596C50.6254 9.69829 50.7899 9.90023 50.9953 10.0539C51.2008 10.2076 51.441 10.3083 51.6946 10.3472L53.0071 10.5472L52.0056 11.5738Z" fill="#7E8282"></path>
|
||||
<path class="svg-themeColor" d="M23.3556 21.466C23.264 21.193 23.0988 20.9506 22.8783 20.7656C22.6577 20.5806 22.3903 20.4602 22.1056 20.4175L18.6118 19.8847L17.0337 16.5238C16.9075 16.2553 16.7075 16.0284 16.4571 15.8694C16.2067 15.7104 15.9162 15.626 15.6196 15.626C15.323 15.626 15.0325 15.7104 14.7821 15.8694C14.5317 16.0284 14.3317 16.2553 14.2056 16.5238L12.6274 19.8847L9.13369 20.4175C8.84966 20.4608 8.58306 20.5816 8.36321 20.7666C8.14336 20.9515 7.97877 21.1935 7.88753 21.466C7.79628 21.7384 7.78192 22.0307 7.84603 22.3108C7.91013 22.5909 8.05021 22.8478 8.25088 23.0535L10.8259 25.691L10.2149 29.441C10.1677 29.7304 10.2029 30.0273 10.3166 30.2977C10.4302 30.5681 10.6176 30.801 10.8574 30.9699C11.0971 31.1388 11.3796 31.2368 11.6725 31.2527C11.9653 31.2685 12.2567 31.2017 12.5134 31.0597L15.6243 29.3378L18.7306 31.0566C18.9873 31.1985 19.2788 31.2652 19.5717 31.2492C19.8646 31.2332 20.1471 31.135 20.3868 30.966C20.6264 30.7971 20.8137 30.5643 20.9272 30.2941C21.0408 30.0239 21.0761 29.7271 21.029 29.4378L20.4181 25.6878L22.9931 23.0503C23.193 22.8449 23.3326 22.5884 23.3965 22.309C23.4605 22.0295 23.4463 21.7379 23.3556 21.466ZM17.6306 24.0738C17.4597 24.2489 17.3323 24.4618 17.2588 24.6952C17.1852 24.9286 17.1675 25.176 17.2071 25.4175L17.4274 26.7628L16.3806 26.1847C16.1491 26.0567 15.8889 25.9895 15.6243 25.9895C15.3598 25.9895 15.0996 26.0567 14.8681 26.1847L13.8212 26.7628L14.0415 25.4175C14.0811 25.176 14.0634 24.9286 13.9898 24.6952C13.9163 24.4618 13.7889 24.2489 13.6181 24.0738L12.6165 23.0472L13.929 22.8472C14.1826 22.8083 14.4228 22.7076 14.6283 22.5539C14.8338 22.4002 14.9982 22.1983 15.1071 21.966L15.6243 20.8722L16.1415 21.966C16.2504 22.1983 16.4149 22.4002 16.6204 22.5539C16.8258 22.7076 17.066 22.8083 17.3196 22.8472L18.6321 23.0472L17.6306 24.0738Z" fill="#7E8282"></path>
|
||||
<path class="svg-themeColor" d="M76.6436 21.4652C76.5523 21.7375 76.5378 22.0298 76.6017 22.3099C76.6657 22.5899 76.8056 22.847 77.0061 23.0527L79.5811 25.6902L78.9702 29.4402C78.923 29.7296 78.9582 30.0265 79.0718 30.2969C79.1854 30.5673 79.3728 30.8003 79.6126 30.9691C79.8524 31.138 80.1349 31.236 80.4277 31.2519C80.7206 31.2678 81.012 31.2009 81.2686 31.0589L84.3749 29.3371L87.4811 31.0558C87.7378 31.1977 88.0294 31.2644 88.3223 31.2484C88.6152 31.2324 88.8976 31.1342 89.1374 30.9652C89.377 30.7963 89.5642 30.5635 89.6778 30.2933C89.7913 30.0231 89.8266 29.7264 89.7795 29.4371L89.1686 25.6871L91.7436 23.0496C91.9443 22.8439 92.0844 22.587 92.1485 22.3069C92.2126 22.0268 92.1982 21.7345 92.107 21.4621C92.0157 21.1896 91.8511 20.9476 91.6313 20.7626C91.4114 20.5777 91.1448 20.4569 90.8608 20.4136L87.367 19.8808L85.7889 16.5199C85.6627 16.2514 85.4628 16.0245 85.2124 15.8655C84.962 15.7065 84.6715 15.6221 84.3749 15.6221C84.0782 15.6221 83.7878 15.7065 83.5374 15.8655C83.287 16.0245 83.087 16.2514 82.9608 16.5199L81.3827 19.8808L77.8889 20.4136C77.6047 20.4573 77.338 20.5786 77.1183 20.7642C76.8986 20.9497 76.7343 21.1923 76.6436 21.4652ZM82.6795 22.8464C82.9332 22.8076 83.1733 22.7068 83.3788 22.5531C83.5843 22.3994 83.7488 22.1975 83.8577 21.9652L84.3749 20.8714L84.892 21.9652C85.001 22.1975 85.1654 22.3994 85.3709 22.5531C85.5764 22.7068 85.8165 22.8076 86.0702 22.8464L87.3827 23.0464L86.3811 24.073C86.2102 24.2482 86.0829 24.461 86.0093 24.6944C85.9358 24.9278 85.9181 25.1752 85.9577 25.4167L86.178 26.7621L85.1311 26.1839C84.8996 26.0559 84.6394 25.9887 84.3749 25.9887C84.1103 25.9887 83.8501 26.0559 83.6186 26.1839L82.5717 26.7621L82.792 25.4167C82.8316 25.1752 82.8139 24.9278 82.7404 24.6944C82.6668 24.461 82.5395 24.2482 82.3686 24.073L81.367 23.0464L82.6795 22.8464Z" fill="#7E8282"></path>
|
||||
</svg>
|
||||
<p class="orderCompletedTop__title">감사합니다.</p>
|
||||
<p class="orderCompletedTop__subTitle"><em><c:out value="${order.mbrNm}"/></em>님의 주문이 정상적으로 완료 되었습니다.</p>
|
||||
</div>
|
||||
<h2 class="cartOrder__title">주문완료</h2>
|
||||
<div class="sub-right-content">
|
||||
<c:choose>
|
||||
<c:when test="${'04' == order.ordrTyCd || '05' == order.ordrTyCd}">
|
||||
<div class="sub-right-content__section">
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.shippingList}">
|
||||
<c:forEach var="shipping" items="${data.shippingList}" varStatus="status">
|
||||
<div class="multiDeliveryInfo">
|
||||
<div class="multiDeliveryInfo__info">
|
||||
<h5 class="multiDeliveryInfo__title"><c:out value="${status.count}"/>. 배송지 정보 </h5>
|
||||
<div class="multiDeliveryInfo__description">
|
||||
<span class="multiDeliveryInfo__name"><c:out value="${shipping.recpntNm}"/></span>
|
||||
<span class="multiDeliveryInfo__address">
|
||||
<c:out value="${not empty shipping.dlvylcZip ? '(' += shipping.dlvylcZip += ')' : ''}"/>
|
||||
<c:out value="${shipping.adres}"/>
|
||||
<c:out value="${shipping.dlvylcAdresDtl}"/>
|
||||
</span>
|
||||
<button class="btn sm outline multiDeliveryInfo__detailBtn">주소 상세보기</button>
|
||||
</div>
|
||||
<div class="multiDeliveryInfo__subContent" style="display: none;">
|
||||
<div class="table-wrapper multiDeliveryInfo__table">
|
||||
<h3 class="multiDeliveryInfo__subTitle">배송지 정보</h3>
|
||||
<table class="table">
|
||||
<caption>배송지 정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 180px;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>받는분</th>
|
||||
<td><c:out value="${shipping.recpntNm}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주소</th>
|
||||
<td>
|
||||
<c:out value="${not empty shipping.dlvylcZip ? '(' += shipping.dlvylcZip += ')' : ''}"/>
|
||||
<c:out value="${shipping.adres}"/>
|
||||
<c:out value="${shipping.dlvylcAdresDtl}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대폰번호</th>
|
||||
<td><c:out value="${shipping.recpntMbtlnb}"/></td>
|
||||
</tr>
|
||||
<c:if test="${ not empty shipping.giftSttusCd}">
|
||||
<tr>
|
||||
<th>선물상태</th>
|
||||
<td><c:out value="${shipping.giftSttusCdNm}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>선물 메시지</th>
|
||||
<td><c:out value="${shipping.giftMssageCn}"/></td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<tr>
|
||||
<th>배송 시 요청사항</th>
|
||||
<td><c:out value="${shipping.dlvyMssageCn}"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cartOrder__list">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>상품정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: auto;">
|
||||
<col style="width: 40px;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>상품명</th>
|
||||
<th>수량</th>
|
||||
<th>상품금액</th>
|
||||
<th>할인금액</th>
|
||||
<th>할인적용금액</th>
|
||||
<th>적립금</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${not empty shipping.goodsList}">
|
||||
<c:forEach var="goods" items="${shipping.goodsList}" varStatus="status">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="cartItem">
|
||||
<div class="cartItem__image">
|
||||
<img src="<c:out value="${ cdnurl }${goods.goodsImgCours}"/>" onerror="this.src='<c:url value="/mngr/images/image_placeholder.png"/>" alt="<c:out value="${goods.goodsNm}"/>">
|
||||
</div>
|
||||
<div class="cartItem__productInfo">
|
||||
<a href="javascript:void(0);" class="cartItem__productTitle"><c:out value="${goods.goodsNm}"/></a>
|
||||
<span class="cartItem__productOption"><span class="option-badge">옵션</span> <c:out value="${goods.optnNm}"/></span>
|
||||
<c:if test="${not empty goods.inputOptnText}">
|
||||
<span class="cartItem__productOption"><c:out value="${goods.inputOptnText}"/></span>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td><span><fmt:formatNumber value="${goods.ordrQy}" pattern="#,###"/></span></td>
|
||||
<td>
|
||||
<span class="cartItem__normalPrice">
|
||||
<span class="comma"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__discountPrice">
|
||||
<span class="cartItem__discountMinus">(-)</span>
|
||||
<span class="comma"><fmt:formatNumber value="${goods.dscntAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__afterPrice">
|
||||
<span class="comma"><fmt:formatNumber value="${goods.applyDscntAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__mileage">
|
||||
<span class=" comma"><fmt:formatNumber value="${goods.mlgAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="orderList__no-result">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="">
|
||||
<p class="orderList__no-result-text">주문내역이 없습니다.</p>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="sub-right-content__section">
|
||||
<div class="sub-right-content__section">
|
||||
<div class="cartOrder__list">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>주문상세내역</caption>
|
||||
<colgroup>
|
||||
<col style="width: auto;">
|
||||
<col style="width: 40px;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 10%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>상품명</th>
|
||||
<th>수량</th>
|
||||
<th>상품금액</th>
|
||||
<th>할인금액</th>
|
||||
<th>할인적용금액</th>
|
||||
<th>적립금</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.goodsList}">
|
||||
<c:forEach var="goods" items="${data.goodsList}">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="cartItem">
|
||||
<div class="cartItem__image">
|
||||
<img src="<c:out value="${cdnurl}${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
|
||||
</div>
|
||||
<div class="cartItem__productInfo">
|
||||
<a href="javascript:void(0);" class="cartItem__productTitle"><c:out value="${goods.goodsNm}"/></a>
|
||||
<span class="cartItem__productOption"><span class="option-badge">옵션</span> <c:out value="${goods.optnNm}"/></span>
|
||||
<c:if test="${not empty goods.inputOptnText}">
|
||||
<span class="cartItem__productOption"><c:out value="${goods.inputOptnText}"/></span>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span><fmt:formatNumber value="${goods.ordrQy}" pattern="#,###"/></span>
|
||||
<input type="hidden" class="goodsInnb" name="goodsInnb" value ="${goods.goodsInnb}"/>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__normalPrice">
|
||||
<span class=" comma"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__discountPrice">
|
||||
<span class="cartItem__discountMinus">(-)</span>
|
||||
<span class="comma"><fmt:formatNumber value="${goods.dscntAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__afterPrice">
|
||||
<span class="comma"><fmt:formatNumber value="${goods.applyDscntAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__mileage">
|
||||
<span class=" comma"><fmt:formatNumber value="${goods.mlgAmt}" pattern="#,###"/></span>
|
||||
<span class="priceUnit">원</span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
<c:if test="${'04' != order.ordrTyCd && '05' != order.ordrTyCd}">
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__innerTitle">배송지 정보</h3>
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.shippingList}">
|
||||
<c:forEach var="shipping" items="${data.shippingList}" varStatus="status">
|
||||
<div class="table-wrapper orderDetail__table">
|
||||
<table class="table">
|
||||
<caption>배송지 정보</caption>
|
||||
<colgroup>
|
||||
<col style="width: 220px;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>받는분</th>
|
||||
<td><c:out value="${shipping.recpntNm}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주소</th>
|
||||
<td>
|
||||
<c:out value="${not empty shipping.dlvylcZip ? '(' += shipping.dlvylcZip += ')' : ''}"/>
|
||||
<c:out value="${shipping.adres}"/>
|
||||
<c:out value="${shipping.dlvylcAdresDtl}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대폰번호</th>
|
||||
<td><c:out value="${shipping.recpntMbtlnb}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>배송 시 요청사항</th>
|
||||
<td><c:out value="${shipping.dlvyMssageCn}"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="orderList__no-result">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="">
|
||||
<p class="orderList__no-result-text">주문내역이 없습니다.</p>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__innerTitle">주문자 정보</h3>
|
||||
<div class="table-wrapper orderDetail__table">
|
||||
<table class="table">
|
||||
<caption>주문자 정보</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 220px;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>이름</th>
|
||||
<td><c:out value="${order.mbrNm}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대폰번호</th>
|
||||
<td><c:out value="${order.ordrrMbtlnb}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>이메일</th>
|
||||
<td><c:out value="${order.ordrrEmail}"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="textInfo"><i class="icon icon_textInfo--sm"></i>주문 관련 정보가 문자로 발송됩니다.</p>
|
||||
<c:if test="${'02' == order.mbrTyCd}">
|
||||
</br><p class="textInfo"><i class="icon icon_textInfo--sm"></i>비회원은 주문번호와 주문자의 휴대폰 번호로 조회가 가능합니다.</p>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__innerTitle">주문 결제 정보</h3>
|
||||
<div class="table-wrapper orderDetail__paymentTable">
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.setleList}">
|
||||
<c:forEach var="setle" items="${data.setleList}" varStatus="status">
|
||||
<table class="table">
|
||||
<caption>주문 결제 정보</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 160px;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>주문번호</th>
|
||||
<td id="_orderNo"><c:out value="${order.ordrInnb}"/> <span class="orderDetail__date">(<c:out value="${order.ordrRceptDt}"/>)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문상태</th>
|
||||
<td><c:out value="${setle.ordrSttusNm}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>결제방식</th>
|
||||
<td><c:out value="${setle.setleTyNm}"/></td>
|
||||
</tr>
|
||||
<c:if test="${not empty setle.rcpmnyBnnkNm}">
|
||||
<tr>
|
||||
<th>입금계좌</th>
|
||||
<td><c:out value="${setle.rcpmnyBnnkNm}"/> <c:out value="${setle.rcpmnyAcntnb}"/> (<c:out value="${setle.rcpmnyDpstrNm}"/>)</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<tr>
|
||||
<th>결제금액</th>
|
||||
<td><span class="comma"><fmt:formatNumber value="${setle.setleAmt}" pattern="#,###"/></span>원</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>결제일시</th>
|
||||
<td><c:out value="${not empty setle.setleDt ? setle.setleDt : '입금대기'}"/></td>
|
||||
</tr>
|
||||
<c:if test="${not empty setle.cashAt && setle.cashAt eq 'Y'}">
|
||||
<tr>
|
||||
<th>GC 머니</th>
|
||||
<td>
|
||||
<span class="comma">${setle.cashSetleAmt}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<c:if test="${setle.reqstDvCd ne '04' && not empty setle.issuSttusCd}">
|
||||
<tr>
|
||||
<th>현금영수증</th>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${setle.crtnb eq '0100001234'}">
|
||||
<span class="orderDetail__waiting">발급상태 : 미신청</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="orderDetail__waiting">발급상태 : <c:out value="${setle.issuSttusNm}"/></span>
|
||||
<span class="orderDetail__deduction"><c:out value="${setle.issuTrgetDvCd eq '01' ? '(개인소득공제)' : '사업자지출증빙'}"/></span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<%--
|
||||
<tr>
|
||||
<th>증빙서류</th>
|
||||
<td><button class="btn xsm gray2">신용카드 매출전표</button></td>
|
||||
</tr>
|
||||
--%>
|
||||
</tbody>
|
||||
</table>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="orderList__no-result">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="!">
|
||||
<p class="orderList__no-result-text">결제내역이 없습니다.</p>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
|
||||
<c:set var="total" value="${data.total}"/>
|
||||
<div class="orderDetail__orderPrice">
|
||||
<ul class="cartOrderBox__list">
|
||||
<li>
|
||||
<span class="cartOrderBox__th">총 주문금액</span>
|
||||
<span class="cartOrderBox__td"><span class="comma"><fmt:formatNumber value="${total.slepric}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="cartOrderBox__th">할인금액</span>
|
||||
<span class="cartOrderBox__td"><span class="cartOrderBox__discountMinus">(-)</span><span class="comma"><fmt:formatNumber value="${total.dscntAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</li>
|
||||
<c:forEach var="dscnt" items="${data.dscntList}" varStatus="status">
|
||||
<c:if test="${'03' != dscnt.dscntDvCd}">
|
||||
<li class="cartOrderBox__miscItem ${1 == status.count ? 'first' : ''}">
|
||||
<span class="cartOrderBox__miscTh"><c:out value="${dscnt.dscntDvNm}"/></span>
|
||||
<span class="cartOrderBox__miscTd"><span class="comma"><fmt:formatNumber value="${dscnt.dscntAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</li>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
<li>
|
||||
<span class="cartOrderBox__th">배송비</span>
|
||||
<span class="cartOrderBox__td"><span class="comma"><fmt:formatNumber value="${total.dlvyAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</li>
|
||||
<c:forEach var="dscnt" items="${data.dscntList}" varStatus="status">
|
||||
<c:if test="${'03' == dscnt.dscntDvCd}">
|
||||
<li class="cartOrderBox__miscItem ${1 == status.count ? 'first' : ''}">
|
||||
<span class="cartOrderBox__miscTh"><c:out value="${dscnt.dscntDvNm}"/></span>
|
||||
<span class="cartOrderBox__miscTd"><span class="comma"><fmt:formatNumber value="${dscnt.dscntAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</li>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
<li>
|
||||
</ul>
|
||||
<div class="cartOrderBox__total">
|
||||
<span class="cartOrderBox__totalTh">결제금액</span>
|
||||
<span class="cartOrderBox__totalTd"><span class="comma"><fmt:formatNumber value="${total.setleAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<c:if test="${not empty data.refundList}">
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__title">무효/취소/반품 내역</h3>
|
||||
<div class="sub-right-content__section">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>주문상세내역</caption>
|
||||
<colgroup>
|
||||
<col style="width: auto;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 20%;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 12%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>무효/취소/반품</th>
|
||||
<th>접수일시</th>
|
||||
<th>처리일시</th>
|
||||
<th>처리수량</th>
|
||||
<th>처리금액</th>
|
||||
<th>처리상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="refund" items="${data.refundList}">
|
||||
<tr>
|
||||
<td> <c:out value="${refund.refundTyNm}"/></td>
|
||||
<td><c:out value="${refund.refundReqstDt}"/></td>
|
||||
<td><c:out value="${refund.refundComptDt}"/></td>
|
||||
<td><fmt:formatNumber value="${refund.refundQy}" pattern="#,###"/></td>
|
||||
<td><fmt:formatNumber value="${refund.refundAmt}" pattern="#,###"/></td>
|
||||
<td><c:out value="${refund.refundProcsSttusNm}"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<input type="hidden" value="${adscript}" id="adscript"/>
|
||||
<div class="sub-bottom-btn-container">
|
||||
<a href="javascript:void(0);" id="btnGoHome" class="btn xl outline theme">쇼핑하기</a>
|
||||
<a href="javascript:void(0);" id="btnOrdrList" class="btn xl outline">주문내역</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
</body>
|
||||
</html>
|
||||
115
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrFailrR.jsp
Normal file
115
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrFailrR.jsp
Normal file
@@ -0,0 +1,115 @@
|
||||
<%@ 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 : selectOrdrComptR.jsp
|
||||
Description : 주문실패
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
|
||||
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
fn_init();
|
||||
|
||||
fn_event();
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 초기 설정
|
||||
**********************************************************/
|
||||
const fn_init = function() {
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 이벤트 설정
|
||||
**********************************************************/
|
||||
const fn_event = function() {
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* function
|
||||
**********************************************************/
|
||||
const fn_go_page = function() {
|
||||
const form = $('#form');
|
||||
|
||||
$(form).attr('method', 'post');
|
||||
|
||||
if (fn_is_empty($('#mbrId').val())) {
|
||||
$(form).attr('action', '<c:url value="/sopmal/ordr/selectNmbrPurchsForm"/>');
|
||||
history.replaceState(null, '', '/sopmal/ordr/selectNmbrPurchsForm');
|
||||
} else {
|
||||
$(form).attr('action', '<c:url value="/sopmal/ordr/selectMbrPurchsForm"/>');
|
||||
history.replaceState(null, '', '/sopmal/ordr/selectMbrPurchsForm');
|
||||
}
|
||||
|
||||
$(form).submit();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<form id="form">
|
||||
<input type="hidden" name="sopmalCd" id="sopmalCd" value="<c:out value="${paramVO.sopmalCd}"/>"/>
|
||||
<input type="hidden" name="ordrInnb" id="ordrInnb" value="<c:out value="${paramVO.ordrInnb}"/>"/>
|
||||
<input type="hidden" name="ordrTyCd" id="ordrTyCd" value="<c:out value="${paramVO.ordrTyCd}"/>"/>
|
||||
<input type="hidden" name="mbrId" id="mbrId" value="<c:out value="${paramVO.mbrId}"/>"/>
|
||||
<input type="hidden" name="sesionId" id="sesionId" value="<c:out value="${paramVO.sesionId}"/>"/>
|
||||
<c:forEach var="cartGoods" items="${data.cartGoodsList}">
|
||||
<input type="hidden" name="cartInnbs" value="<c:out value="${cartGoods.cartInnb}"/>"/>
|
||||
</c:forEach>
|
||||
</form>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="orderFailed">
|
||||
<div class="orderFailed__inner">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="">
|
||||
<h3 class="orderFailed__title">
|
||||
<em>주문 상품 결제가 실패</em>하였습니다.
|
||||
</h3>
|
||||
<p class="orderFailed__text">
|
||||
불편을 드려 죄송합니다.
|
||||
<c:if test="${'03' != paramVO.ordrTyCd}">
|
||||
<br>하단의 <em>주문/배송조회 페이지로 가기 버튼</em>을 선택해 다시 결제를 시도해 주시면 감사하겠습니다.
|
||||
</c:if>
|
||||
<c:if test="${'03' == paramVO.ordrTyCd}">
|
||||
<br>자세한 내용은 고객센터 1600-3872 또는 custom@nutricore.co.kr 으로 문의 바랍니다
|
||||
</c:if>
|
||||
</p>
|
||||
<div class="orderFailed__reason">
|
||||
주문 실패 사유:<c:out value="${paramVO.message}"/>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${'03' != paramVO.ordrTyCd}">
|
||||
<div class="sub-bottom-btn-container">
|
||||
<a href="javascript:void(0);" onclick="fn_go_page();" class="btn xl outline">결제 페이지로 가기</a>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
</body>
|
||||
</html>
|
||||
128
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstGcpayPayR.jsp
Normal file
128
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstGcpayPayR.jsp
Normal file
@@ -0,0 +1,128 @@
|
||||
<%@ 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 : OrdrReqstGcpayPayR.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">
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
const ordrInnb = $('#ordrInnb').val();
|
||||
const goodsNm = $('#goodsNm').val();
|
||||
const setleTyCd = $('#setleTyCd').val();
|
||||
const setleAmt = $('#setleAmt').val();
|
||||
const ordrrEmail = $('#ordrrEmail').val();
|
||||
const methodId = $('#methodId').val();
|
||||
|
||||
const request = {
|
||||
amount: setleAmt,
|
||||
orderId: ordrInnb,
|
||||
orderName: goodsNm,
|
||||
customerEmail: ordrrEmail,
|
||||
methodId: methodId
|
||||
};
|
||||
|
||||
if ('01' === setleTyCd) { // 카드
|
||||
const cardInstallmentPlan = $('#cardInstallmentPlan').val();
|
||||
const useCardPoint = $('#useCardPoint').val();
|
||||
|
||||
if (!fn_is_empty(cardInstallmentPlan)) {
|
||||
request['cardInstallmentPlan'] = cardInstallmentPlan;
|
||||
}
|
||||
|
||||
if (!fn_is_empty(useCardPoint)) {
|
||||
request['useCardPoint'] = 'true' === useCardPoint;
|
||||
}
|
||||
}
|
||||
|
||||
if ('03' === setleTyCd) { // 실시간 계좌이체
|
||||
const cshRciptIssuAt = $('#cshRciptIssuAt').val();
|
||||
const issuTrgetDvCd = $('#issuTrgetDvCd').val();
|
||||
const crtnb = $('#crtnb').val();
|
||||
|
||||
if ('01' === cshRciptIssuAt) { // 발급
|
||||
const cashReceipt = {
|
||||
type: '소득공제',
|
||||
registrationNumberType: '01' === issuTrgetDvCd ? 'MOBILE' : 'BUSINESS_REGISTRATION',
|
||||
registrationNumber: crtnb
|
||||
}
|
||||
|
||||
request['cashReceipt'] = cashReceipt;
|
||||
}
|
||||
}
|
||||
|
||||
const deviceType = $('#deviceType').val();
|
||||
|
||||
brandpay
|
||||
.requestPayment(request)
|
||||
.then(function (data) {
|
||||
$('#paymentKey').val(data.paymentKey);
|
||||
$('#amount').val(data.amount);
|
||||
$('#orderId').val(data.orderId);
|
||||
$('#methodId').val(data.methodId);
|
||||
|
||||
$('#order_info').submit();
|
||||
})
|
||||
.catch(function (error) {
|
||||
if (error.code === "USER_CANCEL") {
|
||||
if ('sopmal_m' === deviceType) {
|
||||
fn_call_alert_modal('GC PAY 간편결제가 취소되었습니다.');
|
||||
} else {
|
||||
alert('GC PAY 간편결제가 취소되었습니다.');
|
||||
}
|
||||
location.reload();
|
||||
//return false;
|
||||
} else {
|
||||
alert(error.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<form name="order_info" id="order_info" method="post" action="<c:url value="/sopmal/ordr/insertGcpaySetle"/>">
|
||||
<input type="hidden" name="sopmalCd" id="sopmalCd" value="${data.setle.sopmalCd}"/>
|
||||
<input type="hidden" name="ordrInnb" id="ordrInnb" value="${data.setle.ordrInnb}"/>
|
||||
<input type="hidden" name="pgCmpnyNm" id="pgCmpnyNm" value="${data.setle.pgCmpnyNm}"/>
|
||||
<input type="hidden" name="setleTyCd" id="setleTyCd" value="${data.setle.setleTyCd}"/>
|
||||
|
||||
<input type="hidden" name="goodsNm" id="goodsNm" value="${data.setle.goodsNm}"/> <!-- 상품명 -->
|
||||
<input type="hidden" name="setleAmt" id="setleAmt" value="${data.setle.setleAmt}"/> <!-- 결제 금액 -->
|
||||
<input type="hidden" name="ordrrNm" id="ordrrNm" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
|
||||
<input type="hidden" name="ordrrEmail" id="ordrrEmail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 -->
|
||||
<input type="hidden" name="ordrrMbtlnb" id="ordrrMbtlnb" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 -->
|
||||
<input type="hidden" name="mbrId" id="mbrId" value="${data.ordr.mbrId}"/> <!-- 쇼핑몰회원ID -->
|
||||
<input type="hidden" name="mbrInnb" id="mbrInnb" value="${data.ordr.mbrInnb}" /> <!-- 회원고유번호 -->
|
||||
<input type="hidden" name="sesionId" value="${data.ordr.sesionId}" />
|
||||
|
||||
<input type="hidden" name="cshRciptIssuAt" id="cshRciptIssuAt" value="${data.setle.cshRciptIssuAt}"/> <!-- 현금영수증 발급여부 -->
|
||||
<input type="hidden" name="issuTrgetDvCd" id="issuTrgetDvCd" value="${data.setle.issuTrgetDvCd}"/> <!-- 발급대상구분코드 (01:개인, 02:사업자) -->
|
||||
<input type="hidden" name="crtnb" id="crtnb" value="${data.setle.crtnb}"/> <!-- 인증번호 -->
|
||||
|
||||
<input type="hidden" name="methodId" id="methodId" value="${data.setle.gcpayMethodId}"/> <!-- GCpay 결제수단 id -->
|
||||
<input type="hidden" name="cardInstallmentPlan" id="cardInstallmentPlan" value="${data.setle.gcpayCardInstallmentPlan}"/> <!-- GCpay 신용카드할부개월수 -->
|
||||
<input type="hidden" name="useCardPoint" id="useCardPoint" value="${data.setle.gcpayUseCardPoint}"/> <!-- GCpay 카드사 포인트 사용 여부 -->
|
||||
|
||||
<input type="hidden" name="paymentKey" id="paymentKey" value=""/>
|
||||
<input type="hidden" name="amount" id="amount" value=""/>
|
||||
<input type="hidden" name="orderId" id="orderId" value=""/>
|
||||
|
||||
<input type="text" name="deviceType" id="deviceType" value="${deviceType}"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,222 @@
|
||||
<%@ 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">
|
||||
<header>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<%-- 공통 include --%>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
const ordr_idxx = $('input[name="ordr_idxx"]').val();
|
||||
const good_mny = $('input[name="good_mny"]').val();
|
||||
const good_name = $('input[name="good_name"]').val();
|
||||
const pay_method = $('input[name="pay_method"]').val();
|
||||
const escw_used = $('input[name="escw_used"]').val();
|
||||
const retUrl = window.location.origin + '<c:url value="/sopmal/ordr/insertKcpMobileSetle"/>'
|
||||
//retUrl = retUrl.replace(/www\./g, '');
|
||||
|
||||
//거래등록을 위한 param
|
||||
const param = {
|
||||
//'site_cd': 'T0007',
|
||||
'site_cd': '${data.setle.siteCdMid}',
|
||||
'ordr_idxx': ordr_idxx,
|
||||
'good_mny': good_mny,
|
||||
'good_name': good_name,
|
||||
'pay_method': pay_method,
|
||||
'Ret_URL': retUrl,
|
||||
'escw_used': escw_used,
|
||||
'user_agent': '',
|
||||
'sopmalCd': '${data.ordr.sopmalCd}'
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
contentType: 'application/json',
|
||||
url: '<c:url value="/sopmal/ordr/selectKcpTradeReg"/>',
|
||||
data: JSON.stringify(param),
|
||||
dataType: 'json',
|
||||
async: false,
|
||||
success: function (data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
|
||||
if (!fn_is_empty(result)) {
|
||||
const response = JSON.parse(result.response);
|
||||
|
||||
if (!fn_is_empty(response)) {
|
||||
|
||||
if ('0000' === response.Code) {
|
||||
const form = $('#order_info');
|
||||
|
||||
$(form).find('input[name="approval_key"]').val(response.approvalKey);
|
||||
$(form).find('input[name="traceNo"]').val(response.traceNo);
|
||||
$(form).find('input[name="PayUrl"]').val(response.PayUrl);
|
||||
$(form).find('input[name="Ret_URL"]').val(retUrl);
|
||||
|
||||
create_goodInfo();
|
||||
create_virtdate();
|
||||
call_pay_form();
|
||||
} else {
|
||||
alert(response.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
fn_call_alert_modal('<spring:message code="error.internal-server"/>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function create_goodInfo() {
|
||||
if(document.order_info.pay_mod.value=='Y') {
|
||||
var chr31 = String.fromCharCode(31); // ASCII 코드값 31
|
||||
var good_info = "seq=1" + chr31 + "ordr_numb=0001" + chr31 + "good_name=${data.setle.goodsNm}" + chr31 + "good_cntx=2" + chr31 + "good_amtx=${data.setle.setleAmt}";
|
||||
document.order_info.good_info.value = good_info;
|
||||
}
|
||||
}
|
||||
|
||||
function create_virtdate(){
|
||||
//가상계좌 입금기한 설정
|
||||
const orderForm = $('#order_info');
|
||||
let dueDate = orderForm.find('.dueDate').val();
|
||||
let date = new Date();
|
||||
date.setDate(date.getDate() + (dueDate - 1)); // 오늘 기준 +2일
|
||||
|
||||
let yyyy = date.getFullYear();
|
||||
let yy = String(date.getFullYear()).slice(2); // 연도의 마지막 2자리
|
||||
let mm = String(date.getMonth() + 1).padStart(2, '0'); // 월 (0부터 시작하므로 +1 필요)
|
||||
let dd = String(date.getDate()).padStart(2, '0'); // 일
|
||||
|
||||
let fDueDate = yyyy+mm+dd;
|
||||
orderForm.find('.ipgmDate').val(fDueDate);
|
||||
}
|
||||
</script>
|
||||
</header>
|
||||
<body>
|
||||
<form name="order_info" id="order_info" method="post">
|
||||
<!-- 공통정보 -->
|
||||
<input type="hidden" name="req_tx" value="pay" />
|
||||
<input type="hidden" name="site_cd" value="${data.setle.siteCdMid}" /> <!-- NHN KCP 발급 사이트코드 -->
|
||||
<input type="hidden" name="site_name" value="${data.ordr.sopmalNm}" /> <!-- 상점이름(영문으로 작성권장) -->
|
||||
<input type="hidden" name="currency" value="410"/> <!-- 화폐단위 원화 - WON : 410 -->
|
||||
|
||||
<!-- 결제 수단 -->
|
||||
<c:if test="${'01' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="CARD" /> <!-- 신용카드 -->
|
||||
<input type="hidden" name="ActionResult" value="card" /> <!-- 신용카드 -->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'03' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="BANK" /> <!-- 계좌이체 -->
|
||||
<input type="hidden" name="ActionResult" value="acnt" /> <!-- 계좌이체 -->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'04' == data.setle.setleTyCd || '05' == data.setle.setleTyCd}"> <!-- 가상계좌 || 가상계좌(에스크로) -->
|
||||
<input type="hidden" name="pay_method" value="VCNT" /> <!-- 가상계좌 -->
|
||||
<input type="hidden" name="ActionResult" value="vcnt" /> <!-- 가상계좌 -->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'10' != data.setle.setleTyCd}">
|
||||
<input type="hidden" name="payco_direct" value="" />
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'10' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="payco_direct" value="Y" />
|
||||
<input type="hidden" name="pay_method" value="CARD" /> <!-- 신용카드 -->
|
||||
<input type="hidden" name="ActionResult" value="card" /> <!-- 신용카드 -->
|
||||
</c:if>
|
||||
|
||||
<!-- 인증시 필요한 파라미터(변경불가)-->
|
||||
<input type="hidden" name="van_code" value=""/>
|
||||
|
||||
<!-- 신용카드 설정 -->
|
||||
<input type="hidden" name="quotaopt" value="12"/> <!-- 최대 할부개월수 -->
|
||||
<!-- 리턴 URL (kcp와 통신후 결제를 요청할 수 있는 암호화 데이터를 전송 받을 가맹점의 주문페이지 URL) -->
|
||||
<input type="hidden" name="Ret_URL" value="" />
|
||||
<!-- 가맹점에서 APP으로 연동 시, 타 APP에서 가맹점 APP을 다시 호출하기 위한 값 ( 가맹점 APP 연동 시 필수 ) -->
|
||||
<input type="hidden" name="AppUrl" value="" />
|
||||
|
||||
<!-- 화면 크기조정 -->
|
||||
<input type="hidden" name="tablet_size" value="1.0 " />
|
||||
|
||||
<!-- 거래등록 응답값 -->
|
||||
<input type="hidden" name="approval_key" value=""/>
|
||||
<input type="hidden" name="traceNo" value="" />
|
||||
<input type="hidden" name="PayUrl" value="" />
|
||||
<!-- 인증창 호출 시 한글깨질 경우 encoding 처리 추가 (**인코딩 네임은 대문자) -->
|
||||
<input type="hidden" name="encoding_trans" value="UTF-8" />
|
||||
|
||||
<!-- 주문정보 -->
|
||||
<input type="hidden" name="ordr_idxx" value="${data.ordr.ordrInnb}"/> <!-- 상점 관리 주문번호 -->
|
||||
<input type="hidden" name="good_name" value="${data.setle.goodsNm}"/> <!-- 상품명 -->
|
||||
<input type="hidden" name="good_mny" value="${data.setle.setleAmt}"/> <!-- 결제 금액 -->
|
||||
<input type="hidden" name="buyr_name" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
|
||||
<input type="hidden" name="buyr_tel2" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 -->
|
||||
<input type="hidden" name="buyr_mail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 -->
|
||||
|
||||
<input type="hidden" name="dueDate" class="dueDate" value="${data.setle.dueDt}"/>
|
||||
<input type="hidden" name="ipgm_date" class="ipgmDate" value=""/>
|
||||
|
||||
|
||||
<!-- ========== 에스크로 정보 Start =============================== -->
|
||||
<!-- 에스크로 사용 여부 : 반드시 Y 로 설정 -->
|
||||
<input type="hidden" name="escw_used" value="Y"/>
|
||||
|
||||
<c:choose>
|
||||
<c:when test="${'05' == data.setle.setleTyCd}">
|
||||
<!-- <input type="hidden" name="pay_method" value="001000000000" /> 가상계죄(에스크로) 이지만 KCP 결제코드는 가상계좌 -->
|
||||
|
||||
<input type="hidden" name="rcvr_name" value="${data.shipping.recpntNm}" /> <!-- 수취인명 -->
|
||||
<input type="hidden" name="rcvr_tel1" value="${data.shipping.recpntTelnb}" /> <!-- 수취인 연락처1 -->
|
||||
<input type="hidden" name="rcvr_tel2" value="${data.shipping.recpntMbtlnb}" /> <!-- 수취인 휴대폰번호 -->
|
||||
<input type="hidden" name="rcvr_mail" value="" /> <!-- 수취인 E-mail -->
|
||||
<input type="hidden" name="rcvr_zipx" value="${data.shipping.dlvylcZip}" /> <!-- 수취인 우편번호 -->
|
||||
|
||||
<c:if test="${'01' == data.shipping.dlvylcAdresDvCd}">
|
||||
<input type="hidden" name="rcvr_add1" value="${data.shipping.dlvylcRnmAdres}" /> <!-- 수취인 주소 -->
|
||||
</c:if>
|
||||
<c:if test="${'02' == data.shipping.dlvylcAdresDvCd}">
|
||||
<input type="hidden" name="rcvr_add1" value="${data.shipping.dlvylcLnbAdres}" /> <!-- 수취인 주소 -->
|
||||
</c:if>
|
||||
<input type="hidden" name="rcvr_add2" value="${data.shipping.dlvylcAdresDtl}" /> <!-- 수취인 상세주소 -->
|
||||
|
||||
<input type="hidden" name="pay_mod" value="Y"/> <!-- 에스크로 결제처리 모드 : 에스크로: Y, 일반: N -->
|
||||
<input type="hidden" name="deli_term" value="03"/> <!-- 배송 소요일 : 예상 배송 소요일을 입력 (두자리수로 입력) -->
|
||||
<input type="hidden" name="bask_cntx" value="1"/> <!-- 장바구니 상품 종류수 -->
|
||||
<input type="hidden" name="good_info" value=""/> <!-- 장바구니 상품 상세 정보 -->
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<input type="hidden" name="pay_mod" value="N"/> <!-- 에스크로 결제처리 모드 : 에스크로: Y, 일반: N -->
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<!-- ========== 에스크로 필수정보 End =============================== -->
|
||||
|
||||
|
||||
<!-- 추가 파라미터 ( 가맹점에서 별도의 값전달시 param_opt 를 사용하여 값 전달 ) -->
|
||||
<input type="hidden" name="param_opt_1" id="sopmal_cd" value="${data.ordr.sopmalCd}"/>
|
||||
<input type="hidden" name="param_opt_2" id="sesion_id" value="${data.ordr.sesionId += '|' += data.ordr.mbrInnb += '|' += data.ordr.mbrId}" />
|
||||
<input type="hidden" name="param_opt_3" id="pg_cmpny_nm" value="${data.setle.pgCmpnyNm += '|' += data.setle.setleTyCd}" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
138
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstKcpPayR.jsp
Normal file
138
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstKcpPayR.jsp
Normal file
@@ -0,0 +1,138 @@
|
||||
<%@ 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">
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
create_goodInfo();
|
||||
jsf__pay(document.order_info);
|
||||
});
|
||||
|
||||
function create_goodInfo() {
|
||||
if(document.order_info.pay_mod.value=='Y') {
|
||||
var chr31 = String.fromCharCode(31); // ASCII 코드값 31
|
||||
var good_info = "seq=1" + chr31 + "ordr_numb=0001" + chr31 + "good_name=${data.setle.goodsNm}" + chr31 + "good_cntx=2" + chr31 + "good_amtx=${data.setle.setleAmt}";
|
||||
document.order_info.good_info.value = good_info;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<form name="setle_info" id="setle_info">
|
||||
<input type="hidden" name="sopmalCd" id="sopmalCd" value="${data.setle.sopmalCd}" />
|
||||
<input type="hidden" name="ordrInnb" id="ordrInnb" value="${data.setle.ordrInnb}" />
|
||||
<input type="hidden" name="pgCmpnyNm" id="pgCmpnyNm" value="${data.setle.pgCmpnyNm}" />
|
||||
<input type="hidden" name="setleTyCd" id="setleTyCd" value="${data.setle.setleTyCd}" />
|
||||
</form>
|
||||
|
||||
<form name="order_info" id="order_info" method="post" action="<c:url value="/sopmal/ordr/insertKcpSetle"/>">
|
||||
<!-- 가맹점 정보 설정-->
|
||||
<input type="hidden" name="site_cd" value="${data.setle.siteCdMid}" /> <!-- NHN KCP 발급 사이트코드 -->
|
||||
<input type="hidden" name="site_name" value="${data.ordr.sopmalNm}" /> <!-- 상점이름(영문으로 작성권장) -->
|
||||
<input type="hidden" name="currency" value="WON"/> <!-- 화폐단위 -->
|
||||
<c:if test="${'10' != data.setle.setleTyCd}">
|
||||
<input type="hidden" name="payco_direct" value="" />
|
||||
</c:if>
|
||||
<c:if test="${'10' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="payco_direct" value="Y" />
|
||||
<input type="hidden" name="pay_method" value="100000000000" /> <!-- 신용카드 -->
|
||||
</c:if>
|
||||
|
||||
<input type="hidden" name="ordr_idxx" value="${data.ordr.ordrInnb}"/> <!-- 상점 관리 주문번호 -->
|
||||
|
||||
<!-- 결제 수단 -->
|
||||
<c:if test="${'01' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="100000000000" /> <!-- 신용카드 -->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'03' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="010000000000" /> <!-- 계좌이체 -->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${'04' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="001000000000" /> <!-- 가상계좌 -->
|
||||
</c:if>
|
||||
|
||||
<!-- ========== 에스크로 정보 Start =============================== -->
|
||||
<!-- 에스크로 사용 여부 : 반드시 Y 로 설정 -->
|
||||
<input type="hidden" name="escw_used" value="Y"/>
|
||||
|
||||
<c:choose>
|
||||
<c:when test="${'05' == data.setle.setleTyCd}">
|
||||
<input type="hidden" name="pay_method" value="001000000000" /> <!-- 가상계좌(에스크로) 이지만 KCP 결제코드는 가상계좌 -->
|
||||
|
||||
<input type="hidden" name="rcvr_name" value="${data.shipping.recpntNm}" /> <!-- 수취인명 -->
|
||||
<input type="hidden" name="rcvr_tel1" value="${data.shipping.recpntTelnb}" /> <!-- 수취인 연락처1 -->
|
||||
<input type="hidden" name="rcvr_tel2" value="${data.shipping.recpntMbtlnb}" /> <!-- 수취인 휴대폰번호 -->
|
||||
<input type="hidden" name="rcvr_mail" value="" /> <!-- 수취인 E-mail -->
|
||||
<input type="hidden" name="rcvr_zipx" value="${data.shipping.dlvylcZip}" /> <!-- 수취인 우편번호 -->
|
||||
|
||||
<c:if test="${'01' == data.shipping.dlvylcAdresDvCd}">
|
||||
<input type="hidden" name="rcvr_add1" value="${data.shipping.dlvylcRnmAdres}" /> <!-- 수취인 주소 -->
|
||||
</c:if>
|
||||
<c:if test="${'02' == data.shipping.dlvylcAdresDvCd}">
|
||||
<input type="hidden" name="rcvr_add1" value="${data.shipping.dlvylcLnbAdres}" /> <!-- 수취인 주소 -->
|
||||
</c:if>
|
||||
<input type="hidden" name="rcvr_add2" value="${data.shipping.dlvylcAdresDtl}" /> <!-- 수취인 상세주소 -->
|
||||
|
||||
<input type="hidden" name="pay_mod" value="Y"/> <!-- 에스크로 결제처리 모드 : 에스크로: Y, 일반: N -->
|
||||
<input type="hidden" name="deli_term" value="03"/> <!-- 배송 소요일 : 예상 배송 소요일을 입력 (두자리수로 입력) -->
|
||||
<input type="hidden" name="bask_cntx" value="1"/> <!-- 장바구니 상품 종류수 -->
|
||||
<input type="hidden" name="good_info" value=""/> <!-- 장바구니 상품 상세 정보 -->
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<input type="hidden" name="pay_mod" value="N"/> <!-- 에스크로 결제처리 모드 : 에스크로: Y, 일반: N -->
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<!-- ========== 에스크로 필수정보 End =============================== -->
|
||||
|
||||
<input type="hidden" name="good_name" value="${data.setle.goodsNm}"/> <!-- 상품명 -->
|
||||
<input type="hidden" name="good_mny" value="${data.setle.setleAmt}"/> <!-- 결제 금액 -->
|
||||
<input type="hidden" name="buyr_name" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
|
||||
<input type="hidden" name="buyr_mail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 -->
|
||||
<input type="hidden" name="buyr_tel2" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 -->
|
||||
<input type="hidden" name="shop_user_id" value="${data.ordr.mbrId}"/> <!-- 쇼핑몰회원ID -->
|
||||
|
||||
<input type="hidden" name="sopmal_cd" value="${data.ordr.sopmalCd}"/>
|
||||
<input type="hidden" name="mbr_innb" value="${data.ordr.mbrInnb}" />
|
||||
<input type="hidden" name="mbr_id" value="${data.ordr.mbrId}" />
|
||||
<input type="hidden" name="sesion_id" value="${data.ordr.sesionId}" />
|
||||
<input type="hidden" name="pg_cmpny_nm" value="${data.setle.pgCmpnyNm}" />
|
||||
<input type="hidden" name="setle_ty_cd" value="${data.setle.setleTyCd}" />
|
||||
|
||||
<!-- 가상계좌 유효기간 -->
|
||||
<c:set var="expireTerm" value="${data.setle.dueDt - 1}" />
|
||||
<input type="hidden" name="vcnt_expire_term" value="${expireTerm}"/>
|
||||
|
||||
<!--
|
||||
※필수 항목
|
||||
결제인증 완료 후 결제창에서 값을 설정하는 부분으로 반드시 포함되어야 합니다.
|
||||
임의로 값을 설정하지 마십시오.
|
||||
-->
|
||||
<input type="hidden" name="res_cd" value=""/>
|
||||
<input type="hidden" name="res_msg" value=""/>
|
||||
<input type="hidden" name="enc_info" value=""/>
|
||||
<input type="hidden" name="enc_data" value=""/>
|
||||
<input type="hidden" name="tran_cd" value=""/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
46
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstPayR.jsp
Normal file
46
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstPayR.jsp
Normal file
@@ -0,0 +1,46 @@
|
||||
<%@ 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 : OrdrReqstPayR.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">
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#orderInfo').submit();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<form name="orderInfo" id="orderInfo" method="post" action="<c:url value="/sopmal/ordr/insertSetle"/>">
|
||||
<input type="hidden" name="sopmalCd" id="sopmalCd" value="${data.setle.sopmalCd}"/>
|
||||
<input type="hidden" name="ordrInnb" id="ordrInnb" value="${data.setle.ordrInnb}"/>
|
||||
<input type="hidden" name="pgCmpnyNm" id="pgCmpnyNm" value="${data.setle.pgCmpnyNm}"/>
|
||||
<input type="hidden" name="setleTyCd" id="setleTyCd" value="${data.setle.setleTyCd}"/>
|
||||
|
||||
<input type="hidden" name="goodsNm" id="goodsNm" value="${data.setle.goodsNm}"/> <!-- 상품명 -->
|
||||
<input type="hidden" name="setleAmt" id="setleAmt" value="${data.setle.setleAmt}"/> <!-- 결제 금액 -->
|
||||
<input type="hidden" name="ordrrNm" id="ordrrNm" value="${data.ordr.ordrrNm}"/> <!-- 주문자 이름 -->
|
||||
<input type="hidden" name="ordrrEmail" id="ordrrEmail" value="${data.ordr.ordrrEmail}"/> <!-- 주문자 이메일 -->
|
||||
<input type="hidden" name="ordrrMbtlnb" id="ordrrMbtlnb" value="${data.ordr.ordrrMbtlnb}"/> <!-- 주문자 휴대폰번호 -->
|
||||
<input type="hidden" name="mbrId" id="mbrId" value="${data.ordr.mbrId}"/> <!-- 쇼핑몰회원ID -->
|
||||
<input type="hidden" name="mbrInnb" id="mbrInnb" value="${data.ordr.mbrInnb}" />
|
||||
<input type="hidden" name="sesionId" id="sesionId" value="${data.ordr.sesionId}" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
163
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstTossPayR.jsp
Normal file
163
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrReqstTossPayR.jsp
Normal file
@@ -0,0 +1,163 @@
|
||||
<%@ 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 : OrdrReqstTossPayR.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">
|
||||
<script>
|
||||
let setleData = ['common', '카드', '계좌이체', '가상계좌'];
|
||||
|
||||
$(document).ready(function() {
|
||||
let paymentType = '';
|
||||
const orderForm = $('#order_info');
|
||||
const setleTyCd = orderForm.find('.setleTyCd').val();
|
||||
const sopmalCd = orderForm.find('.sopmalCd').val();
|
||||
const mbrInnb = orderForm.find('.mbrInnb').val();
|
||||
const mbrId = orderForm.find('.mbrId').val();
|
||||
const pgCmpnyNm = orderForm.find('.pgCmpnyNm').val();
|
||||
const ordrrNm = orderForm.find('.ordrrNm').val();
|
||||
|
||||
let param = '?sopmalCd=' + sopmalCd;
|
||||
param += '&mbrInnb=' + mbrInnb;
|
||||
param += '&mbrId=' + mbrId;
|
||||
param += '&pgCmpnyNm=' + pgCmpnyNm;
|
||||
param += '&setleTyCd=' + setleTyCd;
|
||||
param += '&ordrrNm=' + ordrrNm;
|
||||
|
||||
const encodedParam = encodeURIComponent(param);
|
||||
|
||||
const successUrl = window.location.origin + '<c:url value="/sopmal/ordr/insertTossSetle"/>' + encodedParam;
|
||||
const failUrl = window.location.origin + '<c:url value="/sopmal/ordr/selectOrdrFailr"/>' + encodedParam;
|
||||
//const callbackUrl = window.location.origin + '<c:url value=""/>';
|
||||
|
||||
//가상계좌 입금기한 설정
|
||||
let dueDate = orderForm.find('.dueDate').val();
|
||||
let date = new Date();
|
||||
date.setDate(date.getDate() + (dueDate - 1));
|
||||
let fDueDate = date.toISOString().split('T')[0]+ "T23:59:59+09:00"; // 날짜(YYYY-MM-DD) ISO 8601 형식
|
||||
|
||||
setleData['common'] = {
|
||||
'amount': '',
|
||||
'orderId': '',
|
||||
'orderName': '',
|
||||
'customerName': '',
|
||||
'customerEmail': null,
|
||||
'customerMobilePhone': null,
|
||||
'successUrl':successUrl,
|
||||
'failUrl':failUrl,
|
||||
'windowTarget': 'iframe',
|
||||
'taxFreeAmount': null,
|
||||
'cultureExpense': false
|
||||
};
|
||||
|
||||
if ('01' === setleTyCd) { // 신용카드
|
||||
paymentType = '카드';
|
||||
|
||||
setleData[paymentType] = {
|
||||
'cardCompany':null,
|
||||
'cardInstallmentPlan':null,
|
||||
'maxCardInstallmentPlan':null,
|
||||
'freeInstallmentPlans':null,
|
||||
'useCardPoint':false,
|
||||
'useAppCardOnly':false,
|
||||
'useInternationalCardOnly':false,
|
||||
'flowMode':'DEFAULT',
|
||||
'easyPay':null,
|
||||
'discountCode':null,
|
||||
'appScheme':null
|
||||
};
|
||||
} else if ('03' === setleTyCd) { // 실시간 계좌이체
|
||||
paymentType = '계좌이체';
|
||||
|
||||
setleData[paymentType] = {
|
||||
'cashReceipt':{
|
||||
'type':'소득공제'
|
||||
},
|
||||
'useEscrow':false
|
||||
};
|
||||
} else if ('04' === setleTyCd) { // 가상계좌
|
||||
paymentType = '가상계좌';
|
||||
|
||||
setleData[paymentType] = {
|
||||
'dueDate':fDueDate,
|
||||
'cashReceipt':{
|
||||
'type':'미발행'
|
||||
},
|
||||
'useEscrow':false,
|
||||
'currency':'KRW'//,'callbackUrl':callbackUrl
|
||||
};
|
||||
} else if ('05' === setleTyCd) { // 가상계좌(에스크로)
|
||||
paymentType = '가상계좌';
|
||||
|
||||
setleData[paymentType] = {
|
||||
'dueDate':fDueDate,
|
||||
'cashReceipt':{
|
||||
'type':'미발행'
|
||||
},
|
||||
'useEscrow':true,
|
||||
'currency':'KRW'//,'callbackUrl':callbackUrl
|
||||
};
|
||||
} else if ('10' === setleTyCd) { // 페이코
|
||||
paymentType = '카드';
|
||||
|
||||
setleData[paymentType] = {
|
||||
flowMode: "DIRECT",
|
||||
easyPay: "페이코",
|
||||
};
|
||||
}
|
||||
|
||||
pay(paymentType, initPaymentsData('common', paymentType), pgCmpnyNm);
|
||||
});
|
||||
|
||||
/* ============= [공통] + [결제수단] JSON DATA 합치기 ================= */
|
||||
function initPaymentsData(general, paymentType){
|
||||
const orderForm = $('#order_info');
|
||||
const setleAmt = orderForm.find('.setleAmt').val();
|
||||
const ordrInnb = orderForm.find('.ordrInnb').val();
|
||||
const goodsNm = orderForm.find('.goodsNm').val();
|
||||
const ordrrNm = orderForm.find('.ordrrNm').val();
|
||||
|
||||
setleData[general].amount = setleAmt;
|
||||
setleData[general].orderId = ordrInnb;
|
||||
setleData[general].orderName = goodsNm;
|
||||
setleData[general].customerName = ordrrNm;
|
||||
|
||||
return Object.assign(setleData[general], setleData[paymentType]);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<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="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" id="sesionId" class="sesionId" value="${data.ordr.sesionId}" />
|
||||
<input type="hidden" name="dueDate" class="dueDate" value="${data.setle.dueDt}" /> <!-- 가상계좌 입금기한 -->
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,102 @@
|
||||
<%@ 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">
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
const orderForm = $('#order_info');
|
||||
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();
|
||||
const mbrId = orderForm.find('.mbrId').val();
|
||||
const sesionId = orderForm.find('.sesionId').val();
|
||||
const pgCmpnyNm = orderForm.find('.pgCmpnyNm').val();
|
||||
|
||||
let easyPayNm = '토스페이';
|
||||
if(pgCmpnyNm === 'naverpay') easyPayNm = '네이버페이';
|
||||
else if(pgCmpnyNm === 'kakaopay') easyPayNm = '카카오페이';
|
||||
|
||||
let param = '?sopmalCd=' + sopmalCd;
|
||||
param += '&mbrInnb=' + mbrInnb;
|
||||
param += '&mbrId=' + mbrId;
|
||||
param += '&sesionId=' + sesionId;
|
||||
param += '&pgCmpnyNm=' + pgCmpnyNm;
|
||||
param += '&setleTyCd=' + setleTyCd;
|
||||
param += '&ordrrNm=' + ordrrNm;
|
||||
|
||||
const encodedParam = encodeURIComponent(param);
|
||||
|
||||
const successUrl = window.location.origin + '<c:url value="/sopmal/ordr/insertTosspaySetle"/>' + encodedParam;
|
||||
const failUrl = window.location.origin + '<c:url value="/sopmal/ordr/selectOrdrFailr"/>'+ encodedParam;
|
||||
|
||||
const request = {
|
||||
card:{
|
||||
amount:setleAmt,
|
||||
orderId:ordrInnb,
|
||||
orderName:goodsNm,
|
||||
successUrl:successUrl,
|
||||
failUrl:failUrl,
|
||||
cardCompany:null,
|
||||
cardInstallmentPlan:null,
|
||||
maxCardInstallmentPlan:null,
|
||||
useCardPoint:false,
|
||||
customerName:ordrrNm,
|
||||
customerEmail:ordrrEmail,
|
||||
customerMobilePhone:ordrrMbtlnb,
|
||||
taxFreeAmount:null,
|
||||
useInternationalCardOnly:false,
|
||||
flowMode:"DIRECT",
|
||||
discountCode:null,
|
||||
appScheme:null,
|
||||
easyPay:easyPayNm
|
||||
}
|
||||
};
|
||||
|
||||
pay('카드', request.card, pgCmpnyNm);
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<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="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>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,77 @@
|
||||
<%@ 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">
|
||||
<header>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#modal-error-content').html('결제가 취소 되었습니다.');
|
||||
|
||||
MicroModal.show('modal-error');
|
||||
|
||||
// 모달이 닫힐 때 포커스를 설정하고 스크롤 재활성화
|
||||
$('#modal-error-confirm').off('click').on('click', function () {
|
||||
MicroModal.close('modal-error');
|
||||
|
||||
fn_go_purchs_form();
|
||||
});
|
||||
});
|
||||
|
||||
const fn_go_purchs_form = function() {
|
||||
const form = $('<form></form>');
|
||||
|
||||
$(form).append($('<input/>', {type:'hidden', name:'sopmalCd', value:$('#sopmalCd').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:'cartDvCd', value:'01'}));
|
||||
|
||||
$('.cartInnb').each(function(){
|
||||
$(form).append($('<input/>', {type:'hidden', name:'cartInnbs', value:$(this).val()}));
|
||||
});
|
||||
|
||||
$(form).attr('method', 'post');
|
||||
$(form).attr('action', !fn_is_empty($('#mbrId').val()) ? '<c:url value="/sopmal/ordr/selectMbrPurchsForm"/>' : '<c:url value="/sopmal/ordr/selectNmbrPurchsForm"/>' );
|
||||
history.replaceState(null, '', '/sopmal/ordr/selectMbrPurchsForm');
|
||||
|
||||
$(form).appendTo('body');
|
||||
$(form).submit();
|
||||
}
|
||||
</script>
|
||||
</header>
|
||||
<body>
|
||||
|
||||
<form name="successForm" id="successForm">
|
||||
<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}"/>
|
||||
<c:forEach var="goods" items="${data.goodsList}">
|
||||
<input type="hidden" class="cartInnb" value="<c:out value="${goods.cartInnb}"/>"/>
|
||||
<input type="hidden" class="cartInnb" value="<c:out value="${goods.cartInnb}"/>"/>
|
||||
</c:forEach>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,78 @@
|
||||
<%@ 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).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}"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
80
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrRspnsPayR.jsp
Normal file
80
src/main/webapp/WEB-INF/views/sopmal/ordr/OrdrRspnsPayR.jsp
Normal 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:'ordrTyCd', value:$('#ordrTyCd').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="ordrTyCd" id="ordrTyCd" value="${ordrTyCd}"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,75 @@
|
||||
<%@ 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:'message', value:$('#message').val()}));
|
||||
|
||||
$(form).attr('method', 'post');
|
||||
$(form).attr('action', '<c:url value="/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}"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
113
src/main/webapp/WEB-INF/views/sopmal/ordr/PayCheckOutC.jsp
Normal file
113
src/main/webapp/WEB-INF/views/sopmal/ordr/PayCheckOutC.jsp
Normal file
@@ -0,0 +1,113 @@
|
||||
<%@ 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 : PayCheckOutC.jsp
|
||||
Description : 결제창
|
||||
Modification Information
|
||||
|
||||
https://docs.tosspayments.com/guides/get-started
|
||||
https://docs.tosspayments.com/guides/payment-widget/integration
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 결제 샘플</title>
|
||||
<!-- 결제위젯 SDK 추가 -->
|
||||
<script src="https://js.tosspayments.com/v1/payment-widget"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 주문서 영역 -->
|
||||
<div class="wrapper">
|
||||
<div class="box_section" style="padding: 40px 30px 50px 30px; margin-top: 30px; margin-bottom: 50px">
|
||||
<!-- 결제 UI -->
|
||||
<div id="payment-method"></div>
|
||||
<!-- 이용약관 UI -->
|
||||
<div id="agreement"></div>
|
||||
<!-- 쿠폰 체크박스 -->
|
||||
<div class="checkable typography--p" style="padding-left: 25px">
|
||||
<label for="coupon-box" class="checkable__label typography--regular">
|
||||
<input id="coupon-box" class="checkable__input" type="checkbox" aria-checked="true" disabled />
|
||||
<span class="checkable__label-text">5,000원 쿠폰 적용</span>
|
||||
</label>
|
||||
</div>
|
||||
<!-- 결제하기 버튼 -->
|
||||
<button class="button" id="payment-button" style="margin-top: 30px" disabled>결제하기</button>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
const button = document.getElementById("payment-button");
|
||||
const coupon = document.getElementById("coupon-box");
|
||||
const generateRandomString = () => window.btoa(Math.random()).slice(0, 20);
|
||||
var amount = 50000;
|
||||
// ------ 결제위젯 초기화 ------
|
||||
// TODO: clientKey는 개발자센터의 결제위젯 연동 키 > 클라이언트 키로 바꾸세요.
|
||||
// TODO: 구매자의 고유 아이디를 불러와서 customerKey로 설정하세요. 이메일・전화번호와 같이 유추가 가능한 값은 안전하지 않습니다.
|
||||
// @docs https://docs.tosspayments.com/reference/widget-sdk#sdk-설치-및-초기화
|
||||
const clientKey = "test_gck_docs_Ovk5rk1EwkEbP0W43n07xlzm"; //개발가이드키
|
||||
//const clientKey = "test_ck_0RnYX2w5322yZWP2kbBR3NeyqApQ"; //drumj2 키
|
||||
|
||||
const customerKey = generateRandomString();
|
||||
const paymentWidget = PaymentWidget(clientKey, customerKey); // 회원 결제
|
||||
// const paymentWidget = PaymentWidget(clientKey, PaymentWidget.ANONYMOUS); // 비회원 결제
|
||||
|
||||
// ------ 결제 UI 렌더링 ------
|
||||
// @docs https://docs.tosspayments.com/reference/widget-sdk#renderpaymentmethods선택자-결제-금액-옵션
|
||||
paymentMethodWidget = paymentWidget.renderPaymentMethods(
|
||||
"#payment-method", //위젯출력위치
|
||||
{ value: amount },
|
||||
// 렌더링하고 싶은 결제 UI의 variantKey
|
||||
// 결제 수단 및 스타일이 다른 멀티 UI를 직접 만들고 싶다면 계약이 필요해요.
|
||||
// @docs https://docs.tosspayments.com/guides/payment-widget/admin#멀티-결제-ui
|
||||
{ variantKey: "DEFAULT" }
|
||||
);
|
||||
// ------ 이용약관 UI 렌더링 ------
|
||||
// @docs https://docs.tosspayments.com/reference/widget-sdk#renderagreement선택자-옵션
|
||||
paymentWidget.renderAgreement("#agreement", { variantKey: "AGREEMENT" });
|
||||
|
||||
// ------ 결제 UI 렌더링 완료 이벤트 ------
|
||||
paymentMethodWidget.on("ready", function () {
|
||||
button.disabled = false;
|
||||
coupon.disabled = false;
|
||||
});
|
||||
|
||||
// ------ 결제 금액 업데이트 ------
|
||||
// @docs https://docs.tosspayments.com/reference/widget-sdk#updateamount결제-금액
|
||||
coupon.addEventListener("change", function () {
|
||||
if (coupon.checked) {
|
||||
paymentMethodWidget.updateAmount(amount - 5000);
|
||||
} else {
|
||||
paymentMethodWidget.updateAmount(amount);
|
||||
}
|
||||
});
|
||||
|
||||
// ------ '결제하기' 버튼 누르면 결제창 띄우기 ------
|
||||
// @docs https://docs.tosspayments.com/reference/widget-sdk#requestpayment결제-정보
|
||||
button.addEventListener("click", function () {
|
||||
// 결제를 요청하기 전에 orderId, amount를 서버에 저장하세요.
|
||||
// 결제 과정에서 악의적으로 결제 금액이 바뀌는 것을 확인하는 용도입니다.
|
||||
paymentWidget.requestPayment({
|
||||
orderId: generateRandomString(),
|
||||
orderName: "토스 티셔츠 외 2건",
|
||||
successUrl: window.location.origin + "/sopmal/pay/PaySuccess",
|
||||
failUrl: window.location.origin + "/sopmal/pay/PayFail",
|
||||
customerEmail: "customer123@gmail.com",
|
||||
customerName: "김토스",
|
||||
customerMobilePhone: "01012341234",
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
57
src/main/webapp/WEB-INF/views/sopmal/ordr/PayFailR.jsp
Normal file
57
src/main/webapp/WEB-INF/views/sopmal/ordr/PayFailR.jsp
Normal file
@@ -0,0 +1,57 @@
|
||||
<%@ 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 : PayFailRC.jsp
|
||||
Description : 토스 위젯결제 실패화면
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 결제 샘플</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="info" class="box_section" style="width: 600px">
|
||||
<img width="100px" src="https://static.toss.im/lotties/error-spot-no-loop-space-apng.png" />
|
||||
<h2>결제를 실패했어요</h2>
|
||||
|
||||
<div class="p-grid typography--p" style="margin-top: 50px">
|
||||
<div class="p-grid-col text--left"><b>에러메시지</b></div>
|
||||
<div class="p-grid-col text--right" id="message"></div>
|
||||
</div>
|
||||
<div class="p-grid typography--p" style="margin-top: 10px">
|
||||
<div class="p-grid-col text--left"><b>에러코드</b></div>
|
||||
<div class="p-grid-col text--right" id="code"></div>
|
||||
</div>
|
||||
<div class="p-grid">
|
||||
<button class="button p-grid-col5" onclick="location.href='https://docs.tosspayments.com/guides/payment/integration';">연동 문서</button>
|
||||
<button class="button p-grid-col5" onclick="location.href='https://discord.gg/A4fRFXQhRu';" style="background-color: #e8f3ff; color: #1b64da">실시간 문의</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
const codeElement = document.getElementById("code");
|
||||
const messageElement = document.getElementById("message");
|
||||
|
||||
codeElement.textContent = urlParams.get("code");
|
||||
messageElement.textContent = urlParams.get("message");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
182
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpCashModC.jsp
Normal file
182
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpCashModC.jsp
Normal file
@@ -0,0 +1,182 @@
|
||||
<%@ 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 : PayKcpCashModC.jsp
|
||||
Description : kcp현금영수증발급 취소
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>현금영수증 취소 샘플페이지</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="-1">
|
||||
<link href="../static/css/style.css" rel="stylesheet" type="text/css" id="cssLink"/>
|
||||
|
||||
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
|
||||
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************
|
||||
* 현금영수증 발급 취소
|
||||
****************************************************************/
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#content').hide();
|
||||
|
||||
$('#cancel-button').on('click', function(event) {
|
||||
const url = '<c:url value="/sopmal/pay/CashReceiptCancel"/>';
|
||||
event.preventDefault(); // 기본 폼 제출 동작 취소
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data:$('#cancelForm').serialize(),
|
||||
success : function(data) {
|
||||
if (data.resBody != null) {
|
||||
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
|
||||
$('#rstTitle').text("현금영수증 발급취소");
|
||||
$('#app_time').text(result.response.app_time);
|
||||
$('#reg_stat').text(result.response.reg_stat);
|
||||
$('#res_msg').text(result.response.res_msg);
|
||||
$('#receipt_no').text(result.response.receipt_no);
|
||||
$('#reg_desc').text(result.response.reg_desc);
|
||||
$('#cash_no').text(result.response.cash_no);
|
||||
$('#res_cd').text(result.response.res_cd);
|
||||
|
||||
$('#content').show();
|
||||
}
|
||||
console.log('response.receiptKey:', result.response.cash_no);
|
||||
},
|
||||
error: function(error) {
|
||||
console.error('Error fetching data:', error);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<form name="cancelForm" id="cancelForm">
|
||||
<input type="hidden" name="shopMallCd" value="NC"/>
|
||||
|
||||
<!-- header -->
|
||||
<div class="header">
|
||||
<a href="../index.html" class="btn-back"><span>뒤로가기</span></a>
|
||||
<h1 class="title">현금영수증 취소 SAMPLE</h1>
|
||||
</div>
|
||||
<!-- //header -->
|
||||
|
||||
<!-- 상단 테이블 Start -->
|
||||
<div class="sample">
|
||||
<!-- 상단 테이블 End -->
|
||||
|
||||
<!-- 현금용수증 정보 출력 테이블 Start -->
|
||||
|
||||
|
||||
<h2 class="title-type-3">현금영수증 취소 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left"><p class="title">요청 정보</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<select name='modType' class="frmselect" style="width:100%;height:35px;">
|
||||
<option value='STSC' selected>전체취소</option>
|
||||
<option value='STPC'>부분취소</option>
|
||||
</select>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">현금영수증 거래번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="modValue" value="" maxlength="14" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="title-type-3">현금영수증 부분 취소 시 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left"><p class="title">부분취소 요청 금액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="modMny" value="" maxlength="40" placeholder="부분취소시 필수" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">부분취소 가능 금액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="remMny" value="" maxlength="40" placeholder="부분취소시 필수" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- 결제 버튼 테이블 Start -->
|
||||
<div Class="Line-Type-1"></div>
|
||||
<ul class="list-btn-2">
|
||||
<li><input name="cancel-button" id="cancel-button" type="button" value="취소요청" class="btn-type-2 pc-wd-3"/></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //contents -->
|
||||
|
||||
<div class="grid-footer">
|
||||
<div class="inner">
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- 요청종류 취소 요청시 사용 -->
|
||||
<input type="hidden" name="req_tx" value="mod"/>
|
||||
</form>
|
||||
|
||||
<br/><br/>===========================<br/><br/>
|
||||
<div id="content">
|
||||
<br/><span id="rstTitle"></span> 결과출력 <br/>
|
||||
<p>app_time: <span id="app_time"></span></p>
|
||||
<p>reg_stat: <span id="reg_stat"></span></p>
|
||||
<p>res_msg: <span id="res_msg"></span></p>
|
||||
<p>receipt_no: <span id="receipt_no"></span></p>
|
||||
<p>reg_desc: <span id="reg_desc"></span></p>
|
||||
<p>cash_no: <span id="cash_no"></span></p>
|
||||
<p>res_cd: <span id="res_cd"></span></p>
|
||||
</div>
|
||||
|
||||
<!-- {"app_time":"20240613143827","reg_stat":"NTRW","res_msg":"정상처리","receipt_no":"591634533","reg_desc":"KCP등록완료","cash_no":"24415127242686","res_cd":"0000"} -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
415
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpCashRegC.jsp
Normal file
415
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpCashRegC.jsp
Normal file
@@ -0,0 +1,415 @@
|
||||
<%@ 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 : PayKcpCashRegC.jsp
|
||||
Description : kcp현금영수증발급
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>현금영수증 발급 샘플페이지</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="-1">
|
||||
<link href="../static/css/style.css" rel="stylesheet" type="text/css" id="cssLink"/>
|
||||
|
||||
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
|
||||
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
/**************************************************************
|
||||
* 현금영수증 발급
|
||||
****************************************************************/
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#content').hide();
|
||||
|
||||
$('#payment-button').on('click', function(event) {
|
||||
const url = '<c:url value="/sopmal/pay/CashReceipt"/>';
|
||||
event.preventDefault(); // 기본 폼 제출 동작 취소
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data:$('#registForm').serialize(),
|
||||
success : function(data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
|
||||
$('#rstTitle').text("현금영수증 발급");
|
||||
$('#app_time').text(result.response.app_time);
|
||||
$('#reg_stat').text(result.response.reg_stat);
|
||||
$('#self_force_yn').text(result.response.self_force_yn);
|
||||
$('#res_msg').text(result.response.res_msg);
|
||||
$('#receipt_no').text(result.response.receipt_no);
|
||||
$('#reg_desc').text(result.response.reg_desc);
|
||||
$('#cash_no').text(result.response.cash_no);
|
||||
$('#res_cd').text(result.response.res_cd);
|
||||
|
||||
$('#content').show();
|
||||
}
|
||||
console.log('response.receiptKey:', result.response.receiptKey);
|
||||
},
|
||||
error: function(error) {
|
||||
console.error('Error fetching data:', error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
// 주문번호 생성 예제
|
||||
function init_orderid()
|
||||
{
|
||||
var today = new Date();
|
||||
var year = today.getFullYear();
|
||||
var month = today.getMonth()+ 1;
|
||||
var date = today.getDate();
|
||||
var time = today.getTime();
|
||||
|
||||
let hours = today.getHours();
|
||||
let minutes = today.getMinutes();
|
||||
let seconds = today.getSeconds();
|
||||
|
||||
if(parseInt(month) < 10) { month = "0" + month; }
|
||||
if(parseInt(date) < 10) { date = "0" + date; }
|
||||
|
||||
hours = hours < 10 ? '0' + hours : hours;
|
||||
minutes = minutes < 10 ? '0' + minutes : minutes;
|
||||
seconds = seconds < 10 ? '0' + seconds : seconds;
|
||||
|
||||
//var vOrderID = "TEST" + year + "" + month + "" + date + "" + time;
|
||||
var vOrderID = "TEST" + year + "" + month + "" + date + "" + hours + "" + minutes + "" + seconds;
|
||||
|
||||
document.forms[0].orderId.value = vOrderID;
|
||||
}
|
||||
|
||||
//발행 용도에 따른 신분확인 ID 입력값 변경 예제
|
||||
function jsf__chk_tr_code( form )
|
||||
{
|
||||
var span_tr_code_0 = document.getElementById( "span_tr_code_0" );
|
||||
var span_tr_code_1 = document.getElementById( "span_tr_code_1" );
|
||||
|
||||
if ( form.tr_code[0].checked )
|
||||
{
|
||||
span_tr_code_0.style.display = "block";
|
||||
span_tr_code_1.style.display = "none";
|
||||
}
|
||||
else if (form.tr_code[1].checked )
|
||||
{
|
||||
span_tr_code_0.style.display = "none";
|
||||
span_tr_code_1.style.display = "block";
|
||||
}
|
||||
}
|
||||
|
||||
// 입점용 판매 화면 로직
|
||||
function typeChk( form )
|
||||
{
|
||||
if (form.corp_type[0].checked )
|
||||
{
|
||||
cash_type.style.display = "none";
|
||||
|
||||
}
|
||||
else if (form.corp_type[1].checked)
|
||||
{
|
||||
cash_type.style.display = "block";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="init_orderid();">
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<form name="registForm" id="registForm">
|
||||
<input type="hidden" name="shopMallCd" value="NC"/>
|
||||
<!-- header -->
|
||||
<div class="header">
|
||||
<h1 class="title">현금영수증 발급 SAMPLE</h1>
|
||||
</div>
|
||||
<!-- //header -->
|
||||
<!-- 타이틀 Start -->
|
||||
<div id="skipCont" class="contents">
|
||||
<p class="txt-type-1">이 페이지는 현금영수증 발급 요청하는 샘플(예시) 페이지입니다.</p>
|
||||
<p class="txt-type-2">소스 수정 시 [※ 필수] 또는 [※ 옵션] 표시가 포함된 문장은 가맹점의 상황에 맞게 적절히 수정 적용하시기 바랍니다.</p>
|
||||
<!-- 타이틀 End -->
|
||||
|
||||
<!-- 상단 테이블 Start -->
|
||||
<div class="sample">
|
||||
<!-- 상단 테이블 End -->
|
||||
|
||||
<h2 class="title-type-3">현금영수증 등록 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left"><p class="title">주문번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="orderId" value="" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">상품명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="orderName" value="핸드폰" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자 이름</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="buyrName" value="홍길동" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자 E-Mail</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="buyrMail" value="test@kcp.co.kr" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- 현금영수증 정보 출력 테이블 End -->
|
||||
|
||||
<!-- 현금영수증 발급 정보 테이블 Start -->
|
||||
<h2 class="title-type-3">현금영수증 발급 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">사업장 구분</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="radio" id="radio-2-1" class="ipt-radio-1" name="corpType" value="0" onchange="javascript:typeChk(this.form);" checked/>
|
||||
<label for="radio-2-1"><span class="ico-radio"><span></span></span>직접 판매</label>
|
||||
|
||||
<input type="radio" id="radio-2-2" class="ipt-radio-1" name="corpType" value="1" onchange="javascript:typeChk(this.form);"/>
|
||||
<label for="radio-2-2"><span class="ico-radio"><span></span></span>입점용 판매</label>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">원 거래 시각</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="tradTime" value="" maxlength="40" placeholder="YYYYMMDDHHMMSS"/>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">발행 용도</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="radio" id="radio-2-5" class="ipt-radio-1" name="trCode" value="0" onClick="jsf__chk_tr_code( this.form )" checked/>
|
||||
<label for="radio-2-5"><span class="ico-radio"><span></span></span>소득공제용</label>
|
||||
|
||||
<input type="radio" id="radio-2-6" class="ipt-radio-1" name="trCode" value="1" onClick="jsf__chk_tr_code( this.form )"/>
|
||||
<label for="radio-2-6"><span class="ico-radio"><span></span></span>지출증빙용</label>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">
|
||||
<span id="span_tr_code_0" style="display:block;">휴대폰번호/현금영수증 카드</span>
|
||||
<span id="span_tr_code_1" style="display:none;">사업자번호</span>
|
||||
</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="idInfo" value="" maxlength="20" placeholder="입력 시 '-' 제외" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">거래금액 총합</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="amtTot" value="" maxlength="40" placeholder="총 거래금액" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">공급가액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="amtSup" value="" maxlength="40" placeholder="거래 총금액 / 1.1" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">부가가치세</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="amtTax" value="" maxlength="40" placeholder="공급가액의 10%"/>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul><!--
|
||||
<span id="cash_type" style="display:none">
|
||||
<h2 class="title-type-3">입점몰 현금영수증 발행 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">과세/면세 구분</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_tax_type" value="" maxlength="40" placeholder="TG01(과세) / TG02(면세)" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">발행 사업자 번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_tax_no" value="" maxlength="40" placeholder="1234567890"/>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 사업자 번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_sell_tax_no" value="" maxlength="40" placeholder="1234567890"/>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 상호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_nm" value="NHN KCP" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 대표자명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_owner_nm" value="홍길동" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 사업장 주소</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_addr" value="서울시 구로구 구로동" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 사업장 연락처</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_telno" value="02-0000-0000" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<div class="left"><p class="title">입점몰 사업장 사이트 주소</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="corp_site_url" value="" maxlength="40" placeholder="www.kcp.co.kr" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</span> -->
|
||||
<!-- 가맹점 정보 출력 테이블 End -->
|
||||
|
||||
<!-- 결제 버튼 테이블 Start -->
|
||||
<div Class="Line-Type-1"></div>
|
||||
<ul class="list-btn-2">
|
||||
<li><input name="payment-button" id="payment-button" type="button" value="발급요청" class="btn-type-2 pc-wd-3"/></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //contents -->
|
||||
<div class="grid-footer">
|
||||
<div class="inner">
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 요청종류 등록 요청시 사용 -->
|
||||
<input type="hidden" name="req_tx" value="reg"/>
|
||||
</form>
|
||||
|
||||
|
||||
<br/><br/>===========================<br/><br/>
|
||||
<div id="content">
|
||||
<br/><span id="rstTitle"></span> 결과출력 <br/>
|
||||
<p>app_time: <span id="app_time"></span></p>
|
||||
<p>reg_stat: <span id="reg_stat"></span></p>
|
||||
<p>self_force_yn: <span id="self_force_yn"></span></p>
|
||||
<p>res_msg: <span id="res_msg"></span></p>
|
||||
<p>receipt_no: <span id="receipt_no"></span></p>
|
||||
<p>reg_desc: <span id="reg_desc"></span></p>
|
||||
<p>cash_no: <span id="cash_no"></span></p>
|
||||
<p>res_cd: <span id="res_cd"></span></p>
|
||||
</div>
|
||||
|
||||
<!-- {"app_time":"20240613143756","reg_stat":"NTRW","self_force_yn":"N","res_msg":"정상처리","receipt_no":"591634528","reg_desc":"KCP등록완료","cash_no":"24415127242686","res_cd":"0000"} -->
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
385
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpEscrow.jsp
Normal file
385
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpEscrow.jsp
Normal file
@@ -0,0 +1,385 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ page import="org.json.simple.JSONObject" %>
|
||||
<%@ page import="org.json.simple.parser.JSONParser" %>
|
||||
<%@ page import="org.json.simple.parser.ParseException" %>
|
||||
<%@ page import="java.io.*" %>
|
||||
<%@ page import="java.util.*" %>
|
||||
<%@ page import="java.net.HttpURLConnection" %>
|
||||
<%@ page import="java.net.URL" %>
|
||||
<%@ page import="java.security.PrivateKey" %>
|
||||
<%@ page import="java.nio.charset.StandardCharsets" %>
|
||||
<%@ page import="java.security.Signature" %>
|
||||
<%@ page import="java.security.SignatureException" %>
|
||||
<%@ page import="java.security.NoSuchAlgorithmException" %>
|
||||
<%@ page import="java.security.InvalidKeyException" %>
|
||||
<%@ page import="java.nio.file.Files" %>
|
||||
<%@ page import="java.nio.file.Path" %>
|
||||
<%@ page import="java.nio.file.Paths" %>
|
||||
<%@ page import="java.util.stream.Collectors" %>
|
||||
<%@ page import="org.bouncycastle.asn1.ASN1Sequence" %>
|
||||
<%@ page import="org.bouncycastle.asn1.pkcs.PrivateKeyInfo" %>
|
||||
<%@ page import="org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo" %>
|
||||
<%@ page import="org.bouncycastle.pkcs.PKCSException" %>
|
||||
<%@ page import="org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter" %>
|
||||
<%@ page import="org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder" %>
|
||||
<%@ page import="org.bouncycastle.operator.InputDecryptorProvider" %>
|
||||
<%@ page import="org.bouncycastle.operator.OperatorCreationException" %>
|
||||
<%!
|
||||
/*
|
||||
==========================================================================
|
||||
null 값을 처리하는 메소드
|
||||
--------------------------------------------------------------------------
|
||||
*/
|
||||
public String f_get_parm( String val )
|
||||
{
|
||||
if ( val == null ) val = "";
|
||||
return val;
|
||||
}
|
||||
|
||||
/*
|
||||
==========================================================================
|
||||
서명데이터 생성 관련 메소드 (결제 취소시 필요)
|
||||
--------------------------------------------------------------------------
|
||||
*/
|
||||
// 개인키 파일을 읽어 PrivateKey 객체 리턴
|
||||
public static PrivateKey loadSplMctPrivateKeyPKCS8()
|
||||
{
|
||||
PrivateKey priKey = null;
|
||||
|
||||
// 개인키 인증서 경로 및 비밀번호(테스트용)
|
||||
String filePath = "C:/gconedev/workspace/gconebo/src/main/resources/KCP_AUTH_A8HW6_CERT/splPrikeyPKCS8.pem";
|
||||
String privateKeyPassword = "changeit";
|
||||
|
||||
try
|
||||
{
|
||||
Path path = Paths.get( filePath );
|
||||
|
||||
/*********************************
|
||||
* PKCS#8 foramt 에서 header & footer 제거
|
||||
*********************************/
|
||||
String strPriKeyData = Files.readAllLines( path )
|
||||
.stream()
|
||||
.filter( line -> !line.startsWith( "-----BEGIN" ) && !line.startsWith( "-----END" ) )
|
||||
.collect( Collectors.joining() );
|
||||
|
||||
// Base64 decoding
|
||||
byte[] btArrPriKey = Base64.getDecoder().decode( strPriKeyData );
|
||||
|
||||
/*********************************
|
||||
* PEMParser 적용 항목 선언
|
||||
*********************************/
|
||||
ASN1Sequence derSeq = ASN1Sequence.getInstance( btArrPriKey );
|
||||
PKCS8EncryptedPrivateKeyInfo encPkcs8PriKeyInfo = new PKCS8EncryptedPrivateKeyInfo( org.bouncycastle.asn1.pkcs.EncryptedPrivateKeyInfo.getInstance( derSeq ) );
|
||||
|
||||
/*********************************
|
||||
* 복호화 & Key 변환
|
||||
*********************************/
|
||||
JcaPEMKeyConverter pemKeyConverter = new JcaPEMKeyConverter();
|
||||
InputDecryptorProvider decProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder().build( privateKeyPassword.toCharArray() );
|
||||
|
||||
PrivateKeyInfo priKeyInfo = encPkcs8PriKeyInfo.decryptPrivateKeyInfo( decProvider );
|
||||
priKey = pemKeyConverter.getPrivateKey( priKeyInfo );
|
||||
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
catch (OperatorCreationException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
catch (PKCSException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return priKey;
|
||||
}
|
||||
|
||||
//Signature 데이터 생성
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
%>
|
||||
|
||||
<%
|
||||
|
||||
request.setCharacterEncoding("UTF-8");
|
||||
/*
|
||||
==========================================================================
|
||||
결제 API URL
|
||||
--------------------------------------------------------------------------
|
||||
*/
|
||||
String target_URL = "https://stg-spl.kcp.co.kr/gw/mod/v1/cancel"; // 개발서버
|
||||
//String target_URL = "https://spl.kcp.co.kr/gw/mod/v1/cancel"; // 운영서버
|
||||
/*
|
||||
==========================================================================
|
||||
요청정보
|
||||
--------------------------------------------------------------------------
|
||||
*/
|
||||
String site_cd = "T0007";//f_get_parm( request.getParameter( "site_cd" )); // 사이트코드
|
||||
//인증서정보(직렬화)
|
||||
String kcp_cert_info = "-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or/L3C2vYtU/6lWLjBT1xwXVLvNN/7XpQokuWq0rnjSRThcXrDpWMbqYYUt/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA/IUP1Vk4K/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5/Yw+NymDy+c4NaKsbxepw+HtSOnma/R7TErQ/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----";
|
||||
String tno = "24876447935038";//f_get_parm( request.getParameter( "tno" )); // NHN KCP 거래번호
|
||||
String mod_ip = "127.0.0.1"; //f_get_parm( request.getParameter( "mod_ip" )); // 취소요청 IP
|
||||
String mod_desc = f_get_parm( request.getParameter( "mod_desc" )); // 취소사유
|
||||
String vcnt_yn = f_get_parm( request.getParameter( "vcnt_yn" )); // 배송업체명
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
String mod_type = "STE1"; //f_get_parm( request.getParameter( "mod_type" )); // 에스크로 상태변경 타입
|
||||
String mod_type_check = f_get_parm( request.getParameter( "mod_type_check" )); // 에스크로 상태변경 타입 체크
|
||||
String deli_numb = "789456123";//f_get_parm( request.getParameter( "deli_numb" )); // 송장번호
|
||||
String deli_corp = "대한통운";//f_get_parm( request.getParameter( "deli_corp" )); // 배송업체명
|
||||
String mod_mny = f_get_parm( request.getParameter( "mod_mny" )); // 부분취소 요청 금액
|
||||
String rem_mny = f_get_parm( request.getParameter( "rem_mny" )); // 부분취소 가능 금액
|
||||
|
||||
String refund_account = f_get_parm( request.getParameter( "refund_account" )); // 환불계좌번호
|
||||
String refund_nm = f_get_parm( request.getParameter( "refund_nm" )); // 환불계좌 예금주명
|
||||
String bank_code = f_get_parm( request.getParameter( "bank_code" )); // 환불계좌 은행코드
|
||||
|
||||
String a_refund_account = f_get_parm( request.getParameter( "a_refund_account" )); // 환불계좌번호
|
||||
String a_refund_nm = f_get_parm( request.getParameter( "a_refund_nm" )); // 환불계좌 예금주명
|
||||
String a_bank_code = f_get_parm( request.getParameter( "a_bank_code" )); // 환불계좌 은행코드
|
||||
|
||||
|
||||
String cancel_target_data = site_cd + "^" + tno + "^" + mod_type;
|
||||
String kcp_sign_data = makeSignatureData(cancel_target_data);
|
||||
|
||||
String temp_req_param = "";
|
||||
String req_data = "";
|
||||
String temp_result = "";
|
||||
String res_data = "";
|
||||
|
||||
JSONObject json_req = new JSONObject();
|
||||
|
||||
|
||||
if(mod_type.equals("STE1"))
|
||||
{
|
||||
json_req.put("site_cd", site_cd); //
|
||||
json_req.put("kcp_cert_info", kcp_cert_info); //
|
||||
json_req.put("tno", tno);
|
||||
json_req.put("mod_ip", mod_ip); //
|
||||
json_req.put("mod_type",mod_type); //
|
||||
json_req.put("deli_numb",deli_numb); //
|
||||
json_req.put("deli_corp",deli_corp); //
|
||||
json_req.put("kcp_sign_data",kcp_sign_data);
|
||||
|
||||
}
|
||||
|
||||
else if(mod_type.equals("STE2") || mod_type.equals("STE4") ||
|
||||
mod_type.equals("STE3") || mod_type.equals("STE5"))
|
||||
{
|
||||
|
||||
json_req.put("site_cd", site_cd);
|
||||
json_req.put("kcp_cert_info", kcp_cert_info);
|
||||
json_req.put("tno", tno);
|
||||
json_req.put("mod_ip", mod_ip);
|
||||
json_req.put("mod_desc", mod_desc);
|
||||
json_req.put("mod_type",mod_type);
|
||||
json_req.put("kcp_sign_data",kcp_sign_data);
|
||||
|
||||
if(vcnt_yn.equals("Y"))
|
||||
{
|
||||
json_req.put("refund_account",refund_account);
|
||||
json_req.put("refund_nm",refund_nm);
|
||||
json_req.put("bank_code",bank_code);
|
||||
}
|
||||
}
|
||||
|
||||
else if( mod_type_check.equals("STE9_A") || mod_type_check.equals("STE9_AP") ||
|
||||
mod_type_check.equals("STE9_AR") || mod_type_check.equals("STE9_V") ||
|
||||
mod_type_check.equals("STE9_VP"))
|
||||
{
|
||||
|
||||
json_req.put("site_cd", site_cd);
|
||||
json_req.put("kcp_cert_info", kcp_cert_info);
|
||||
json_req.put("tno", tno);
|
||||
json_req.put("mod_ip", mod_ip);
|
||||
json_req.put("mod_desc", mod_desc);
|
||||
json_req.put("kcp_sign_data",kcp_sign_data);
|
||||
json_req.put("mod_desc_cd", "CA06");
|
||||
json_req.put("mod_type",mod_type);
|
||||
|
||||
if(mod_type_check.equals("STE9_A"))
|
||||
{
|
||||
json_req.put("sub_mod_type", "STSC");
|
||||
json_req.put("mod_sub_type", "MDSC03");
|
||||
}
|
||||
|
||||
if(mod_type_check.equals("STE9_AP"))
|
||||
{
|
||||
json_req.put("sub_mod_type", "STPC");
|
||||
json_req.put("mod_sub_type", "MDSC04");
|
||||
json_req.put("part_canc_yn", "Y");
|
||||
json_req.put("rem_mny", rem_mny);
|
||||
json_req.put("mod_mny", mod_mny);
|
||||
}
|
||||
|
||||
if(mod_type_check.equals("STE9_AR"))
|
||||
{
|
||||
json_req.put("sub_mod_type", "STHD");
|
||||
json_req.put("mod_sub_type", "MDSC04");
|
||||
json_req.put("mod_account", a_refund_account);
|
||||
json_req.put("mod_bankcode", a_bank_code);
|
||||
json_req.put("mod_depositor", a_refund_nm);
|
||||
}
|
||||
|
||||
if(mod_type_check.equals("STE9_V"))
|
||||
{
|
||||
json_req.put("sub_mod_type", "STHD");
|
||||
json_req.put("mod_sub_type", "MDSC00");
|
||||
json_req.put("mod_account", a_refund_account);
|
||||
json_req.put("mod_bankcode", a_bank_code);
|
||||
json_req.put("mod_depositor", a_refund_nm);
|
||||
}
|
||||
|
||||
if(mod_type_check.equals("STE9_VP"))
|
||||
{
|
||||
json_req.put("sub_mod_type", "STPD");
|
||||
json_req.put("mod_sub_type", "MDSC04");
|
||||
json_req.put("part_canc_yn", "Y");
|
||||
json_req.put("rem_mny", rem_mny);
|
||||
json_req.put("mod_mny", mod_mny);
|
||||
json_req.put("mod_account", a_refund_account);
|
||||
json_req.put("mod_bankcode", a_bank_code);
|
||||
json_req.put("mod_depositor", a_refund_nm);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
String temp_req_data = json_req.toString();
|
||||
req_data = temp_req_data.replace(",",",\r\n");
|
||||
|
||||
String inputLine = null;
|
||||
StringBuffer outResult = new StringBuffer();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
// API REQ
|
||||
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();
|
||||
|
||||
// API RES
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
|
||||
while ((inputLine = in.readLine()) != null)
|
||||
{
|
||||
outResult.append(inputLine);
|
||||
}
|
||||
conn.disconnect();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
temp_result = outResult.toString();
|
||||
res_data = temp_result.replace(",",",\r\n");
|
||||
|
||||
|
||||
|
||||
// RES JSON DATA Parsing
|
||||
JSONParser parser = new JSONParser();
|
||||
JSONObject json_res = (JSONObject)parser.parse(temp_result);
|
||||
|
||||
%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>*** NHN KCP API SAMPLE ***</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<link href="../static/css/style.css" rel="stylesheet" type="text/css"/>
|
||||
|
||||
</head>
|
||||
<body oncontextmenu="return false;">
|
||||
<div class="wrap">
|
||||
<!-- header -->
|
||||
<div class="header">
|
||||
<a href="index.html" class="btn-back"><span>뒤로가기</span></a>
|
||||
<h1 class="title">TEST SAMPLE</h1>
|
||||
</div>
|
||||
<!-- //header -->
|
||||
<!-- contents -->
|
||||
<div id="skipCont" class="contents">
|
||||
<h2 class="title-type-3">요청 DATA</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left">
|
||||
<p class="title"></p>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-3">
|
||||
<textarea style="height:200px; width:450px" readonly><%=req_data%></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 class="title-type-3">응답 DATA </h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left">
|
||||
<p class="title"></p>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-3">
|
||||
<textarea style="height:200px; width:450px" readonly><%=res_data%></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="list-btn-2">
|
||||
<li class="pc-only-show"><a href="../index.html" class="btn-type-3 pc-wd-2">처음으로</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="grid-footer">
|
||||
<div class="inner">
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--//wrap-->
|
||||
</body>
|
||||
</html>
|
||||
278
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpKeyInC.jsp
Normal file
278
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpKeyInC.jsp
Normal file
@@ -0,0 +1,278 @@
|
||||
<%@ 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 : PayKcpKeyInC.jsp
|
||||
Description : kcp 수기결제창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>가맹점 결제 샘플페이지</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="-1">
|
||||
<script type="text/javascript">
|
||||
// 주문번호 생성 예제
|
||||
function init_orderid()
|
||||
{
|
||||
var today = new Date();
|
||||
var year = today.getFullYear();
|
||||
var month = today.getMonth()+ 1;
|
||||
var date = today.getDate();
|
||||
var time = today.getTime();
|
||||
|
||||
if(parseInt(month) < 10)
|
||||
{
|
||||
month = "0" + month;
|
||||
}
|
||||
|
||||
var vOrderID = "TEST" + year + "" + month + "" + date + "" + time;
|
||||
|
||||
document.forms[0].orderId.value = vOrderID;
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="init_orderid();">
|
||||
<div class="wrap">
|
||||
<form id="registForm" name="registForm" action="/sopmal/pay/kcpPayKeyinSuccss">
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">결제요청 SAMPLE</h1>
|
||||
</div>
|
||||
<div id="skipCont" class="contents">
|
||||
<p class="txt-type-1">이 페이지는 결제 요청하는 샘플 페이지입니다.</p>
|
||||
<p class="txt-type-2">소스 수정 시 [※ 필수] 또는 [※ 옵션] 표시가 포함된 문장은 가맹점의 상황에 맞게 적절히 수정 적용하시기 바랍니다.</p>
|
||||
|
||||
<h2 class="title-type-3">주문 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
|
||||
<!-- 주문번호 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">주문번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="orderId" value="" maxlength="40" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 상품명 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">상품명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="orderName" value="핸드폰" maxlength="50" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 주문자명 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="customerName" value="홍길동" maxlength="20" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 주문자 E-Mail -->
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자 E-Mail</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="customerEmail" value="test@test.co.kr" maxlength="20" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 주문자 휴대폰번호 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자 휴대폰번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="customerTel" value="010-0000-0000" maxlength="20" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- 결제 정보 입력 Start -->
|
||||
<h2 class="title-type-3">결제 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
|
||||
<!-- 결제금액 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">결제금액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="goodMny" value="1004" maxlength="9" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
<span class="txt-price">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 카드 번호 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">카드 번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="cardNumber" value="" maxlength="16" placeholder="카드번호 '-' 제외" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 할부개월 -->
|
||||
<li>
|
||||
<div class="left"><p class="title">할부개월</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="cardInstallmentPlan" value="00" maxlength="2" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 유효 기간 (YYMM) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">유효 기간</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="cardExpiration" value="" maxlength="4" placeholder="YYMM" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 인증정보 (생년월일 / 사업자번호) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">인증 정보</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="password" name="idInfo" value="" maxlength="14" placeholder="생년월일 6자리 / 사업자번호 10자리" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 비밀번호 (카드 비밀번호 앞 2자리) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">비밀번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="password" name="cardPassword" value="" maxlength="2" placeholder="카드 비밀번호 앞 2자리"/>
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- 결제 정보 입력 End -->
|
||||
|
||||
<!-- 필수 항목 : 화폐단위 -->
|
||||
<input type="hidden" name="currency" value="410">
|
||||
|
||||
<!-- 결제 버튼 테이블 Start -->
|
||||
<div Class="Line-Type-1"></div>
|
||||
<ul class="list-btn-2">
|
||||
<li><input name="" type="submit" class="submit" value="결제요청" /></li>
|
||||
<li class="pc-only-show"><a href="./index.html" class="btn-type-3 pc-wd-2">뒤로</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 결제 버튼 테이블 End -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!--
|
||||
reqParam = {
|
||||
"amount":"1004",
|
||||
"card_tx_type":"11121000",
|
||||
"cust_ip":"",
|
||||
"card_pwd":"51",
|
||||
"pay_method":"CARD",
|
||||
"card_taxno":"761216",
|
||||
"buyr_tel2":"010-0000-0000",
|
||||
"card_mny":"1004",
|
||||
"buyr_mail":"test@test.co.kr",
|
||||
"card_expiry":"2503",
|
||||
"site_cd":"T0000",
|
||||
"card_no":"5361421002182137",
|
||||
"quota":"00",
|
||||
"kcp_cert_info":"-----BEGIN CERTIFICATE-----MIIDgTCCAmmgAwIBAgIHBy4lYNG7ojANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJLUjEOMAwGA1UECAwFU2VvdWwxEDAOBgNVBAcMB0d1cm8tZ3UxFTATBgNVBAoMDE5ITktDUCBDb3JwLjETMBEGA1UECwwKSVQgQ2VudGVyLjEWMBQGA1UEAwwNc3BsLmtjcC5jby5rcjAeFw0yMTA2MjkwMDM0MzdaFw0yNjA2MjgwMDM0MzdaMHAxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEQMA4GA1UEBwwHR3Vyby1ndTERMA8GA1UECgwITG9jYWxXZWIxETAPBgNVBAsMCERFVlBHV0VCMRkwFwYDVQQDDBAyMDIxMDYyOTEwMDAwMDI0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppkVQkU4SwNTYbIUaNDVhu2w1uvG4qip0U7h9n90cLfKymIRKDiebLhLIVFctuhTmgY7tkE7yQTNkD+jXHYufQ\/qj06ukwf1BtqUVru9mqa7ysU298B6l9v0Fv8h3ztTYvfHEBmpB6AoZDBChMEua7Or\/L3C2vYtU\/6lWLjBT1xwXVLvNN\/7XpQokuWq0rnjSRThcXrDpWMbqYYUt\/CL7YHosfBazAXLoN5JvTd1O9C3FPxLxwcIAI9H8SbWIQKhap7JeA\/IUP1Vk4K\/o3Yiytl6Aqh3U1egHfEdWNqwpaiHPuM\/jsDkVzuS9FV4RCdcBEsRPnAWHz10w8CX7e7zdwIDAQABox0wGzAOBgNVHQ8BAf8EBAMCB4AwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAg9lYy+dM\/8Dnz4COc+XIjEwr4FeC9ExnWaaxH6GlWjJbB94O2L26arrjT2hGl9jUzwd+BdvTGdNCpEjOz3KEq8yJhcu5mFxMskLnHNo1lg5qtydIID6eSgew3vm6d7b3O6pYd+NHdHQsuMw5S5z1m+0TbBQkb6A9RKE1md5\/Yw+NymDy+c4NaKsbxepw+HtSOnma\/R7TErQ\/8qVioIthEpwbqyjgIoGzgOdEFsF9mfkt\/5k6rR0WX8xzcro5XSB3T+oecMS54j0+nHyoS96\/llRLqFDBUfWn5Cay7pJNWXCnw4jIiBsTBa3q95RVRyMEcDgPwugMXPXGBwNoMOOpuQ==-----END CERTIFICATE-----",
|
||||
"currency":"410",
|
||||
"buyr_name":"홍길동",
|
||||
"ordr_idxx":"TEST202406181718698199856",
|
||||
"good_name":"핸드폰"}
|
||||
|
||||
|
||||
resParam = {
|
||||
"order_no":"TEST202406181718698199856",
|
||||
"card_bin_length":"6",
|
||||
"mall_taxno":"1138521083",
|
||||
"partcanc_yn":"Y",
|
||||
"noinf":"N",
|
||||
"res_msg":"정상처리",
|
||||
"coupon_mny":"0",
|
||||
"pg_txid":"0618171056MP01437101390000000010040070543410",
|
||||
"card_bin_type_01":"0",
|
||||
"trace_no":"T0000FA660IY0PWI",
|
||||
"card_mny":"1004",
|
||||
"use_quota":"00",
|
||||
"res_vat_mny":"92",
|
||||
"ca_order_id":"TEST202406181718698199856",
|
||||
"res_tax_flag":"TG03",
|
||||
"acqu_name":"삼성카드",
|
||||
"card_no":"5361420000002137",
|
||||
"quota":"00",
|
||||
"van_cd":"VNKC",
|
||||
"acqu_cd":"CCSS",
|
||||
"amount":"1004",
|
||||
"cert_no":"24800437101392",
|
||||
"van_apptime":"20240618171056",
|
||||
"use_point":"0",
|
||||
"res_free_mny":"0",
|
||||
"pay_method":"PACA",
|
||||
"card_bin_bank_cd":"0311",
|
||||
"bizx_numb":"24450105",
|
||||
"res_cd":"0000",
|
||||
"escw_yn":"N",
|
||||
"join_cd":"0000",
|
||||
"app_time":"20240618171056",
|
||||
"tno":"24800437101392",
|
||||
"card_bin_type_02":"0",
|
||||
"card_cd":"CCSS",
|
||||
"res_en_msg":"processing completed",
|
||||
"card_name":"삼성카드",
|
||||
"mcht_taxno":"1138521083",
|
||||
"res_green_deposit_mny":"0",
|
||||
"res_tax_mny":"912",
|
||||
"app_no":"70543410"}
|
||||
-->
|
||||
181
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpModC.jsp
Normal file
181
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpModC.jsp
Normal file
@@ -0,0 +1,181 @@
|
||||
<%@ 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 : PayKcpModC.jsp
|
||||
Description : kcp결제 취소
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>kcp결제 취소 샘플페이지</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="-1">
|
||||
<link href="../static/css/style.css" rel="stylesheet" type="text/css" id="cssLink"/>
|
||||
|
||||
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
|
||||
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************
|
||||
* kcp결제 취소
|
||||
****************************************************************/
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#content').hide();
|
||||
|
||||
$('#cancel-button').on('click', function(event) {
|
||||
const url = '<c:url value="/sopmal/pay/kcpPayCancel"/>';
|
||||
event.preventDefault(); // 기본 폼 제출 동작 취소
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data:$('#cancelForm').serialize(),
|
||||
success : function(data) {
|
||||
if (data.resBody != null) {
|
||||
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
|
||||
$('#rstTitle').text("결제 취소");
|
||||
$('#res_msg').text(result.response.res_msg);
|
||||
$('#tno').text(result.response.tno);
|
||||
$('#res_en_msg').text(result.response.res_en_msg);
|
||||
$('#res_cd').text(result.response.res_cd);
|
||||
$('#canc_time').text(result.response.canc_time);
|
||||
|
||||
$('#content').show();
|
||||
}
|
||||
console.log('response.receiptKey:', result.response.cash_no);
|
||||
},
|
||||
error: function(error) {
|
||||
console.error('Error fetching data:', error);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<form name="cancelForm" id="cancelForm">
|
||||
<input type="hidden" name="shopMallCd" value="NC"/>
|
||||
|
||||
<!-- header -->
|
||||
<div class="header">
|
||||
<h1 class="title">결제 취소 SAMPLE</h1>
|
||||
</div>
|
||||
<!-- //header -->
|
||||
|
||||
<!-- 상단 테이블 Start -->
|
||||
<div class="sample">
|
||||
<!-- 상단 테이블 End -->
|
||||
|
||||
<h2 class="title-type-3">결체 취소 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left"><p class="title">요청 정보</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<select name='modType' class="frmselect" style="width:100%;height:35px;">
|
||||
<option value='STSC' selected>전체취소</option>
|
||||
<option value='STPC'>부분취소</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">거래번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="tno" value="" maxlength="14" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="title-type-3">부분 취소 시 요청 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<li>
|
||||
<div class="left"><p class="title">부분취소 요청 금액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="modMny" value="" maxlength="40" placeholder="부분취소시 필수" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">부분취소 가능 금액</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="remMny" value="" maxlength="40" placeholder="부분취소시 필수" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">취소사유</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="modDesc" value="" maxlength="40" placeholder="부분취소시 필수" />
|
||||
<a href="#none" class="btn-clear"></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- 결제 버튼 테이블 Start -->
|
||||
<div Class="Line-Type-1"></div>
|
||||
<ul class="list-btn-2">
|
||||
<li><input name="cancel-button" id="cancel-button" type="button" value="취소요청" class="btn-type-2 pc-wd-3"/></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //contents -->
|
||||
|
||||
<div class="grid-footer">
|
||||
<div class="inner">
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- 요청종류 취소 요청시 사용 -->
|
||||
<input type="hidden" name="req_tx" value="mod"/>
|
||||
</form>
|
||||
|
||||
<br/><br/>===========================<br/><br/>
|
||||
<div id="content">
|
||||
<br/><span id="rstTitle"></span> 결과출력 <br/>
|
||||
<p>res_msg: <span id="res_msg"></span></p>
|
||||
<p>tno: <span id="tno"></span></p>
|
||||
<p>res_en_msg: <span id="res_en_msg"></span></p>
|
||||
<p>res_cd: <span id="res_cd"></span></p>
|
||||
<p>canc_time: <span id="canc_time"></span></p>
|
||||
</div>
|
||||
|
||||
<!-- {"res_msg":"정상처리","tno":"24421437285178","res_en_msg":"processing completed","res_cd":"0000","canc_time":"20240619102823"} -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
417
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpRegC.jsp
Normal file
417
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpRegC.jsp
Normal file
@@ -0,0 +1,417 @@
|
||||
<%@ 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 : PayKcpRegC.jsp
|
||||
Description : kcp 결제화면
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>KCP 결제 샘플페이지</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="-1">
|
||||
|
||||
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
|
||||
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/****************************************************************/
|
||||
/* 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 );
|
||||
closeEvent();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!--
|
||||
결제창 호출 JS
|
||||
개발 : https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js
|
||||
운영 : https://spay.kcp.co.kr/plugin/kcp_spay_hub.js
|
||||
-->
|
||||
<script type="text/javascript" src="https://testspay.kcp.co.kr/plugin/kcp_spay_hub.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
/* 표준웹 실행 */
|
||||
function jsf__pay( form , gubun){
|
||||
|
||||
form.payco_direct.value=gubun;
|
||||
|
||||
try{
|
||||
KCP_Pay_Execute_Web( form );
|
||||
}catch (e){
|
||||
/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 주문번호 생성 예제
|
||||
function init_orderid(){
|
||||
var today = new Date();
|
||||
var year = today.getFullYear();
|
||||
var month = today.getMonth()+ 1;
|
||||
var date = today.getDate();
|
||||
var time = today.getTime();
|
||||
|
||||
if(parseInt(month) < 10) {
|
||||
month = "0" + month;
|
||||
}
|
||||
|
||||
var vOrderID = "TEST" + year + "" + month + "" + date + "" + time;
|
||||
|
||||
document.forms[0].ordr_idxx.value = vOrderID;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*에스크로 결제시 필요한 장바구니 샘플예제 입니다.*/
|
||||
function create_goodInfo()
|
||||
{
|
||||
var chr30 = String.fromCharCode(30); // ASCII 코드값 30
|
||||
var chr31 = String.fromCharCode(31); // ASCII 코드값 31
|
||||
|
||||
/*
|
||||
Seq : 상품개수 일련번호, ordr_numb : 상품주문번호, good_name : 상품이름, good_cntx : 상품수량, good_amtx : 상품금액
|
||||
*/
|
||||
var good_info = "seq=1" + chr31 + "ordr_numb=20060310_0001" + chr31 + "good_name=양말" + chr31 + "good_cntx=2" + chr31 + "good_amtx=1000" + chr30 +
|
||||
"seq=2" + chr31 + "ordr_numb=20060310_0002" + chr31 + "good_name=신발" + chr31 + "good_cntx=1" + chr31 + "good_amtx=1500" + chr30 +
|
||||
"seq=3" + chr31 + "ordr_numb=20060310_0003" + chr31 + "good_name=바지" + chr31 + "good_cntx=1" + chr31 + "good_amtx=1000";
|
||||
|
||||
document.order_info.good_info.value = good_info;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="create_goodInfo();init_orderid()">
|
||||
<form name="order_info" method="post" action="/sopmal/pay/kcpPaySuccss">
|
||||
<div class="wrap">
|
||||
|
||||
<!-- contents -->
|
||||
<div id="skipCont" class="contents">
|
||||
<p class="txt-type-1">이 페이지는 결제를 요청하는 샘플 페이지입니다.</p>
|
||||
<p class="txt-type-2">소수 수정 시 [※ 필수] 또는 [※ 옵션] 표시가 포함된 문장은 가맹점의 상황에 맞게 적절히 수정 적용하시기 바랍니다.</p>
|
||||
<!-- 주문내역 -->
|
||||
<h2 class="title-type-3">주문내역</h2>
|
||||
<ul class="list-type-1">
|
||||
<!-- 주문번호(ordr_idxx) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">site_cd</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="site_cd" value="T0007" /><!-- (필수) T0000 : KBPAY 연동 | T0007 : ISP연동 -->
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li><div class="left"><p class="title">주문번호(필수)</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="ordr_idxx" value="" maxlength="40" size="50"/>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
<!-- 상품명(good_name) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">상품명(필수)</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="good_name" value="운동화" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 결제금액(good_mny) - ※ 필수 : 값 설정시 ,(콤마)를 제외한 숫자만 입력하여 주십시오. -->
|
||||
<li>
|
||||
<div class="left"><p class="title">상품금액(필수)</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 gap-2 pc-wd-2">
|
||||
<input type="text" name="good_mny" value="1004" maxlength="9" />
|
||||
<span class="txt-price">원</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="line-type-1"></div>
|
||||
<!-- 주문정보 -->
|
||||
<h2 class="title-type-3">주문정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<!-- 주문자명(buyr_name) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">주문자명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="buyr_name" value="홍길동" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 휴대폰번호(buyr_tel2) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">휴대폰번호(필수)</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="buyr_tel2" value="010-0000-0000" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 주문자 E-mail(buyr_mail) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">이메일</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="buyr_mail" value="test@test.co.kr" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="line-type-1"></div>
|
||||
<!--
|
||||
결제 수단 정보 설정
|
||||
|
||||
결제에 필요한 결제 수단 정보를 설정합니다.
|
||||
|
||||
신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000
|
||||
포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000
|
||||
|
||||
위와 같이 설정한 경우 표준웹에서 설정한 결제수단이 표시됩니다.
|
||||
표준웹에서 여러 결제수단을 표시하고 싶으신 경우 설정하시려는 결제
|
||||
수단에 해당하는 위치에 해당하는 값을 1로 변경하여 주십시오.
|
||||
|
||||
※ 필수
|
||||
KCP에 신청된 결제수단으로만 결제가 가능합니다.
|
||||
-->
|
||||
<h2 class="title-type-3">결제수단(필수)</h2>
|
||||
<ul class="list-check-1">
|
||||
<li>
|
||||
<input type="radio" id="radio-2-1" class="ipt-radio-1" name="pay_method" value="100000000000" checked />
|
||||
<label for="radio-2-1"><span class="ico-radio"><span></span></span>신용카드</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="radio-2-2" class="ipt-radio-1" name="pay_method" value="010000000000" />
|
||||
<label for="radio-2-2"><span class="ico-radio"><span></span></span>계좌이체</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="radio-2-3" class="ipt-radio-1" name="pay_method" value="001000000000" />
|
||||
<label for="radio-2-3"><span class="ico-radio"><span></span></span>가상계좌</label>
|
||||
</li>
|
||||
<!-- <li>
|
||||
<input type="radio" id="radio-2-4" class="ipt-radio-1" name="pay_method" value="000100000000" />
|
||||
<label for="radio-2-4"><span class="ico-radio"><span></span></span>포인트</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="radio-2-5" class="ipt-radio-1" name="pay_method" value="000010000000" />
|
||||
<label for="radio-2-5"><span class="ico-radio"><span></span></span>휴대폰</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="radio-2-6" class="ipt-radio-1" name="pay_method" value="000000001000" />
|
||||
<label for="radio-2-6"><span class="ico-radio"><span></span></span>상품권</label>
|
||||
</li>-->
|
||||
</ul>
|
||||
|
||||
<!--
|
||||
/* ============================================================================== */
|
||||
/* = 에스크로 정보 = */
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
/* = 에스크로 사용업체에 적용되는 정보입니다. = */
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
-->
|
||||
<!-- 주문내역 --> <!-- 수취인 정보는 필수 정보는 아님 -->
|
||||
<h2 class="title-type-3">에스크로 정보</h2>
|
||||
<ul class="list-type-1">
|
||||
<!-- 수취인명(rcvr_name) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인명</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_name" value="홍길동" maxlength="40" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 수취인 연락처1(rcvr_tel1) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 연락처1</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_tel1" value="02-1544-8661" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 수취인 휴대폰번호(rcvr_tel2) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 휴대폰번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 gap-2 pc-wd-2">
|
||||
<input type="text" name="rcvr_tel2" value="010-0000-0000" maxlength="9" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 수취인 E-mail(rcvr_mail) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 E-mail</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_mail" value="test@test.co.kr" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 수취인 우편번호(rcvr_zipx) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 우편번호</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_zipx" value="157864" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- 수취인 주소(rcvr_add1) -->
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 주소</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_add1" value="서울시 구로구" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="left"><p class="title">수취인 상세주소</p></div>
|
||||
<div class="right">
|
||||
<div class="ipt-type-1 pc-wd-2">
|
||||
<input type="text" name="rcvr_add2" value="디지털로 26길 72" />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<!--
|
||||
/* = -------------------------------------------------------------------------- = */
|
||||
/* = 에스크로 정보 END = */
|
||||
/* ============================================================================== */
|
||||
-->
|
||||
|
||||
|
||||
<div Class="Line-Type-1"></div>
|
||||
<ul class="list-btn-2">
|
||||
<li><a href="#none" onclick="jsf__pay(document.order_info, '');" class="btn-type-2 pc-wd-3">결제요청</a></li>
|
||||
<li>
|
||||
<a href="#none" onclick="jsf__pay(document.order_info, 'Y');" class="btn-type-2 pc-wd-3">페이코 결제요청</a>
|
||||
<br/> 제휴간편결제창 호출 시 PC는 pay_method = “100000000000” (신용카드), Mobile의 경우 pay_method = “CARD”, ActionResult = “card”로 진행해 주시기 바랍니다
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //contents -->
|
||||
|
||||
<div class="grid-footer">
|
||||
<div class="inner">
|
||||
<!-- footer -->
|
||||
<div class="footer">
|
||||
ⓒ NHN KCP Corp.
|
||||
</div>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- ========== 에스크로 필수정보 Start =============================== -->
|
||||
<!-- 에스크로 사용 여부 : 반드시 Y 로 설정 -->
|
||||
<input type="hidden" name="escw_used" value="Y"/>
|
||||
<!-- 에스크로 결제처리 모드 : 에스크로: Y, 일반: N -->
|
||||
<input type="hidden" name="pay_mod" value="Y"/>
|
||||
<!-- 배송 소요일 : 예상 배송 소요일을 입력 -->
|
||||
<input type="hidden" name="deli_term" value="03"/>
|
||||
<!-- 장바구니 상품 개수 : 장바구니에 담겨있는 상품의 개수를 입력(good_info의 seq값 참조) -->
|
||||
<input type="hidden" name="bask_cntx" value="3"/>
|
||||
<!-- 장바구니 상품 상세 정보 (자바 스크립트 샘플 create_goodInfo()가 온로드 이벤트시 설정되는 부분입니다.) -->
|
||||
<input type="hidden" name="good_info" value=""/>
|
||||
<!-- ========== 에스크로 필수정보 End =============================== -->
|
||||
|
||||
|
||||
<!-- 가맹점 정보 설정-->
|
||||
|
||||
<input type="hidden" name="site_name" value="TEST SITE" />
|
||||
<input type="hidden" name="pay_method" value="" />
|
||||
<input type="hidden" name="payco_direct" value="" />
|
||||
<!--
|
||||
※필수 항목
|
||||
결제인증 완료 후 결제창에서 값을 설정하는 부분으로 반드시 포함되어야 합니다.
|
||||
임의로 값을 설정하지 마십시오.
|
||||
-->
|
||||
<input type="hidden" name="res_cd" value=""/>
|
||||
<input type="hidden" name="res_msg" value=""/>
|
||||
<input type="hidden" name="enc_info" value=""/>
|
||||
<input type="hidden" name="enc_data" value=""/>
|
||||
<input type="hidden" name="tran_cd" value=""/>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
<!--
|
||||
PC 결제창 전달정보
|
||||
{
|
||||
"site_cd":"T0000",
|
||||
"site_name":"TEST SITE",
|
||||
"pay_method":"100000000000",
|
||||
"ordr_idxx":"TEST123456789",
|
||||
"good_name":"운동화",
|
||||
"good_mny":"1000"
|
||||
}
|
||||
|
||||
*** pay_method ***
|
||||
MOBILE 결제수단 코드 값 입니다. (4 Byte)
|
||||
신용카드 : CARD
|
||||
계좌이체 : BANK
|
||||
가상계좌 : VCNT
|
||||
휴대폰 : MOBX
|
||||
포인트 : TPNT
|
||||
상품권 : GIFT
|
||||
ex) "pay_method" : "CARD"
|
||||
|
||||
PC 결제수단 코드 값 입니다. (12 Byte)
|
||||
신용카드 : 100000000000
|
||||
계좌이체 : 010000000000
|
||||
가상계좌 : 001000000000
|
||||
포인트 : 000100000000
|
||||
휴대폰 : 000010000000
|
||||
상품권 : 000000001000
|
||||
ex) "pay_method" : "100000000000"
|
||||
-->
|
||||
|
||||
92
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpSucsC.jsp
Normal file
92
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpSucsC.jsp
Normal file
@@ -0,0 +1,92 @@
|
||||
<%@ 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 : PayKcpSucsC.jsp
|
||||
Description : 토스결제 결과창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!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 = "";
|
||||
|
||||
if(jsonObject.pay_method == "PACA") rstNumber = jsonObject.card_name;
|
||||
if(jsonObject.pay_method == "PAVC") rstNumber = jsonObject.account;
|
||||
if(jsonObject.pay_method == "PABK") rstNumber = jsonObject.bank_name;
|
||||
if(jsonObject.pay_method == "PAMC") rstNumber = jsonObject.mobile_no;
|
||||
|
||||
// JSON 데이터 표시
|
||||
$('#responseMessage').text('${message}');
|
||||
$('#responseOrderName').text(jsonObject.order_no);
|
||||
$('#responseMethod').text(jsonObject.pay_method);
|
||||
$('#responseNumber').text(rstNumber);
|
||||
|
||||
$('#resCode').text(jsonObject.res_cd);
|
||||
$('#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="responseNumber"></span>
|
||||
</p>
|
||||
|
||||
<p><span id="resMessage"></span></p>
|
||||
<span>에러코드: <span id="resCode"></span></span>
|
||||
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!--
|
||||
{
|
||||
"res_cd":"0000",
|
||||
"res_msg":"정상처리",
|
||||
"pay_method":"PACA",
|
||||
"order_no":"TEST123456789",
|
||||
"amount":"1000",
|
||||
"card_mny":"1000",
|
||||
"coupon_mny":"0",
|
||||
"card_no":"4673090000000032",
|
||||
"quota":"00",
|
||||
"tno":"24346915432487",
|
||||
"card_cd":"CCKM",
|
||||
"card_name":"국민카드",
|
||||
"app_no":"78710726"
|
||||
}
|
||||
|
||||
페이코의 경우 신용카드 응답에
|
||||
card_other_pay_type - OT12 (페이코)
|
||||
payco_point_mny - 페이코 포인트 사용금액
|
||||
이 추가되어 온다고 함. 페이코머니에 대한 부분 확인 필요.
|
||||
|
||||
pay_method
|
||||
페이코 포인트 - PACP
|
||||
ex) 신용카드일 경우, "pay_method" : "PACA"
|
||||
-->
|
||||
237
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpWebhook.jsp
Normal file
237
src/main/webapp/WEB-INF/views/sopmal/ordr/PayKcpWebhook.jsp
Normal file
@@ -0,0 +1,237 @@
|
||||
<%@ page language="java" contentType="text/html;charset=utf-8"%>
|
||||
<%!
|
||||
// null 값을 처리하는 메소드
|
||||
public String f_get_parm( String val )
|
||||
{
|
||||
if ( val == null ) val = "";
|
||||
return val;
|
||||
}
|
||||
%>
|
||||
<% request.setCharacterEncoding("utf-8"); %>
|
||||
<%
|
||||
//=============================================================================================
|
||||
// 01. Webhook
|
||||
//---------------------------------------------------------------------------------------------
|
||||
//
|
||||
// NHN KCP 에서는 에스크로 결제 건에 대한 상태가 변경되었을 때,
|
||||
// 가맹점의 DB에서 상태변경을 할 수 있도록 노티를 전달 드리고 있습니다.
|
||||
// ex) 고객 입금 완료 또는 결제 상태 변경 시(구매확인, 취소) 가맹점의 Webhook 페이지로 노티 데이터 전송
|
||||
//
|
||||
//---------------------------------------------------------------------------------------------
|
||||
//
|
||||
// webhook 페이지의 주소를 아래 경로에 등록하여 노티를 받을 수 있습니다.
|
||||
//
|
||||
// [등록 방법]
|
||||
// 1. KCP 파트너관리자(partner.kcp.co.kr)에 로그인
|
||||
// 2. 좌측메뉴 [상점정보관리] -> [보안관리] -> [결제결과URL 설정]
|
||||
// 3. 결제결과URL 항목에 해당 페이지 URL 설정 후 저장
|
||||
//
|
||||
//=============================================================================================
|
||||
|
||||
|
||||
//=============================================================================================
|
||||
// 02. 데이터 수신
|
||||
//---------------------------------------------------------------------------------------------
|
||||
String site_cd = f_get_parm( request.getParameter( "site_cd" ) ); // 사이트 코드
|
||||
String tno = f_get_parm( request.getParameter( "tno" ) ); // KCP 거래번호
|
||||
String ordr_idxx = f_get_parm( request.getParameter( "ordr_idxx" ) ); // 주문번호
|
||||
String tx_cd = f_get_parm( request.getParameter( "tx_cd" ) ); // 업무처리 구분 코드
|
||||
String tx_tm = f_get_parm( request.getParameter( "tx_tm" ) ); // 업무처리 완료 시간
|
||||
|
||||
String ipgm_name = ""; // 주문자명
|
||||
String remitter = ""; // 입금자명
|
||||
String ipgm_mnyx = ""; // 입금금액
|
||||
String bank_code = ""; // 은행코드
|
||||
String account = ""; // 가상계좌 입금계좌번호
|
||||
String op_cd = ""; // 처리구분 코드
|
||||
String noti_id = ""; // 노티 아이디
|
||||
|
||||
String refund_nm = ""; // 환불계좌주명
|
||||
String refund_mny = ""; // 환불금액
|
||||
|
||||
String st_cd = ""; // 구매확인 코드
|
||||
String can_msg = ""; // 구매취소 사유
|
||||
|
||||
String waybill_no = ""; // 운송장 번호
|
||||
String waybill_corp = ""; // 택배 업체명
|
||||
|
||||
String cash_a_no = ""; // 현금영수증 승인번호
|
||||
String cash_a_dt = ""; // 현금영수증 승인시간
|
||||
String cash_no = ""; // 현금영수증 거래번호
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 02-1. 데이터 수신 - 가상계좌 입금 완료
|
||||
//---------------------------------------------------------------------------------------------
|
||||
if ( tx_cd.equals("TX00") )
|
||||
{
|
||||
ipgm_name = f_get_parm( request.getParameter( "ipgm_name" ) ); // 주문자명
|
||||
remitter = f_get_parm( request.getParameter( "remitter" ) ); // 입금자명
|
||||
ipgm_mnyx = f_get_parm( request.getParameter( "ipgm_mnyx" ) ); // 입금 금액
|
||||
bank_code = f_get_parm( request.getParameter( "bank_code" ) ); // 은행코드
|
||||
account = f_get_parm( request.getParameter( "account" ) ); // 가상계좌 입금계좌번호
|
||||
op_cd = f_get_parm( request.getParameter( "op_cd" ) ); // 처리구분 코드
|
||||
noti_id = f_get_parm( request.getParameter( "noti_id" ) ); // 노티 아이디
|
||||
cash_a_no = f_get_parm( request.getParameter( "cash_a_no" ) ); // 현금영수증 승인번호
|
||||
cash_a_dt = f_get_parm( request.getParameter( "cash_a_dt" ) ); // 현금영수증 승인시간
|
||||
cash_no = f_get_parm( request.getParameter( "cash_no" ) ); // 현금영수증 거래번호
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 02-2. 데이터 수신 - 가상계좌 환불
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX01") )
|
||||
{
|
||||
refund_nm = f_get_parm( request.getParameter( "refund_nm" ) ); // 환불계좌주명
|
||||
refund_mny = f_get_parm( request.getParameter( "refund_mny" ) ); // 환불금액
|
||||
bank_code = f_get_parm( request.getParameter( "bank_code" ) ); // 은행코드
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 02-3. 데이터 수신 - 구매확인/구매취소
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX02") )
|
||||
{
|
||||
st_cd = f_get_parm( request.getParameter( "st_cd" ) ); // 구매확인 코드
|
||||
|
||||
// 구매확인 상태가 구매취소인 경우
|
||||
if ( st_cd.equals("N") )
|
||||
{
|
||||
can_msg = f_get_parm( request.getParameter( "can_msg" ) ); // 구매취소 사유
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 02-4. 데이터 수신 - 배송시작
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX03") )
|
||||
{
|
||||
waybill_no = f_get_parm( request.getParameter( "waybill_no" ) ); // 운송장 번호
|
||||
waybill_corp = f_get_parm( request.getParameter( "waybill_corp" ) ); // 택배 업체명
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
|
||||
|
||||
//=============================================================================================
|
||||
// 03. 가맹점 DB 처리
|
||||
//---------------------------------------------------------------------------------------------
|
||||
//
|
||||
// 전달 받은 데이터를 활용하여 업체 DB를 처리하는 부분입니다.
|
||||
// 해당 부분은 업체 상황에 맞게 작업 진행 바랍니다.
|
||||
//
|
||||
//---------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-1. 가상계좌 입금 DB 처리 작업 부분
|
||||
//
|
||||
// 가상계좌 입금 건은 은행 공동망을 통해 입금 취소가 이루어질 수 있습니다.
|
||||
// 이러한 경우엔 처리구분 코드 "op_cd" 를 "13" 으로 전달 드리고 있습니다.
|
||||
// "op_cd=13" 의 경우에는 입금완료가 되지 않은 경우이니 DB 처리 시 유의 바랍니다.
|
||||
//---------------------------------------------------------------------------------------------
|
||||
if ( tx_cd.equals("TX00") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-2. 가상계좌 환불 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
if ( tx_cd.equals("TX01") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-3. 구매확인/구매취소 DB 처리 작업 부분
|
||||
//
|
||||
// "st_cd" 는 구매확인과 취소를 체크하는 코드입니다.
|
||||
// 반드시 구매확인("Y")과 구매취소("N")의 값을 구분하여 처리하시기 바랍니다.
|
||||
// 시스템 자동 구매확인 처리 시에는 "st_cd" 값이 "S" 로 전달 됩니다.
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX02") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
if (st_cd == "N" )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-4. 배송시작 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX03") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-5. 정산보류 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX04") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-6. 즉시취소 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX05") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-7. 취소 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX06") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// 03-8. 발급계좌해지 DB 처리 작업 부분
|
||||
//---------------------------------------------------------------------------------------------
|
||||
else if ( tx_cd.equals("TX07") )
|
||||
{
|
||||
//DB처리 코드 삽입
|
||||
}
|
||||
|
||||
//=============================================================================================
|
||||
|
||||
|
||||
//=============================================================================================
|
||||
// 04. result 값 설정
|
||||
//---------------------------------------------------------------------------------------------
|
||||
//
|
||||
// KCP 서버에서 데이터 전달 시 Webhook 페이지의 "result" 값을 확인 합니다.
|
||||
// 해당 값이 "0000"이 아닐 때, 최초 노티 포함 최대 10번까지 노티가 전송됩니다.
|
||||
//
|
||||
// DB 업데이트가 정상적으로 진행되었다면 "result" 값을 "0000" 으로 설정 바랍니다.
|
||||
//
|
||||
//=============================================================================================
|
||||
%>
|
||||
<html>
|
||||
<body>
|
||||
사이트 코드 : <%= site_cd%><br/>
|
||||
KCP 거래번호 : <%= tno%><br/>
|
||||
주문번호 : <%= ordr_idxx%><br/>
|
||||
업무처리 구분 코드 : <%= tx_cd%><br/>
|
||||
업무처리 완료 시간 : <%= tx_tm%><br/>
|
||||
주문자명 : <%= ipgm_name%><br/>
|
||||
입금자명 : <%= remitter%><br/>
|
||||
입금 금액 : <%= ipgm_mnyx%><br/>
|
||||
은행코드 : <%= bank_code%><br/>
|
||||
가상계좌 입금계좌번호 : <%= account%><br/>
|
||||
처리구분 코드 : <%= op_cd%><br/>
|
||||
노티 아이디 : <%= noti_id%><br/>
|
||||
현금영수증 승인번호 : <%= cash_a_no%><br/>
|
||||
현금영수증 승인시간 : <%= cash_a_dt%><br/>
|
||||
현금영수증 거래번호 : <%= cash_no%><br/>
|
||||
|
||||
<form><input type="hidden" name="result" value="0000"></form>
|
||||
</body>
|
||||
</html>
|
||||
111
src/main/webapp/WEB-INF/views/sopmal/ordr/PaySucsR.jsp
Normal file
111
src/main/webapp/WEB-INF/views/sopmal/ordr/PaySucsR.jsp
Normal file
@@ -0,0 +1,111 @@
|
||||
<%@ 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 : PaySucsR.jsp
|
||||
Description : 토스 위젯결제성공 화면
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 결제 샘플</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="box_section" style="width: 600px">
|
||||
<img width="100px" src="https://static.toss.im/illusts/check-blue-spot-ending-frame.png" />
|
||||
<h2>결제를 완료했어요</h2>
|
||||
|
||||
<div class="p-grid typography--p" style="margin-top: 50px">
|
||||
<div class="p-grid-col text--left"><b>결제금액</b></div>
|
||||
<div class="p-grid-col text--right" id="amount"></div>
|
||||
</div>
|
||||
<div class="p-grid typography--p" style="margin-top: 10px">
|
||||
<div class="p-grid-col text--left"><b>주문번호</b></div>
|
||||
<div class="p-grid-col text--right" id="orderId"></div>
|
||||
</div>
|
||||
<div class="p-grid typography--p" style="margin-top: 10px">
|
||||
<div class="p-grid-col text--left"><b>paymentKey</b></div>
|
||||
<div class="p-grid-col text--right" id="paymentKey" style="white-space: initial; width: 250px"></div>
|
||||
</div>
|
||||
<div class="p-grid" style="margin-top: 30px">
|
||||
<button class="button p-grid-col5" onclick="location.href='https://docs.tosspayments.com/guides/payment/integration';">연동 문서</button>
|
||||
<button class="button p-grid-col5" onclick="location.href='https://discord.gg/A4fRFXQhRu';" style="background-color: #e8f3ff; color: #1b64da">실시간 문의</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box_section" style="width: 600px; text-align: left">
|
||||
<b>Response Data :</b>
|
||||
<div id="response" style="white-space: initial"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 쿼리 파라미터 값이 결제 요청할 때 보낸 데이터와 동일한지 반드시 확인하세요.
|
||||
// 클라이언트에서 결제 금액을 조작하는 행위를 방지할 수 있습니다.
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
// 서버로 결제 승인에 필요한 결제 정보를 보내세요.
|
||||
async function confirm() {
|
||||
var requestData = {
|
||||
paymentKey: urlParams.get("paymentKey"),
|
||||
orderId: urlParams.get("orderId"),
|
||||
amount: urlParams.get("amount"),
|
||||
};
|
||||
|
||||
const response = await fetch("/sopmal/pay/tossPayWidgetSuccss", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(requestData),
|
||||
});
|
||||
|
||||
const json = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
// TODO: 결제 실패 비즈니스 로직을 구현하세요.
|
||||
console.log(json);
|
||||
window.location.href = "/sopmal/pay/PayFail?message=${json.message}&code=${json.code}"; //orderId string 주문번호입니다.
|
||||
}
|
||||
|
||||
// TODO: 결제 성공 비즈니스 로직을 구현하세요.
|
||||
console.log(json);
|
||||
return json;
|
||||
}
|
||||
confirm().then(function (data) {
|
||||
document.getElementById("response").innerHTML = `<pre>${JSON.stringify(data, null, 4)}</pre>`;
|
||||
});
|
||||
|
||||
const paymentKeyElement = document.getElementById("paymentKey"); //결제를 식별하는 키 값입니다. 토스페이먼츠에서 발급합니다. 결제 승인, 결제 조회, 결제 취소 등 운영에 필요한 값입니다.
|
||||
const orderIdElement = document.getElementById("orderId"); //주문번호입니다. 결제 요청에 보낸 값입니다.
|
||||
const amountElement = document.getElementById("amount"); //결제 금액입니다
|
||||
|
||||
/*
|
||||
결제 금액입니다. 결제 요청에 보낸 결제 금액과 같은지 반드시 확인해보세요. 클라이언트에서 결제 금액을 조작해 승인하는 행위를 방지할 수 있습니다.
|
||||
만약 값이 다르다면 결제를 취소하고 구매자에게 알려주세요. 적립금이나 쿠폰이 적용된 금액이 맞는지도 확인해보세요.
|
||||
*/
|
||||
|
||||
/*
|
||||
paymentType string : 결제 유형입니다. NORMAL, BRANDPAY, KEYIN 중 하나입니다.
|
||||
*/
|
||||
|
||||
orderIdElement.textContent = urlParams.get("orderId");
|
||||
amountElement.textContent = urlParams.get("amount") + "원";
|
||||
paymentKeyElement.textContent = urlParams.get("paymentKey");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
217
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossEscrow.jsp
Normal file
217
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossEscrow.jsp
Normal file
@@ -0,0 +1,217 @@
|
||||
<%@ page contentType="text/html;charset=euc-kr" %>
|
||||
<%@ page language="java" import="java.security.MessageDigest" %>
|
||||
<%@ page language="java" import="java.net.HttpURLConnection" %>
|
||||
<%@ page language="java" import ="java.net.*" %>
|
||||
<%@ page language="java" import="java.io.*,java.util.*, java.text.*, java.sql.*" %>
|
||||
<%
|
||||
//**************************//
|
||||
//
|
||||
// <20><><EFBFBD>۰<EFBFBD><DBB0><EFBFBD> <20>۽<EFBFBD> JSP <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//**************************//
|
||||
|
||||
String service_url = "";
|
||||
|
||||
// <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
service_url = "http://pgweb.tosspayments.com:7085/pg/wmp/mertadmin/jsp/escrow/rcvdlvinfo.jsp";
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
//service_url = "https://pgweb.tosspayments.com/pg/wmp/mertadmin/jsp/escrow/rcvdlvinfo.jsp";
|
||||
|
||||
String mid ="coddola7NM";
|
||||
String oid ="2024090220413917656";
|
||||
String productid ="";
|
||||
String orderdate ="";
|
||||
String dlvtype ="03";
|
||||
String rcvdate ="";
|
||||
String rcvname ="";
|
||||
String rcvrelation ="";
|
||||
String dlvdate ="202409041501";
|
||||
String dlvcompcode ="CJ";
|
||||
String dlvcomp ="";
|
||||
String dlvno ="789456123";
|
||||
String dlvworker ="";
|
||||
String dlvworkertel ="";
|
||||
String hashdata ="";
|
||||
String mertkey ="";
|
||||
|
||||
|
||||
/* mid = request.getParameter("mid"); // <20><><EFBFBD><EFBFBD>ID -------
|
||||
oid = request.getParameter("oid"); // <20>ֹ<EFBFBD><D6B9><EFBFBD>ȣ --------
|
||||
productid = request.getParameter("productid"); // <20><>ǰID
|
||||
orderdate = request.getParameter("orderdate"); // <20>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
dlvtype = request.getParameter("dlvtype"); // <20><><EFBFBD>ϳ<EFBFBD><CFB3>뱸<EFBFBD><EBB1B8> -----
|
||||
rcvdate = request.getParameter("rcvdate"); // <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rcvname = request.getParameter("rcvname"); // <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>θ<EFBFBD>
|
||||
rcvrelation = request.getParameter("rcvrelation"); // <20><><EFBFBD><EFBFBD>
|
||||
dlvdate = request.getParameter("dlvdate"); // <20><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD> ----- YYYYMMDDhhmm
|
||||
dlvcompcode = request.getParameter("dlvcompcode"); // <20><><EFBFBD><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD>ڵ<EFBFBD> ---------
|
||||
dlvcomp = request.getParameter("dlvcompe"); // <20><><EFBFBD><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD>
|
||||
dlvno = request.getParameter("dlvno"); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ --------
|
||||
dlvworker = request.getParameter("dlvworker"); // <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>
|
||||
dlvworkertel = request.getParameter("dlvworkertel"); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD>ȣ*/
|
||||
|
||||
boolean resp = false;
|
||||
mertkey = "b9297a76f263479ebe5d60d3ac9f4b5a"; //""9fd0de8489b4dc4af0dc40459958cd70"; //<2F>佺<EFBFBD><E4BDBA><EFBFBD≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߱<EFBFBD><DFB1><EFBFBD> <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽñ<D6BD> <20>ٶ<EFBFBD><D9B6>ϴ<EFBFBD>. --------
|
||||
|
||||
|
||||
//******************************//
|
||||
// <20><><EFBFBD>ȿ<EFBFBD> <20><><EFBFBD><EFBFBD>Ű <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
|
||||
//******************************//
|
||||
StringBuffer sb = new StringBuffer();
|
||||
if("03".equals(dlvtype))
|
||||
{
|
||||
// <20><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
sb.append(mid);
|
||||
sb.append(oid);
|
||||
sb.append(dlvdate);
|
||||
sb.append(dlvcompcode);
|
||||
sb.append(dlvno);
|
||||
sb.append(mertkey);
|
||||
|
||||
}
|
||||
else if("01".equals(dlvtype))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sb.append(mid);
|
||||
sb.append(oid);
|
||||
sb.append(dlvtype);
|
||||
sb.append(rcvdate);
|
||||
sb.append(mertkey);
|
||||
}
|
||||
|
||||
byte[] bNoti = sb.toString().getBytes();
|
||||
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
byte[] digest = md.digest(bNoti);
|
||||
|
||||
StringBuffer strBuf = new StringBuffer();
|
||||
|
||||
for (int i=0 ; i < digest.length ; i++)
|
||||
{
|
||||
int c = digest[i] & 0xff;
|
||||
if (c <= 15)
|
||||
{
|
||||
strBuf.append("0");
|
||||
}
|
||||
strBuf.append(Integer.toHexString(c));
|
||||
}
|
||||
|
||||
hashdata = strBuf.toString();
|
||||
out.println("=======hashdata========="+hashdata);
|
||||
//******************************//
|
||||
// <20><><EFBFBD>ȿ<EFBFBD> <20><><EFBFBD><EFBFBD>Ű <20><><EFBFBD><EFBFBD> - <20><>
|
||||
//******************************//
|
||||
|
||||
//******************************//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
|
||||
//******************************//
|
||||
String sendMsg = "";
|
||||
StringBuffer msgBuf = new StringBuffer();
|
||||
msgBuf.append("mid=" + mid + "&" );
|
||||
msgBuf.append("oid=" + oid+"&");
|
||||
msgBuf.append("productid=" + productid + "&" );
|
||||
msgBuf.append("orderdate=" + orderdate + "&" );
|
||||
msgBuf.append("dlvtype=" + dlvtype + "&" );
|
||||
msgBuf.append("rcvdate=" + rcvdate + "&" );
|
||||
msgBuf.append("rcvname=" + rcvname + "&" );
|
||||
msgBuf.append("rcvrelation=" + rcvrelation + "&" );
|
||||
msgBuf.append("dlvdate=" + dlvdate + "&" );
|
||||
msgBuf.append("dlvcompcode=" + dlvcompcode + "&" );
|
||||
msgBuf.append("dlvno=" + dlvno + "&" );
|
||||
msgBuf.append("dlvworker=" + dlvworker + "&" );
|
||||
msgBuf.append("dlvworkertel=" + dlvworkertel + "&" );
|
||||
msgBuf.append("hashdata=" + hashdata );
|
||||
|
||||
sendMsg = msgBuf.toString();
|
||||
out.println("=======sendMsg========="+sendMsg);
|
||||
|
||||
StringBuffer errmsg = new StringBuffer();
|
||||
//******************************//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> - <20><>
|
||||
//******************************//
|
||||
|
||||
//*************************************//
|
||||
// HTTP<54><50> <20><><EFBFBD>۰<EFBFBD><DBB0><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//*************************************//
|
||||
URL url = new URL(service_url);
|
||||
try {
|
||||
out.println("1111");
|
||||
resp = sendRCVInfo(sendMsg,url,errmsg);
|
||||
out.println("222");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
if(resp)
|
||||
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
|
||||
out.println("OK");
|
||||
}
|
||||
else
|
||||
{ //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
|
||||
out.println("FAIL");
|
||||
}
|
||||
%>
|
||||
|
||||
|
||||
<%!
|
||||
//*************************************************
|
||||
// <20>Ʒ<EFBFBD><C6B7>κ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//*************************************************
|
||||
private boolean sendRCVInfo(String sendMsg, URL url, StringBuffer errmsg) throws Exception{
|
||||
OutputStreamWriter wr = null;
|
||||
BufferedReader br = null;
|
||||
HttpURLConnection conn = null;
|
||||
boolean result = false;
|
||||
String errormsg = null;
|
||||
|
||||
try {
|
||||
conn = (HttpURLConnection)url.openConnection();
|
||||
conn.setDoOutput(true);
|
||||
wr = new OutputStreamWriter(conn.getOutputStream());
|
||||
wr.write(sendMsg);
|
||||
wr.flush();
|
||||
for (int i=0; ; i++) {
|
||||
String headerName = conn.getHeaderFieldKey(i);
|
||||
String headerValue = conn.getHeaderField(i);
|
||||
|
||||
if (headerName == null && headerValue == null) {
|
||||
break;
|
||||
}
|
||||
if (headerName == null) {
|
||||
headerName = "Version";
|
||||
}
|
||||
|
||||
errmsg.append(headerName + ":" + headerValue + "\n");
|
||||
}
|
||||
|
||||
|
||||
br = new BufferedReader(new InputStreamReader(conn.getInputStream ()));
|
||||
|
||||
String in;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
while(((in = br.readLine ()) != null )){
|
||||
sb.append(in);
|
||||
}
|
||||
|
||||
errmsg.append(sb.toString().trim());
|
||||
if ( sb.toString().trim().equals("OK")){
|
||||
result = true;
|
||||
}else{
|
||||
errormsg = sb.toString().trim();
|
||||
}
|
||||
|
||||
} catch ( Exception ex ) {
|
||||
errmsg.append("EXCEPTION : " + ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if ( wr != null) wr.close();
|
||||
if ( br != null) br.close();
|
||||
} catch(Exception e){
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
%>
|
||||
238
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayAllC.jsp
Normal file
238
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayAllC.jsp
Normal file
@@ -0,0 +1,238 @@
|
||||
<%@ 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 : PayTossPayC.jsp
|
||||
Description : 토스 전체 결제 창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="kr">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>토스페이먼츠 샘플페이지</title>
|
||||
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
|
||||
<script src="https://js.tosspayments.com/v1/payment"></script>
|
||||
<style>
|
||||
@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css);
|
||||
body {font-family: 'Noto Sans KR', sans-serif;}
|
||||
.mb2 {margin-bottom: 25px;}
|
||||
.gray {color: rgb(78, 89, 104);font-size: 13px;}
|
||||
.red {color: rgb(240, 68, 82);font-size: 13px;}
|
||||
.box_section {background-color: white;border-radius: 10px;box-shadow: 0 10px 20px rgb(0 0 0 / 1%), 0 6px 6px rgb(0 0 0 / 6%);}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-light">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-3"></div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
||||
<h2 style=" margin-top:10px; padding:20px 0px 10px 0px">
|
||||
<img width="45px" src="https://static.toss.im/3d-emojis/u1F60E-apng.png">
|
||||
Tosspayments 결제 데모
|
||||
</h2>
|
||||
|
||||
<div id="info" class="box_section" style=" margin-top:30px; padding:20px 10px 10px 10px">
|
||||
<div class="card-body">
|
||||
<div class="gray">
|
||||
<ul>
|
||||
<li>연동 진행하며 궁금한 점은 Tosspayments Discord 채널로 문의주세요
|
||||
<a href="https://discord.com/invite/VdkfJnknD9" target="_blank"><span
|
||||
class="badge bg-primary">link</span></h5>
|
||||
</li>
|
||||
</ul>
|
||||
</a>
|
||||
</div>
|
||||
</div> <!-- .card-body -->
|
||||
</div> <!-- #info -->
|
||||
|
||||
<div id="requestPayment_form" class="box_section"
|
||||
style="padding: 40px 30px 50px 30px; margin-top:30px; margin-bottom:50px">
|
||||
|
||||
<label class="form-label" for="paymentType">결제수단 <span class="red">필수</span></label>
|
||||
|
||||
<!--
|
||||
<select id="paymentType0" class="form-select form-control-lg mb2">
|
||||
<option value="카드" selected>카드</option>
|
||||
<option value="계좌이체">계좌이체</option>
|
||||
<option value="가상계좌">가상계좌</option>
|
||||
<option value="휴대폰">휴대폰</option>
|
||||
<option value="문화상품권">문화상품권</option>
|
||||
<option value="도서문화상품권">도서문화상품권</option>
|
||||
<option value="게임문화상품권">게임문화상품권</option>
|
||||
<option value="토스페이">토스페이</option>
|
||||
</select>
|
||||
-->
|
||||
<br/>
|
||||
<input type="radio" name="paymentType" id="paymentType1" value="카드" checked/> 카드
|
||||
<input type="radio" name="paymentType" id="paymentType2" value="계좌이체" /> 계좌이체
|
||||
<input type="radio" name="paymentType" id="paymentType3" value="가상계좌" /> 가상계좌
|
||||
<input type="radio" name="paymentType" id="paymentType5" value="토스페이" /> 토스페이
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">주문번호 <span class="gray">(orderId) </span> <span
|
||||
class="red">필수</span></label>
|
||||
<input id="orderId" class="form-control form-control-lg" type="text">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">물품명 <span class="gray">(orderName) </span><span
|
||||
class="red">필수</span></label>
|
||||
<input id="orderName" class="form-control form-control-lg" type="text" value="토스 티셔츠">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">금액 <span class="gray">(amount) <span class="red">필수</span></label>
|
||||
<input id="amount" class="form-control form-control-lg" type="text" value="15000"> <!-- 금액 내 천단위 콤마 X -->
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">구매자명 <span class="gray">(customerName)</span></label>
|
||||
<input id="customerName" class="form-control form-control-lg" type="text" value="김토스">
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<button id="requestPayment" type="button" class="btn btn-lg btn-primary">결제하기</button>
|
||||
<input type="hidden" name="dueDate" id="dueDate" value="3" />
|
||||
</div>
|
||||
|
||||
</div> <!-- #requestPayment_form -->
|
||||
|
||||
<div class="col-md-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
/* ================================= API KEY 세팅 ================================== */
|
||||
//let tossPayments = TossPayments("test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq"); //개발가이드
|
||||
// let tossPayments = TossPayments("test_ck_0RnYX2w5322yZWP2kbBR3NeyqApQ"); //durmj2
|
||||
let tossPayments = TossPayments("test_ck_jZ61JOxRQVEyW1xAnqDVW0X9bAqw"); //디디오랩 테스트키
|
||||
|
||||
// let tossPayments = TossPayments(clientKey);
|
||||
|
||||
//가상계좌 입금기한 설정
|
||||
let dueDate = document.getElementById("dueDate").value;
|
||||
let date = new Date();
|
||||
date.setDate(date.getDate() + (dueDate - 1));
|
||||
let fDueDate = date.toISOString().split('T')[0]+ "T23:59:59+09:00"; // 날짜(YYYY-MM-DD) ISO 8601 형식
|
||||
|
||||
|
||||
|
||||
/* ================================= 결제데이터 ================================== */
|
||||
/* 각 파라미터별 세부 내용은 다음 링크 참고 https://docs.tosspayments.com/reference/js-sdk */
|
||||
let paymentData = ["공통", "카드", "가상계좌", "계좌이체", "휴대폰", "문화상품권", "도서상품권", "게임문화상품권", "토스페이"];
|
||||
let currentURL = window.location.protocol + "//" + window.location.host + window.location.pathname;
|
||||
|
||||
paymentData["공통"] = {
|
||||
"amount": "",
|
||||
"orderId": "",
|
||||
"orderName": "",
|
||||
"customerName": "",
|
||||
"customerEmail": null,
|
||||
// "customerMobilePhone": null,
|
||||
"successUrl": window.location.origin + "/sopmal/pay/tossPaySuccss",
|
||||
"failUrl": window.location.origin + "/sopmal/pay/PayFail"
|
||||
// "windowTarget": "iframe",
|
||||
// "taxFreeAmount": null,
|
||||
// "cultureExpense": false
|
||||
}
|
||||
|
||||
paymentData["카드"] = {
|
||||
"cardCompany": null,
|
||||
"cardInstallmentPlan": null,
|
||||
"maxCardInstallmentPlan": null,
|
||||
"freeInstallmentPlans": null,
|
||||
"useCardPoint": false,
|
||||
"useAppCardOnly": false,
|
||||
"useInternationalCardOnly": false,
|
||||
"flowMode": "DEFAULT",
|
||||
"easyPay": null,
|
||||
"discountCode": null,
|
||||
"appScheme": null
|
||||
}
|
||||
|
||||
paymentData["가상계좌"] = {
|
||||
"dueDate": fDueDate,
|
||||
"cashReceipt": {
|
||||
"type": "미발행"
|
||||
},
|
||||
"useEscrow": true,
|
||||
// "escrowProducts": null,
|
||||
"currency": "KRW"
|
||||
}
|
||||
|
||||
paymentData["계좌이체"] = {
|
||||
"cashReceipt": {
|
||||
"type": "소득공제"
|
||||
},
|
||||
"useEscrow": true//,
|
||||
// "escrowProducts": null
|
||||
}
|
||||
|
||||
paymentData["휴대폰"] = {
|
||||
"mobileCarrier": null // [NOTE] 테스트 환경에서 동작 X
|
||||
}
|
||||
|
||||
|
||||
/* ================== '결제' Btn Event ================== */
|
||||
document.getElementById("requestPayment").addEventListener('click', function () {
|
||||
let paymentType = document.querySelector('input[name="paymentType"]:checked').value; alert(paymentType);
|
||||
let requestJson = initPaymentsData("공통",paymentType);
|
||||
|
||||
tossPayments.requestPayment(paymentType, requestJson)
|
||||
.catch(function (error) {
|
||||
// 응답 처리 (https://docs.tosspayments.com/reference/js-sdk#응답-처리)
|
||||
if (error.code === 'USER_CANCEL') {
|
||||
// 결제 고객이 결제창을 닫았을 때 에러 처리
|
||||
} else if (error.code === 'INVALID_CARD_COMPANY') {
|
||||
// 유효하지 않은 카드 코드에 대한 에러 처리
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
/* ================== 페이지 로딩시 실행 ================== */
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
makeOrderId("TossPaymentsTest");
|
||||
});
|
||||
|
||||
/* ================= 주문번호(OrderID) 자동생성 =================== */
|
||||
function makeOrderId (prefix){
|
||||
let x = Math.floor(Math.random() * 100000000);
|
||||
document.getElementById("orderId").value = prefix + x;
|
||||
}
|
||||
|
||||
/* ============= [공통] + [결제수단] JSON DATA 합치기 ================= */
|
||||
function initPaymentsData(general, paymentType){
|
||||
paymentData[general].amount = document.getElementById("amount").value;
|
||||
paymentData[general].orderId = document.getElementById("orderId").value;
|
||||
paymentData[general].orderName = document.getElementById("orderName").value;
|
||||
paymentData[general].customerName = document.getElementById("customerName").value;
|
||||
|
||||
alert(JSON.stringify(paymentData[paymentType]));
|
||||
|
||||
return Object.assign(paymentData[general], paymentData[paymentType]);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</html>
|
||||
105
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayBrandC.jsp
Normal file
105
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayBrandC.jsp
Normal file
@@ -0,0 +1,105 @@
|
||||
<%@ 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 : PayTossPayBrandC.jsp
|
||||
Description : 토스 브랜드페이 결제창
|
||||
Modification Information
|
||||
|
||||
https://docs.tosspayments.com/reference/brandpay-sdk
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 결제 샘플</title>
|
||||
<!-- 결제위젯 SDK 추가 -->
|
||||
<script src="https://js.tosspayments.com/v1/brandpay"></script>
|
||||
<script>
|
||||
/*
|
||||
구매자 ID입니다. 다른 사용자가 이 값을 알게 되면 악의적으로 사용될 수 있습니다.
|
||||
자동 증가하는 숫자 또는 이메일・전화번호・사용자 아이디와 같이 유추가 가능한 값은 안전하지 않습니다.
|
||||
UUID와 같이 충분히 무작위적인 고유 값으로 생성해주세요.
|
||||
영문 대소문자, 숫자, 특수문자 -, _, =, ., @ 를 최소 1개 이상 포함한 최소 2자 이상 최대 50자 이하의 문자열이어야 합니다.
|
||||
|
||||
customerKey는 고객을 특정하는 값으로 다른 사용자가 이 값을 탈취하면 악의적인 사용을 할 수 있습니다.
|
||||
customerKey의 보안을 강화하기 위해 Access Token을 발급할 때 세션을 통해 customerKey를 비교하여 동일한 고객인지 확인하는 로직을 추가할 수 있습니다.
|
||||
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
var customerKey = ''; // 내 상점에서 고객을 구분하기 위해 발급한 고객의 고유 ID(가이드제공 키)
|
||||
customerKey = 'N0uCSgF8mG1u9aJaAHP73'; //개발가이드제공 키
|
||||
customerKey = uuidv4(); //uuid로 생성 된 키
|
||||
var clientKey = 'test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq'; // 테스트용 클라이언트 키(개발가이드)
|
||||
*/
|
||||
//https://docs.tosspayments.com/reference/brandpay-sdk : sdk 에서 제공되는 키
|
||||
var clientKey = 'test_ck_0RnYX2w5322yZWP2kbBR3NeyqApQ' // 테스트용 클라이언트 키
|
||||
var customerKey = 'xwA1qGmRsDvrz-bVDHHIs' // 내 상점에서 고객을 구분하기 위해 발급한 고객의 고유 ID
|
||||
|
||||
// 2. 브랜드페이 객체 생성
|
||||
var brandpay = BrandPay(clientKey, customerKey, {
|
||||
redirectUrl: window.location.origin +'/callback-auth', //결제할 고객 인증에 사용할 리다이렉트 URL
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- 주문서 영역 -->
|
||||
<div class="wrapper">
|
||||
<div class="box_section" style="padding: 40px 30px 50px 30px; margin-top: 30px; margin-bottom: 50px">
|
||||
<!-- 결제하기 버튼 -->
|
||||
<button class="button" id="payment-button" style="margin-top: 30px" onclick="requestPayment()">결제하기</button>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
/*
|
||||
구매자 ID입니다. 다른 사용자가 이 값을 알게 되면 악의적으로 사용될 수 있습니다.
|
||||
자동 증가하는 숫자 또는 이메일・전화번호・사용자 아이디와 같이 유추가 가능한 값은 안전하지 않습니다.
|
||||
UUID와 같이 충분히 무작위적인 고유 값으로 생성해주세요.
|
||||
영문 대소문자, 숫자, 특수문자 -, _, =, ., @ 를 최소 1개 이상 포함한 최소 2자 이상 최대 50자 이하의 문자열이어야 합니다.
|
||||
|
||||
customerKey는 고객을 특정하는 값으로 다른 사용자가 이 값을 탈취하면 악의적인 사용을 할 수 있습니다.
|
||||
customerKey의 보안을 강화하기 위해 Access Token을 발급할 때 세션을 통해 customerKey를 비교하여 동일한 고객인지 확인하는 로직을 추가할 수 있습니다.
|
||||
*/
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
var customerKey = ''; // 내 상점에서 고객을 구분하기 위해 발급한 고객의 고유 ID(가이드제공 키)
|
||||
customerKey = 'N0uCSgF8mG1u9aJaAHP73'; //개발가이드제공 키
|
||||
customerKey = uuidv4(); //uuid로 생성 된 키
|
||||
var clientKey = 'test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq'; // 테스트용 클라이언트 키(개발가이드)
|
||||
|
||||
// 2. 브랜드페이 객체 생성
|
||||
var brandpay = BrandPay(clientKey, customerKey, {
|
||||
redirectUrl: window.location.origin +'/callback-auth', //결제할 고객 인증에 사용할 리다이렉트 URL
|
||||
})
|
||||
|
||||
function requestPayment() {
|
||||
brandpay
|
||||
.requestPayment({
|
||||
amount: 15000,
|
||||
orderId: 'UbhhTWTbn1QoZ_kI1h4pC',
|
||||
orderName: '토스 티셔츠 외 2건',
|
||||
// 테스트에서는 성공, 실패 페이지가 없어도 URL에서 쿼리 파라미터를 확인할 수 있어요.
|
||||
successUrl: 'http://localhost:8080/success', // 성공 리다이렉트 URL
|
||||
failUrl: 'http://localhost:8080/fail', // 실패 리다이렉트 URL
|
||||
})
|
||||
// 결제창을 띄울수 없는 에러가 발생하면 리다이렉트 URL로 에러를 받을 수 없어요.
|
||||
.catch(function (error) {
|
||||
if (error.code === 'INVALID_ORDER_NAME') {
|
||||
// 유효하지 않은 'orderName' 처리하기
|
||||
} else if (error.code === 'INVALID_ORDER_ID') {
|
||||
// 유효하지 않은 'orderId' 처리하기
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
178
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayC.jsp
Normal file
178
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayC.jsp
Normal file
@@ -0,0 +1,178 @@
|
||||
<%@ 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 : PayTossPayC.jsp
|
||||
Description : 토스결제 모든 결제수단 All(사용안함)
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="https://static.toss.im/icons/png/4x/icon-toss-logo.png" />
|
||||
<link rel="stylesheet" href="<c:url value='/css/style2.css'/>">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스페이먼츠 샘플 프로젝트</title>
|
||||
<!-- 결제창 SDK 추가 -->
|
||||
<script src="https://js.tosspayments.com/v1/payment"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="box_section" style="width: 600px">
|
||||
<h2 style="margin-top: -10px">토스페이먼츠 샘플 프로젝트</h2>
|
||||
<p class="typography--p" style="margin-bottom: 30px">연동 진행하며 궁금한 점은 공식 <a href="https://discord.com/invite/A4fRFXQhRu">Discord 채널</a>로 문의주세요.</p>
|
||||
|
||||
<h4 class="text--left">결제수단</h4>
|
||||
<!-- 라디오 영역 -->
|
||||
<div class="checkable typography--p">
|
||||
<label for="card" class="checkable__label typography--regular">
|
||||
<input type="radio" value="card" id="card" name="method" class="checkable__input" checked />
|
||||
<span class="checkable__label-text" style="padding-right: 25px">카드</span>
|
||||
</label>
|
||||
<label for="easypay" class="checkable__label typography--regular">
|
||||
<input type="radio" value="easypay" id="easypay" name="method" class="checkable__input" />
|
||||
<span class="checkable__label-text" style="padding-right: 25px">간편결제</span>
|
||||
<label for="tossPayments" class="checkable__label typography--regular">
|
||||
<input type="radio" value="tossPayments" id="tossPayments" name="method" class="checkable__input" />
|
||||
<span class="checkable__label-text" style="padding-right: 25px">기타 결제수단</span>
|
||||
</label>
|
||||
</label>
|
||||
</div>
|
||||
<!-- 드롭다운 영역 -->
|
||||
<div class="input radius--m p-select input--medium p-select--medium" style="margin-top: 20px">
|
||||
<span class="input__field p-select__field"> <span class="p-select__field-title" id="selectText"></span></span>
|
||||
<select class="p-select__native" aria-invalid="false" aria-label="결제수단 선택" id="paymentType" name="paymentType">
|
||||
<option disabled="" selected>결제수단 선택</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- 구매자 정보 영역 -->
|
||||
<h4 class="text--left">구매자 정보</h4>
|
||||
<div class="input radius--m input--medium input--default dashboard-emotion-cache-15lad2a">
|
||||
<input class="input__field" placeholder="이름(선택)" aria-invalid="false" aria-label="이름 입력" id="customerName" value="" />
|
||||
</div>
|
||||
|
||||
<div class="input radius--m input--medium input--default dashboard-emotion-cache-15lad2a" style="margin-top: 10px">
|
||||
<input class="input__field" placeholder="이메일 입력(선택)" aria-invalid="false" aria-label="이메일 입력" id="customerEmail" value="" />
|
||||
</div>
|
||||
|
||||
<!-- 결제내역 영역 -->
|
||||
<h4 style="text-align: left; margin-top: 40px">결제내역</h4>
|
||||
<div class="p-grid typography--p">
|
||||
<div class="p-grid-col text--left">결제금액</div>
|
||||
<div class="p-grid-col text--right">15,000원</div>
|
||||
</div>
|
||||
<div class="p-grid typography--p" style="margin-top: 10px">
|
||||
<div class="p-grid-col text--left">주문상품 정보</div>
|
||||
<div class="p-grid-col text--right">토스 티셔츠 외 2건</div>
|
||||
</div>
|
||||
|
||||
<!-- 결제하기 버튼 -->
|
||||
<button class="button" id="payment-button" style="width: 300px">결제하기</button>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/* ================== 결제 수단 섹션 ================== */
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
function setOptions(event) {
|
||||
const options = {
|
||||
tossPayments: ["계좌이체", "가상계좌", "휴대폰", "문화상품권", "도서문화상품권", "게임문화상품권"],
|
||||
card: [
|
||||
"신한",
|
||||
"현대",
|
||||
"삼성",
|
||||
"롯데",
|
||||
"토스뱅크",
|
||||
"하나",
|
||||
"국민",
|
||||
"비씨",
|
||||
"농협",
|
||||
"우리",
|
||||
"카카오뱅크",
|
||||
"케이뱅크",
|
||||
"기업",
|
||||
"씨티",
|
||||
"새마을",
|
||||
"우체국",
|
||||
"수협",
|
||||
"신협",
|
||||
"광주은행",
|
||||
"전북",
|
||||
"산업",
|
||||
"제주",
|
||||
"저축",
|
||||
],
|
||||
easypay: ["토스페이", "네이버페이", "삼성페이", "엘페이", "카카오페이", "핀페이", "페이코", "SSG페이"],
|
||||
};
|
||||
|
||||
paymentType.innerHTML = "<option disabled='' selected>결제수단 선택</option>";
|
||||
selectText.innerHTML = document.querySelector("select[name=paymentType] option:checked").text;
|
||||
options[event.target.id].forEach((e) => (paymentType.innerHTML += `<option value=${e}">${e}</option>`));
|
||||
}
|
||||
|
||||
// 라디오 선택에 따라 드롭다운 수정
|
||||
setOptions({ target: { id: document.querySelector("input[name='method']").value } });
|
||||
document.querySelectorAll("input[name='method']").forEach((input) => input.addEventListener("change", setOptions));
|
||||
|
||||
// 드롭다운 선택에 따라 보여주는 텍스트 수정
|
||||
document.querySelector("select[name=paymentType]").addEventListener("change", function () {
|
||||
selectText.innerHTML = document.querySelector("select[name=paymentType] option:checked").text;
|
||||
});
|
||||
});
|
||||
|
||||
/* ================== SDK 초기화 ================== */
|
||||
const clientKey = "test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq";
|
||||
const tossPayments = TossPayments(clientKey);
|
||||
|
||||
/* ================== '결제' Btn Event ================== */
|
||||
const button = document.getElementById("payment-button");
|
||||
document.getElementById("payment-button").addEventListener("click", function () {
|
||||
// 선택에 따라 파라미터 수정하기
|
||||
const selectedMethod = document.querySelector("input[name='method']:checked").value;
|
||||
const selectedOption = document.querySelector("select[name=paymentType] option:checked").text;
|
||||
const paymentData = initPaymentData(selectedMethod, selectedOption);
|
||||
const paymentMethod = selectedMethod === "tossPayments" ? selectedOption : "카드";
|
||||
|
||||
// 결제 요청하기
|
||||
tossPayments.requestPayment(paymentMethod, paymentData).catch(function (error) {
|
||||
if (error.code === "USER_CANCEL") {
|
||||
// 결제 고객이 결제창을 닫았을 때 에러 처리
|
||||
} else if (error.code === "INVALID_CARD_COMPANY") {
|
||||
// 유효하지 않은 카드 코드에 대한 에러 처리
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ============= [결제 데이터 생성] ================= */
|
||||
function initPaymentData(selectedMethod, selectedOption) {
|
||||
const generateRandomString = () => window.btoa(Math.random()).slice(0, 20);
|
||||
const paymentData = {
|
||||
amount: 15000,
|
||||
orderId: generateRandomString(),
|
||||
orderName: "토스 티셔츠 외 2건",
|
||||
customerName: "박토스",
|
||||
successUrl: window.location.origin + "/jsp/success.jsp",
|
||||
failUrl: window.location.origin + "/jsp/fail.jsp",
|
||||
flowMode: selectedMethod === "tossPayments" ? "DEFAULT" : "DIRECT", // 카드사・간편결제사 결제창은 'DIRECT'로 설정
|
||||
cardCompany: selectedMethod === "card" ? selectedOption : null, // 열고 싶은 카드사 결제창
|
||||
easyPay: selectedMethod === "easypay" ? selectedOption : null, // 열고 싶은 간편결제사 결제창
|
||||
customerName: document.getElementById("customerName").value === "" ? null : document.getElementById("customerName").value,
|
||||
customerEmail: document.getElementById("customerEmail").value === "" ? null : document.getElementById("customerEmail").value,
|
||||
};
|
||||
return paymentData;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
169
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayCashRegC.jsp
Normal file
169
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayCashRegC.jsp
Normal file
@@ -0,0 +1,169 @@
|
||||
<%@ 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 : PayTossPayCashRegC.jsp
|
||||
Description : 현금영수증발급
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 현금영수증 샘플</title>
|
||||
|
||||
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
|
||||
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
|
||||
|
||||
<script>
|
||||
|
||||
/**************************************************************
|
||||
* 현금영수증 발급
|
||||
****************************************************************/
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#content').hide();
|
||||
|
||||
$('#payment-button').on('click', function(event) {
|
||||
const url = '<c:url value="/sopmal/pay/CashReceipt"/>';
|
||||
event.preventDefault(); // 기본 폼 제출 동작 취소
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data:$('#registForm').serialize(),
|
||||
/*dataType: 'json',
|
||||
data:
|
||||
{ //요청
|
||||
amount:18900,
|
||||
orderId:'a4CWyWY5m89PNh7xJwadfsdsf',
|
||||
orderName:'토스 치마 외 2건',
|
||||
customerIdentityNumber:'01023456789',
|
||||
type:'소득공제',
|
||||
taxFreeAmount:0
|
||||
}
|
||||
, */
|
||||
success : function(data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
|
||||
$('#rstTitle').text("현금영수증 발급");
|
||||
$('#receiptKey_1').text(result.response.receiptKey);
|
||||
$('#orderId_1').text(result.response.orderId);
|
||||
$('#orderName_1').text(result.response.orderName);
|
||||
$('#type_1').text(result.response.type);
|
||||
$('#issueNumber_1').text(result.response.issueNumber);
|
||||
$('#receiptUrl_1').text(result.response.receiptUrl);
|
||||
$('#businessNumber_1').text(result.response.businessNumber);
|
||||
$('#transactionType_1').text(result.response.transactionType);
|
||||
$('#amount_1').text(result.response.amount);
|
||||
$('#taxFreeAmount_1').text(result.response.taxFreeAmount);
|
||||
$('#issueStatus_1').text(result.response.issueStatus);
|
||||
$('#failure_1').text(result.response.failure);
|
||||
$('#requestedAt_1').text(result.response.requestedAt);
|
||||
$('#customerIdentityNumber_1').text(result.response.customerIdentityNumber);
|
||||
|
||||
$('#content').show();
|
||||
}
|
||||
console.log('response.receiptKey:', result.response.receiptKey);
|
||||
},
|
||||
error: function(error) {
|
||||
console.error('Error fetching data:', error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$('#cancel-button').on('click', function(event) {
|
||||
const url = '<c:url value="/sopmal/pay/CashReceiptCancel"/>';
|
||||
event.preventDefault(); // 기본 폼 제출 동작 취소
|
||||
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
data:$('#cancelForm').serialize(),
|
||||
success : function(data) {
|
||||
if (data.resBody != null) {
|
||||
const result = JSON.parse(data.resBody.result);
|
||||
$('#rstTitle').text("현금영수증 발급취소");
|
||||
$('#receiptKey_1').text(result.response.receiptKey);
|
||||
$('#orderId_1').text(result.response.orderId);
|
||||
$('#orderName_1').text(result.response.orderName);
|
||||
$('#type_1').text(result.response.type);
|
||||
$('#issueNumber_1').text(result.response.issueNumber);
|
||||
$('#receiptUrl_1').text(result.response.receiptUrl);
|
||||
$('#businessNumber_1').text(result.response.businessNumber);
|
||||
$('#transactionType_1').text(result.response.transactionType);
|
||||
$('#amount_1').text(result.response.amount);
|
||||
$('#taxFreeAmount_1').text(result.response.taxFreeAmount);
|
||||
$('#issueStatus_1').text(result.response.issueStatus);
|
||||
$('#failure_1').text(result.response.failure);
|
||||
$('#requestedAt_1').text(result.response.requestedAt);
|
||||
$('#customerIdentityNumber_1').text(result.response.customerIdentityNumber);
|
||||
|
||||
$('#content').show();
|
||||
}
|
||||
console.log('response.receiptKey:', result.response.receiptKey);
|
||||
},
|
||||
error: function(error) {
|
||||
console.error('Error fetching data:', error);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
현금영수증 발급폼
|
||||
<form id="registForm">
|
||||
금액 : <input type="text" name="amount" id="amount" value="18900"><br/>
|
||||
주문번호 : <input type="text" name="orderId" id="orderId" value="a4CWyWY5m89PNh7xJwadfsdsf"><br/>
|
||||
구매상품 : <input type="text" name="orderName" id="orderName" value="토스 치마 외 2건"><br/>
|
||||
소비자 인증수단 : <input type="text" name="customerIdentityNumber" id="customerIdentityNumber" value="01023456789"><br/>
|
||||
현금영수증 종류에 따라 휴대폰 번호, 사업자등록번호, 현금영수증 카드 번호 등을 입력<br/>
|
||||
현금영수증의 종류 : <input type="text" name="type" id="type" value="소득공제"><br/>
|
||||
소득공제, 지출증빙 중 하나입력<br/>
|
||||
면세 처리된 금액 : <input type="text" name="taxFreeAmount" id="taxFreeAmount" value="0"><br/>
|
||||
<button class="button" id="payment-button" style="margin-top: 30px">현금영수증발급</button>
|
||||
</form>
|
||||
<br/><br/>===========================<br/><br/>
|
||||
현금영수증 취소폼
|
||||
<form id="cancelForm">
|
||||
금액 : <input type="text" name="amount" id="amount" value="18900"> 전액 또는 일부금액(부분취소)<br/>
|
||||
receiptKey : <input type="text" name="receiptKey" id="receiptKey" value="aZDBYqJLQ1GKNbdOvk5rkaLKaOYEn3n07xlzmj6R9e4oPp"><br/>
|
||||
<button class="button" id="cancel-button" style="margin-top: 30px">현금영수증발급 취소</button>
|
||||
</form>
|
||||
<br/><br/>===========================<br/><br/>
|
||||
<div id="content">
|
||||
<br/><span id="rstTitle"></span> 결과출력 <br/>
|
||||
<p>receiptKey: <span id="receiptKey_1"></span></p>
|
||||
<p>orderId: <span id="orderId_1"></span></p>
|
||||
<p>orderName: <span id="orderName_1"></span></p>
|
||||
<p>type: <span id="type_1"></span></p>
|
||||
<p>issueNumber: <span id="issueNumber_1"></span></p>
|
||||
<p>receiptUrl: <span id="receiptUrl_1"></span></p>
|
||||
<p>businessNumber: <span id="businessNumber_1"></span></p>
|
||||
<p>transactionType: <span id="transactionType_1"></span></p>
|
||||
<p>amount: <span id="amount_1"></span></p>
|
||||
<p>taxFreeAmount: <span id="taxFreeAmount_1"></span></p>
|
||||
<p>issueStatus: <span id="issueStatus_1"></span></p>
|
||||
<p>failure: <span id="failure_1"></span></p>
|
||||
<p>requestedAt: <span id="requestedAt_1"></span></p>
|
||||
<p>customerIdentityNumber: <span id="customerIdentityNumber_1"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,96 @@
|
||||
<%@ 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 : PayTossPayEasyC.jsp
|
||||
Description : 간편결제창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<title>구매하기</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||
<link rel="stylesheet" href="./bulma.min.css" />
|
||||
|
||||
<script src="https://js.tosspayments.com/v1"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="hero is-link">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">토스페이먼츠 연동 샘플</h1>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<button class="button is-link" onclick="pay('카드',jsons.card,'토스페이');">토스페이</button>
|
||||
|
||||
<button class="button is-link" onclick="pay('카드',jsons.card,'페이코');">페이코</button> 페이코은 토스에서 지원하지 않는 간편결제라고 함. 확인이 필요함.
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
let amount = 50000;
|
||||
let easyPay = "";
|
||||
|
||||
//let tossPayments = TossPayments("test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq"); //개발가이드
|
||||
let tossPayments = TossPayments("test_ck_0RnYX2w5322yZWP2kbBR3NeyqApQ"); //durmj2
|
||||
|
||||
function pay(method, requestJson,easyPay) {
|
||||
console.log(requestJson);
|
||||
|
||||
requestJson.easyPay=easyPay;
|
||||
|
||||
tossPayments.requestPayment(method, requestJson).catch(function (error) {
|
||||
if (error.code === "USER_CANCEL") {
|
||||
alert("유저가 취소했습니다.");
|
||||
} else {
|
||||
alert(error.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let successUrl = window.location.origin + "/sopmal/pay/tossPaySuccss"; //"http://localhost:18110/sopmal/pay/PayFail",
|
||||
let failUrl = window.location.origin + "/sopmal/pay/PayFail"; //"http://localhost:18110/sopmal/pay/PayFail",
|
||||
let orderId = new Date().getTime();
|
||||
|
||||
let jsons = {
|
||||
card: {
|
||||
amount: amount,
|
||||
orderId: "sample-" + orderId,
|
||||
orderName: "토스 티셔츠 외 2건",
|
||||
successUrl: successUrl,
|
||||
failUrl: failUrl,
|
||||
cardCompany: null,
|
||||
cardInstallmentPlan: null,
|
||||
maxCardInstallmentPlan: null,
|
||||
useCardPoint: false,
|
||||
customerName: "박토스",
|
||||
customerEmail: null,
|
||||
customerMobilePhone: null,
|
||||
taxFreeAmount: null,
|
||||
useInternationalCardOnly: false,
|
||||
flowMode: "DIRECT",
|
||||
discountCode: null,
|
||||
appScheme: null,
|
||||
easyPay: easyPay,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
</html>
|
||||
@@ -0,0 +1,96 @@
|
||||
<%@ 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 : PayTossPayC.jsp
|
||||
Description : 간편결제창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<title>구매하기</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||
<link rel="stylesheet" href="./bulma.min.css" />
|
||||
|
||||
<script src="https://js.tosspayments.com/v1"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="hero is-link">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">토스페이먼츠 연동 샘플</h1>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<button class="button is-link" onclick="pay('카드',jsons.card,'토스페이');">토스페이</button>
|
||||
|
||||
<button class="button is-link" onclick="pay('카드',jsons.card,'페이코');">페이코</button> 페이코은 토스에서 지원하지 않는 간편결제라고 함. 확인이 필요함.
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
let amount = 50000;
|
||||
let easyPay = "";
|
||||
|
||||
let tossPayments = TossPayments("test_ck_D5GePWvyJnrK0W0k6q8gLzN97Eoq");
|
||||
|
||||
function pay(method, requestJson,easyPay) {
|
||||
console.log(requestJson);
|
||||
|
||||
requestJson.easyPay=easyPay;
|
||||
|
||||
tossPayments.requestPayment(method, requestJson).catch(function (error) {
|
||||
if (error.code === "USER_CANCEL") {
|
||||
alert("유저가 취소했습니다.");
|
||||
} else {
|
||||
alert(error.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let path = "/";
|
||||
let successUrl = window.location.origin + path + "/success.jsp";
|
||||
let failUrl = window.location.origin + path + "/fail.jsp";
|
||||
let orderId = new Date().getTime();
|
||||
|
||||
let jsons = {
|
||||
card: {
|
||||
amount: amount,
|
||||
orderId: "sample-" + orderId,
|
||||
orderName: "토스 티셔츠 외 2건",
|
||||
successUrl: successUrl,
|
||||
failUrl: failUrl,
|
||||
cardCompany: null,
|
||||
cardInstallmentPlan: null,
|
||||
maxCardInstallmentPlan: null,
|
||||
useCardPoint: false,
|
||||
customerName: "박토스",
|
||||
customerEmail: null,
|
||||
customerMobilePhone: null,
|
||||
taxFreeAmount: null,
|
||||
useInternationalCardOnly: false,
|
||||
flowMode: "DIRECT",
|
||||
discountCode: null,
|
||||
appScheme: null,
|
||||
easyPay: easyPay,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
</html>
|
||||
140
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayKeyInC.jsp
Normal file
140
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayKeyInC.jsp
Normal file
@@ -0,0 +1,140 @@
|
||||
<%@ 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 : PayTossPayKeyInC.jsp
|
||||
Description : 토스 수기결제창
|
||||
Modification Information
|
||||
|
||||
https://docs.tosspayments.com/guides/payment/key-in
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>토스페이먼츠 샘플페이지</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
|
||||
<script src="https://js.tosspayments.com/v1/payment"></script>
|
||||
<style>
|
||||
@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css);
|
||||
body {font-family: 'Noto Sans KR', sans-serif;}
|
||||
.mb2 {margin-bottom: 25px;}
|
||||
.gray {color: rgb(78, 89, 104);font-size: 13px;}
|
||||
.red {color: rgb(240, 68, 82);font-size: 13px;}
|
||||
.box_section {background-color: white;border-radius: 10px;box-shadow: 0 10px 20px rgb(0 0 0 / 1%), 0 6px 6px rgb(0 0 0 / 6%);}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-light">
|
||||
<form id="registForm" name="registForm" action="/sopmal/pay/tossPayKeyinSuccss">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3"></div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
||||
<h2 style=" margin-top:10px; padding:20px 0px 10px 0px">
|
||||
<img width="45px" src="https://static.toss.im/3d-emojis/u1F60E-apng.png">
|
||||
Tosspayments 수기결제 데모
|
||||
</h2>
|
||||
|
||||
<div id="requestPayment_form" class="box_section"
|
||||
style="padding: 40px 30px 50px 30px; margin-top:30px; margin-bottom:50px">
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">주문번호 <span class="gray">(orderId) </span><span class="red">필수</span></label>
|
||||
<input id="orderId" name="orderId" class="form-control form-control-lg" type="text">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">물품명 <span class="gray">(orderName) </span><span class="red">필수</span></label>
|
||||
<input id="orderName" name="orderName" class="form-control form-control-lg" type="text" value="토스 티셔츠">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">금액 <span class="gray">(amount) </span><span class="red">필수</span></label>
|
||||
<input id="amount" name="amount" class="form-control form-control-lg" type="text" value="15000"> <!-- 금액 내 천단위 콤마 X -->
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">카드번호(16자리) <span class="gray">(cardNumber)</span><span class="red">필수</span></label>
|
||||
<input id="cardNumber" name="cardNumber" class="form-control form-control-lg" type="text" value="5450898000198151">
|
||||
</div>
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">유효기간/년도(2자리) <span class="gray">(cardExpirationYear)</span><span class="red">필수</span></label>
|
||||
<input id="cardExpirationYear" name="cardExpirationYear" class="form-control form-control-lg" type="text" value="26">
|
||||
</div>
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">유효기간/월(2자리) <span class="gray">(cardExpirationMonth)</span><span class="red">필수</span></label>
|
||||
<input id="cardExpirationMonth" name="cardExpirationMonth" class="form-control form-control-lg" type="text" value="01">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">생년월일(6자리) <span class="gray">(customerBirthday/customerIdentityNumber)</span><span class="red">필수</span></label>
|
||||
<input id="customerBirthday" name="customerBirthday" class="form-control form-control-lg" type="text" value="771102"><!-- customerIdentityNumber -->
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">구매자명 <span class="gray">(customerName)</span></label>
|
||||
<input id="customerName" name="customerName" class="form-control form-control-lg" type="text" value="김토스">
|
||||
</div>
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">카드비밀번호(2자리) <span class="gray">(cardPassword)</span></label>
|
||||
<input id="cardPassword" name="cardPassword" class="form-control form-control-lg" type="text" value="31">
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<input type="submit" value="결제하기">
|
||||
</div>
|
||||
|
||||
</div> <!-- #requestPayment_form -->
|
||||
|
||||
<div class="col-md-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
<script>
|
||||
/* ================== 페이지 로딩시 실행 ================== */
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
makeOrderId("TossPaymentsTest");
|
||||
});
|
||||
|
||||
/* ================= 주문번호(OrderID) 자동생성 =================== */
|
||||
function makeOrderId (prefix){
|
||||
let x = Math.floor(Math.random() * 100000000);
|
||||
document.getElementById("orderId").value = prefix + x;
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
String orderId = "keyin-" + String.valueOf(System.currentTimeMillis());
|
||||
String amount = "50000";
|
||||
String cardNumber = "5450898000198151";
|
||||
String cardExpirationYear = "26";
|
||||
String cardExpirationMonth = "01";
|
||||
String cardPassword = "31";
|
||||
String customerBirthday = "771102";
|
||||
String cardInstallmentPlan = "0"; //할부여부 0 일시불, 2~12사이
|
||||
String customerEmail = "customer@email.com";
|
||||
String customerName = "박토스";
|
||||
String orderName = "토스 키인 결제";
|
||||
-->
|
||||
|
||||
|
||||
121
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayModC.jsp
Normal file
121
src/main/webapp/WEB-INF/views/sopmal/ordr/PayTossPayModC.jsp
Normal file
@@ -0,0 +1,121 @@
|
||||
<%@ 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 : PayTossPayModC.jsp
|
||||
Description : 토스 결제취소
|
||||
Modification Information
|
||||
|
||||
https://docs.tosspayments.com/reference#결제-취소
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!-- 토스페이먼츠 JSP 결제 샘플 소스코드 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>토스페이먼츠 샘플페이지</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
|
||||
<script src="https://js.tosspayments.com/v1/payment"></script>
|
||||
<style>
|
||||
@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css);
|
||||
body {font-family: 'Noto Sans KR', sans-serif;}
|
||||
.mb2 {margin-bottom: 25px;}
|
||||
.gray {color: rgb(78, 89, 104);font-size: 13px;}
|
||||
.red {color: rgb(240, 68, 82);font-size: 13px;}
|
||||
.box_section {background-color: white;border-radius: 10px;box-shadow: 0 10px 20px rgb(0 0 0 / 1%), 0 6px 6px rgb(0 0 0 / 6%);}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-light">
|
||||
<form id="registForm" name="registForm" action="/sopmal/pay/tossPayCancel">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3"></div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
||||
<h2 style=" margin-top:10px; padding:20px 0px 10px 0px">
|
||||
<img width="45px" src="https://static.toss.im/3d-emojis/u1F60E-apng.png">
|
||||
Tosspayments 결제취소 데모
|
||||
</h2>
|
||||
|
||||
<div id="requestPayment_form" class="box_section"
|
||||
style="padding: 40px 30px 50px 30px; margin-top:30px; margin-bottom:50px">
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">paymentKey <span class="gray">(paymentKey) </span><span class="red">필수</span></label>
|
||||
<input id="paymentKey" name="paymentKey" class="form-control form-control-lg" type="text">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">취소사유 <span class="gray">(cancelReason) </span><span class="red">필수</span></label>
|
||||
<input id="cancelReason" name="cancelReason" class="form-control form-control-lg" type="text" value="고객 변심">
|
||||
</div>
|
||||
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">부분취소금액 <span class="gray">(cancelAmount) </span>값이 없으면 전액 취소</label>
|
||||
<input id="cancelAmount" name="cancelAmount" class="form-control form-control-lg" type="text" value=""> <!-- 금액 내 천단위 콤마 X -->
|
||||
</div>
|
||||
|
||||
가상계좌 거래에 대해 입금후에 취소하는 경우만 필요
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">환불받을 은행코드 <span class="gray">(bank)</span><span class="red">필수</span></label>
|
||||
<input id="bank" name="bank" class="form-control form-control-lg" type="text" value="">
|
||||
</div>
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">환불받을 계좌번호 <span class="gray">(accountNumber)</span><span class="red">필수</span></label>
|
||||
<input id="accountNumber" name="accountNumber" class="form-control form-control-lg" type="text" value="">
|
||||
</div>
|
||||
<div class="mb2">
|
||||
<label class="form-label" for="amount">환불받을 예금주 <span class="gray">(holderName)</span><span class="red">필수</span></label>
|
||||
<input id="holderName" name="holderName" class="form-control form-control-lg" type="text" value="">
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<input type="submit" value="결제취소하기">
|
||||
</div>
|
||||
|
||||
</div> <!-- #requestPayment_form -->
|
||||
|
||||
<div class="col-md-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
요청
|
||||
String paymentKey = "tviva20240614124436TmYr5";
|
||||
String cancelReason = "고객 변심";
|
||||
|
||||
//부분 취소에서만 사용
|
||||
String cancelAmount = "";
|
||||
|
||||
//refundReceiveAccount - 가상계좌 거래에 대해 입금후에 취소하는 경우만 필요
|
||||
String bank = "20";
|
||||
String accountNumber = "12345678901234";
|
||||
String holderName = "홍길동";
|
||||
|
||||
String secretKey = "test_sk_zXLkKEypNArWmo50nX3lmeaxYG5R:";
|
||||
-->
|
||||
<!-- 응답
|
||||
{response={"country":"KR","orderId":"TossPaymentsTest28705400","cashReceipts":null,"isPartialCancelable":true,"lastTransactionKey":"C683445C7DA1C047B55C68B054592EFC","discount":null,"taxExemptionAmount":0,"suppliedAmount":0,"secret":"ps_Z61JOxRQVE9aRBLGqJaQVW0X9bAq","type":"NORMAL","cultureExpense":false,"taxFreeAmount":0,"requestedAt":"2024-06-14T12:44:36+09:00","currency":"KRW","paymentKey":"tviva20240614124436TmYr5","virtualAccount":null,"checkout":{"url":"https://api.tosspayments.com/v1/payments/tviva20240614124436TmYr5/checkout"},"orderName":"토스 티셔츠","method":"카드","useEscrow":false,"vat":0,"mId":"tvivarepublica","approvedAt":"2024-06-14T12:45:16+09:00","balanceAmount":0,"version":"2022-11-16","easyPay":null,"totalAmount":15000,"cancels":[{"refundableAmount":0,"taxFreeAmount":0,"canceledAt":"2024-07-01T11:35:31+09:00","cancelAmount":15000,"cancelStatus":"DONE","cancelRequestId":null,"transactionKey":"C683445C7DA1C047B55C68B054592EFC","taxExemptionAmount":0,"cancelReason":"고객 변심","receiptKey":null,"easyPayDiscountAmount":0}],"transfer":null,"mobilePhone":null,"failure":null,"receipt":{"url":"https://dashboard.tosspayments.com/receipt/redirection?transactionId=tviva20240614124436TmYr5&ref=PX"},"giftCertificate":null,"cashReceipt":null,"card":{"ownerType":"개인","number":"35641536****705*","amount":15000,"acquireStatus":"READY","isInterestFree":false,"cardType":"신용","approveNo":"00000000","installmentPlanMonths":0,"interestPayer":null,"issuerCode":"11","acquirerCode":"11","useCardPoint":false},"status":"CANCELED"}}
|
||||
-->
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
<%@ 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 : PayTossPaySucsC.jsp
|
||||
Description : 토스결제 결과창
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성
|
||||
--%>
|
||||
<!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 = "";
|
||||
|
||||
if(jsonObject.method == "카드") rstNumber = jsonObject.card.number;
|
||||
if(jsonObject.method == "가상계좌") rstNumber = jsonObject.virtualAccount.accountNumber;
|
||||
if(jsonObject.method == "계좌이체") rstNumber = jsonObject.transfer.bank;
|
||||
if(jsonObject.method == "휴대폰") rstNumber = jsonObject.mobilePhone.customerMobilePhone;
|
||||
|
||||
// JSON 데이터 표시
|
||||
$('#responseMessage').text('${message}');
|
||||
$('#responseOrderName').text(jsonObject.orderId);
|
||||
$('#responseMethod').text(jsonObject.method);
|
||||
$('#responseNumber').text(rstNumber);
|
||||
|
||||
$('#errCode').text(jsonObject.code);
|
||||
$('#errMessage').text(jsonObject.message);
|
||||
});
|
||||
|
||||
</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="responseNumber"></span>
|
||||
</p>
|
||||
|
||||
|
||||
<h1>결제 실패</h1>
|
||||
<p><span id="errMessage"></span></p>
|
||||
<span>에러코드: <span id="errCode"></span></span>
|
||||
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
57
src/main/webapp/WEB-INF/views/sopmal/ordr/PaytestR.jsp
Normal file
57
src/main/webapp/WEB-INF/views/sopmal/ordr/PaytestR.jsp
Normal file
@@ -0,0 +1,57 @@
|
||||
<%@ 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 : PayFailRC.jsp
|
||||
Description : 토스 위젯결제 실패화면
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-06-12 이경숙 최초 생성생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>토스 결제 샘플</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="info" class="box_section" style="width: 600px">
|
||||
<img width="100px" src="https://static.toss.im/lotties/error-spot-no-loop-space-apng.png" />
|
||||
<h2>결제를 실패했어요</h2>
|
||||
|
||||
<div class="p-grid typography--p" style="margin-top: 50px">
|
||||
<div class="p-grid-col text--left"><b>에러메시지</b></div>
|
||||
<div class="p-grid-col text--right" id="message"></div>
|
||||
</div>
|
||||
<div class="p-grid typography--p" style="margin-top: 10px">
|
||||
<div class="p-grid-col text--left"><b>에러코드</b></div>
|
||||
<div class="p-grid-col text--right" id="code"></div>
|
||||
</div>
|
||||
<div class="p-grid">
|
||||
<button class="button p-grid-col5" onclick="location.href='https://docs.tosspayments.com/guides/payment/integration';">연동 문서</button>
|
||||
<button class="button p-grid-col5" onclick="location.href='https://discord.gg/A4fRFXQhRu';" style="background-color: #e8f3ff; color: #1b64da">실시간 문의</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
const codeElement = document.getElementById("code");
|
||||
const messageElement = document.getElementById("message");
|
||||
|
||||
codeElement.textContent = urlParams.get("code");
|
||||
messageElement.textContent = urlParams.get("message");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,27 @@
|
||||
<%@ 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"%>
|
||||
|
||||
<!-- 상품 옵션 변경 모달 -->
|
||||
<div id="option-change-pop" class="modal option">
|
||||
<div class="option-header">
|
||||
<div class="option-header__title">상품옵션</div>
|
||||
</div>
|
||||
<div class="option-content">
|
||||
<div class="nomal-option-content"></div>
|
||||
<div class="stock-option-content"></div>
|
||||
<div class="input-option-content"></div>
|
||||
<div class="add-option-content"></div>
|
||||
</div>
|
||||
<div class="product-total__container">
|
||||
<span class="product-total__text">총 상품금액</span>
|
||||
<span class="product-total__price"></span>
|
||||
</div>
|
||||
<div class="product-btn-container">
|
||||
<button type="button" id="btnChangeOptn" class="btn large theme outline">변경하기</button>
|
||||
</div>
|
||||
</div>
|
||||
1607
src/main/webapp/WEB-INF/views/sopmal/ordr/SpbkPtinR.jsp
Normal file
1607
src/main/webapp/WEB-INF/views/sopmal/ordr/SpbkPtinR.jsp
Normal file
File diff suppressed because it is too large
Load Diff
139
src/main/webapp/WEB-INF/views/sopmal/ordr/SpbkPtinRList.jsp
Normal file
139
src/main/webapp/WEB-INF/views/sopmal/ordr/SpbkPtinRList.jsp
Normal file
@@ -0,0 +1,139 @@
|
||||
<%@ 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"%>
|
||||
|
||||
<script>
|
||||
fn_get_setle_amt(JSON.parse('${jsonData}'));
|
||||
</script>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div class="cartOrder__list">
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: auto;">
|
||||
<col style="width: 120px">
|
||||
<col style="width: 120px">
|
||||
<col style="width: 120px">
|
||||
<%--<col style="width: 80px">--%>
|
||||
<col style="width: 80px;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>상품명</th>
|
||||
<th>주문수량</th>
|
||||
<th>할인금액</th>
|
||||
<th>상품금액</th>
|
||||
<%--<th>배송비</th>--%>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${not empty data.goodsList}">
|
||||
<c:forEach var="goods" items="${data.goodsList}">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="cartItem">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input class="cartCheck" type="checkbox" value="" <c:if test="${goods.goodsSttusCd eq '01'}">checked</c:if> <c:if test="${goods.goodsSttusCd ne '01'}">disabled</c:if> >
|
||||
<span class="check"></span>
|
||||
<span class="control-label"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="cartItem__image">
|
||||
<div class="product-unit-image">
|
||||
<c:if test="${goods.goodsSttusCd eq '02'}">
|
||||
<div class="sold-out">
|
||||
<span>SOLD OUT</span>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${goods.goodsSttusCd eq '03'}">
|
||||
<div class="sold-out">
|
||||
<span>${goods.goodsSttusNm}</span>
|
||||
</div>
|
||||
</c:if>
|
||||
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?goodsInnb=${goods.goodsInnb}"/>">
|
||||
<img src="<c:out value="${cdnurl}${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cartItem__productInfo">
|
||||
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?goodsInnb=${goods.goodsInnb}"/>" class="cartItem__productTitle"><c:out value="${goods.goodsNm}"/></a>
|
||||
<span class="cartItem__productOption"><span class="option-badge">옵션</span> <c:out value="${goods.optn}"/></span>
|
||||
<c:if test="${not empty goods.inputOptnText}">
|
||||
<span class="cartItem__productOption"><c:out value="${goods.inputOptnText}"/></span>
|
||||
</c:if>
|
||||
<c:if test="${goods.goodsSttusCd eq '01'}">
|
||||
<a href="javascript:void(0);" class="change-optn btn xsm outline">옵션변경</a>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" class="cartInnb" value="<c:out value="${goods.cartInnb}"/>"/>
|
||||
<input type="hidden" class="goodsInnb" value="<c:out value="${goods.goodsInnb}"/>"/>
|
||||
<input type="hidden" class="goodsOptnInnb" value="<c:out value="${goods.goodsOptnInnb}"/>"/>
|
||||
<input type="hidden" class="qy" value="<c:out value="${goods.qy}"/>"/>
|
||||
<input type="hidden" class="inputOptn" value="<c:out value="${goods.inputOptn}"/>"/>
|
||||
<input type="hidden" class="inputOptnText" value="<c:out value="${goods.inputOptnText}"/>"/>
|
||||
<input type="hidden" class="optnRelateNb" <c:if test="${goods.optnTy eq '03'}">value="<c:out value="${goods.goodsInnb}"/></c:if>"/>
|
||||
<input type="hidden" class="optnTy" value="<c:out value="${goods.optnTy}"/>"/>
|
||||
<input type="hidden" class="optnEssntlAt" value="<c:out value="${goods.optnEssntlAt}"/>"/>
|
||||
</td>
|
||||
<td>
|
||||
<c:if test="${goods.goodsSttusCd eq '01'}">
|
||||
<div class="cartItem__counter">
|
||||
<div class="product-count__amount-counter">
|
||||
<button type="button" id="minus" class="product-count__amount-btn minus"><span class="visually-hidden">감소</span></button>
|
||||
<label>
|
||||
<input class="product-count__amount-number" type="number" value="<c:out value="${goods.qy}"/>"/>
|
||||
</label>
|
||||
<button type="button" id="plus" class="product-count__amount-btn plus"><span class="visually-hidden">추가</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__discountPrice"><span class="cartItem__discountMinus">(-)</span><span class="comma"><fmt:formatNumber value="${goods.dscntAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cartItem__beforePrice"><span class="comma"><fmt:formatNumber value="${goods.subCnsmrpric}" pattern="#,###"/></span>원</span>
|
||||
<span class="cartItem__afterPrice"><span class="comma"><fmt:formatNumber value="${goods.dscntApplyAmt}" pattern="#,###"/></span><span class="priceUnit">원</span></span>
|
||||
</td>
|
||||
<%--
|
||||
<td>
|
||||
<span class="cartItem__shippingFee"><span class=" comma">3000</span><span class="priceUnit">원</span></span>
|
||||
</td>
|
||||
--%>
|
||||
<td>
|
||||
<button type="button" class="delete-goods cartItem__delete">
|
||||
<span class="visually-hidden">선택 삭제</span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<div class="table__no-result">
|
||||
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="">
|
||||
<p class="table__no-result-text">장바구니에 담긴 상품이 없습니다.</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cartOrder__info">
|
||||
<p class="textInfo"><i class="icon icon_textInfo--sm"></i>배송비는 주문결제 시 발생합니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user