فهرست منبع

Merge branch 'develop' into eskim

eskim 5 سال پیش
والد
کامیت
a106f875cb

+ 81 - 43
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -58,7 +58,7 @@ public class TsfCartService {
 	 * @param params
 	 */
 	public void saveCartInfo(Collection<Cart> params) {
-		Cart cart = new Cart();
+		String goodsType = "";
 
 		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
 		Login login = new Login();
@@ -70,10 +70,6 @@ public class TsfCartService {
 
 		// 장바구니 상품 및 재고 가능 여부 체크
 		for (Cart param : params) {
-			cart.setJsessionId(TscSession.getSessionId());
-			cart.setRegNo(login.getCustNo());
-			cart.setUpdNo(login.getCustNo());
-			cart.setCustNo(login.getCustNo());
 
 			// 상품 마스터 정보 확인
 			Goods goods = new Goods();
@@ -102,24 +98,22 @@ public class TsfCartService {
 				throw new IllegalArgumentException(stockResult);
 			}
 
-			cart.setGoodsCd(param.getGoodsCd());
-
 			// 장바구니에 있는 같은 상품(옵션이 상이해도 같은 상품이므로 상품 전체 조회)
 			int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
 			if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
 				throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
 			}
 
-			cart = param;
+			goodsType = param.getGoodsType();
 		}
 
 		// 장바구니 정보 수정
-		if (cart.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {
+		if (goodsType.equals(TscConstants.GoodsType.SET.value())) {
 			// 세트상품일 경우
 			saveSetTypeCartInfo(params);
 		} else {
 			// 세트 상품이 아닐 경우
-			saveNormalDealCartInfo(params.iterator().next());
+			saveNormalDealCartInfo(params);
 		}
 	}
 
@@ -169,8 +163,12 @@ public class TsfCartService {
 		cart.setGoodsType(params.iterator().next().getGoodsType());
 		cart.setItemCdSql(sb.toString());
 
+		Collection<Cart> cartSqList = null;
+
 		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
 			cart.setCartGb(TscConstants.CartGb.CART.value());
+			cartSqList = cartDao.selectHasSetItemCartList(cart);
+			// 같은 장바구니 상품 확인
 		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
 				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
@@ -181,9 +179,6 @@ public class TsfCartService {
 			cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
 		}
 
-		// 같은 장바구니 상품 확인
-		Collection<Cart> cartSqList = cartDao.selectHasSetItemCartList(cart);
-
 		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
 			if (cartSqList.size() > 1) {						// 장바구니 조회 결과 이상시 insert or select 수정 필요
 				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
@@ -195,6 +190,9 @@ public class TsfCartService {
 		} else {
 			cartDao.insertCartInfo(cart);					// 장바구니 마스터 정보 저장
 			cartDao.insertCartHst(cart);                    // 장바구니 이력 정보 저장
+
+			TsfSession.setAttribute("cartSqArr", cart.getCartSq()+"");
+
 			for (Cart param : params) {
 				param.setCartSq(cart.getCartSq());
 				param.setRegNo(cart.getRegNo());
@@ -203,55 +201,81 @@ public class TsfCartService {
 
 				cartDao.insertCartDetailInfo(param);		// 장바구니 상세 저장
 				cartDao.insertCartDetailHst(param);         // 장바구니 상세 이력 저장
+
+				log.info("CHECK INFO PARAM :::: {}", param.toString());
 			}
 		}
 	}
 
 	@Transactional("shopTxnManager")
-	public void saveNormalDealCartInfo(Cart param) {
+	public void saveNormalDealCartInfo(Collection<Cart> params) {
+		Cart cart = new Cart();
 		// 로그인 정보
 		if(TsfSession.isLogin()) {
 			Login login = TsfSession.getInfo();
-			param.setRegNo(login.getCustNo());
-			param.setCustNo(login.getCustNo());
-			param.setUpdNo(login.getCustNo());
+			cart.setCustNo(login.getCustNo());
 		} else {
-			param.setCustNo(0);
-			param.setRegNo(0);
-			param.setUpdNo(0);
+			cart.setCustNo(0);
 		}
-		param.setJsessionId(TscSession.getSessionId());
-
+		cart.setJsessionId(TscSession.getSessionId());
 
-		if ("C".equals(param.getCartGb())) {
-			param.setCartGb(TscConstants.CartGb.CART.value());
-		} else if ("O".equals(param.getCartGb())) {
+		if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "C".equals(params.iterator().next().getCartGb())) {
+			cart.setCartGb(TscConstants.CartGb.CART.value());
+		} else if (!StringUtils.isEmpty(params.iterator().next().getCartGb()) && "O".equals(params.iterator().next().getCartGb())) {
 			if ("P".equals(TsfSession.getFrontGb())) {
-				param.setCartGb(TscConstants.CartGb.PC_ORDER.value());
+				cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
 			} else {
-				param.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
+				cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
 			}
 		} else {
-			param.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
+			cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
 		}
 
-		// 같은 장바구니 상품 확인
-		Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
+		// 세션 추가용 변수
+		List<String> sendCartSqList = new ArrayList<String>();
+		for(Cart item : params) {
+			item.setCartGb(cart.getCartGb());
+			item.setCustNo(cart.getCustNo());
+			item.setRegNo(cart.getCustNo());
+			item.setUpdNo(cart.getCustNo());
+			item.setJsessionId(cart.getJsessionId());
 
-		if (cartSqList != null && cartSqList.size() > 0) {		// 장바구니 기존재
-			if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
-				throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+			// 같은 장바구니 상품 확인
+			Collection<Integer> cartSqList = null;
+			if(TscConstants.CartGb.CART.value().equals(cart.getCartGb())) {
+				cartSqList = cartDao.selectHasNormalDealItemCartList(item);
+			}
+
+			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
+				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+				} else {
+					item.setCartSq(cartSqList.iterator().next());
+					cartDao.updateCartInfo(item);
+					cartDao.insertCartHst(item);                // 장바구니 수정 이력 저장
+				}
 			} else {
-				param.setCartSq(cartSqList.iterator().next());
-				cartDao.updateCartInfo(param);
-				cartDao.insertCartHst(param);                // 장바구니 수정 이력 저장
+				cartDao.insertCartInfo(item);					// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(item);					// 장바구니 수정 이력 저장
+				cartDao.insertCartDetailInfo(item);				// 장바구니 상세 저장
+				cartDao.insertCartDetailHst(item);				// 장바구니 수정 이력 저장
+
+				sendCartSqList.add(item.getCartSq() + "");
 			}
-		} else {
-			cartDao.insertCartInfo(param);					// 장바구니 마스터 정보 저장
-			cartDao.insertCartHst(param);                   // 장바구니 수정 이력 저장
-			cartDao.insertCartDetailInfo(param);			// 장바구니 상세 저장
-			cartDao.insertCartDetailHst(param);             // 장바구니 수정 이력 저장
 		}
+
+		StringBuilder cartSqComma = new StringBuilder();
+
+		int i = 0;
+		for(String cartSq : sendCartSqList) {
+			if(i > 0) {
+				cartSqComma.append(",");
+			}
+			cartSqComma.append(cartSq);
+			i++;
+		}
+
+		TsfSession.setAttribute("cartSqArr", cartSqComma.toString());
 	}
 
 	// 장바구니 상품 리스트 조회 서비스
@@ -863,8 +887,22 @@ public class TsfCartService {
 				}
 			}
 		} else {
-			// TODO 세트가 아닐 경우 처리
-			int a = 0;
+			param.setCartGb(TscConstants.CartGb.CART.value());
+			Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
+			if (cartSqList != null && cartSqList.size() > 0) {			// 장바구니 기존재
+				if (cartSqList.size() > 1) {							// 장바구니 조회 결과 이상시 insert or select 수정 필요
+					throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
+				} else {
+					param.setCartSq(cartSqList.iterator().next());
+					cartDao.updateCartInfo(param);
+					cartDao.insertCartHst(param);                // 장바구니 수정 이력 저장
+				}
+			} else {
+				/*cartDao.insertCartInfo(param);					// 장바구니 마스터 정보 저장
+				cartDao.insertCartHst(param);                   // 장바구니 수정 이력 저장
+				cartDao.insertCartDetailInfo(param);			// 장바구니 상세 저장
+				cartDao.insertCartDetailHst(param);             // 장바구니 수정 이력 저장*/
+			}
 		}
 	}
 }

+ 25 - 11
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -17,11 +17,15 @@ import org.springframework.transaction.annotation.Transactional;
 import org.thymeleaf.util.StringUtils;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
+import com.style24.core.biz.service.TscNaverPayService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.KakaoPay;
+import com.style24.persistence.domain.NaverPay;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
@@ -42,6 +46,12 @@ public class TsfOrderService {
 
 	@Autowired
 	private TscKcpService coreKcpService;
+	
+	@Autowired
+	private TscKakaoPayService coreKakaoPayService;
+	
+	@Autowired
+	private TscNaverPayService coreNaverPayService;
 
 	/**
 	 * 마이페이지 검색 기간 영역 설정
@@ -237,9 +247,9 @@ public class TsfOrderService {
 			if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
 				result = coreKcpService.kcpPayRequest(param, request, response);
 			} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
-				result = null;
+				result = coreKakaoPayService.approveKakaoPayment(param);
 			} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
-				result = null;
+				result = coreNaverPayService.approveNaverPayment(param);
 			} else {
 				throw new IllegalArgumentException("결제 수단이 잘못 입력되었습니다. 새로고침 후 다시 시도해주세요.");
 			}
@@ -250,12 +260,16 @@ public class TsfOrderService {
 
 			if(updatePaymentForOrderFinished(result) < 1) {
 				// TODO 전체 취소 로직 추가
-				coreKcpService.kcpPayRollBack(result, request);
-
-				throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
+				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
+					coreKcpService.kcpPayRollBack(result, request);
+				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
+					coreKakaoPayService.cancelKakaoPayment(param);
+				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
+					coreNaverPayService.cancelNaverPayment(param);
+				} else {
+					throw new IllegalArgumentException("결제 정보 저장 실패. 새로고침 후 다시 시작해주세요.");
+				}
 			}
-
-			coreKcpService.kcpPayRollBack(result, request);
 		} catch(Exception e) {
 			e.printStackTrace();
 			throw new IllegalArgumentException(e.getMessage());
@@ -335,11 +349,11 @@ public class TsfOrderService {
 	public Payment setPgDataInfo(Order order) {
 		Payment payment = new Payment();
 		if(TscConstants.PgGb.KAKAO.value().equals(order.getPgGb())) {			// 카카오페이
-			// TODO 카카오페이 데이터 세팅
-			payment = null;
+			KakaoPay kakaoPay = coreKakaoPayService.kakaoPaymentReady(order);
+			payment = coreKakaoPayService.setKakaoOrderData(kakaoPay, order);
 		} else if(TscConstants.PgGb.NAVER.value().equals(order.getPgGb())) {	// 네이버페이
-			// TODO 네이버페이 데이터 세팅
-			payment = null;
+			NaverPay naverPay = coreNaverPayService.naverPaymentReady(order);
+			payment = coreNaverPayService.setNaverOrderData(naverPay);
 		} else if(TscConstants.PgGb.KCP.value().equals(order.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(order.getPgGb())){	// KCP, PAYCO
 			payment = coreKcpService.setKcpOrderData(order);
 		} else {

+ 3 - 0
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -78,6 +78,7 @@ public class TsfCartController extends TsfBaseController {
 	 * 장바구니 등록
 	 * @param param
 	 * goodsCd : 상품코드 (세트 : 세트상품코드, 딜상품 : 원상품코드, 일반상품 : 상품코드)
+	 * dealGoodsCd : 딜상품코드
 	 * itemCd : 구성상품코드 (세트. 세트 아닐 경우 입력X)
 	 * optCd : 옵션코드
 	 * goodsType : 상품타입 (공통코드 G026)
@@ -132,6 +133,8 @@ public class TsfCartController extends TsfBaseController {
 		model.addAttribute("delvCartList", order.getDelvCartList());
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
 
+		log.info("CHECK SESSION CARTSQARR INFO ::: {}", TsfSession.getAttribute("cartSqArr"));
+
 		return super.getDeviceViewName("cart/cartListAjaxForm");
 	}
 

+ 43 - 55
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -166,7 +166,7 @@ public class TsfOrderController extends TsfBaseController {
 		
 		mav.addObject("goodsTotCnt" 		, delvOrderMap.get("goodsTotCnt"));			// 총상품건수
 		mav.addObject("delvAllCartList" 	, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
-		mav.addObject("delvCartGoodsList" 	, delvOrderMap.get("delvCartGoodsList"));	// 장바구니상품목록 sort
+		mav.addObject("delvFeeCdList" 		, delvOrderMap.get("delvFeeCdList"));		// 배송단위목록
 		mav.addObject("sumDelvFee" 			, delvOrderMap.get("sumDelvFee"));			// 배송비합계
 
 		// 4.2 할인정보(상품금액, 즉시할인, 다다익선, 선포인트, 적립예정포인트) 
@@ -774,13 +774,26 @@ public class TsfOrderController extends TsfBaseController {
 	 * @author xodud1202
 	 * @since 2021. 03. 04
 	 */
-	@PostMapping("/create/order")
-	public ModelAndView createOrder(Order order) {
+	@PostMapping("/create/preOrder")
+	@ResponseBody
+	public ModelAndView createOrder(@RequestBody Order order) {
 		ModelAndView mav = new ModelAndView();
-		// TODO 주문 시작 데이터 처리
-
-
-
+		
+		// TODO 주문 시작 데이터 처리 
+		// 2021.03.09 주문데이타 등록 
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			order.setCustNo(0);
+		}
+		
+		order.setFrontGb(TsfSession.getFrontGb());
+		
+		// 2. 주문기본정보등록
+		coreOrderService.createPreOrder(order);
+		
+		
 
 
 
@@ -789,12 +802,23 @@ public class TsfOrderController extends TsfBaseController {
 		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
 		// 선택 데이터
 		// ordEmail = 주문자메일, ordTelno = 전화번호
+		
+		/* 
+		=== 카카오페이 & 네이버페이 파라메터 ===
+		ordNo = 주문번호
+		custNo = 고객번호
+		goodsNm = 상품명
+		ordGoodsQty = 주문상품수량
+		payAmt = 결제금액
+		======================
+		*/
 		Payment payment = orderService.setPgDataInfo(order);
 
 		mav.addObject("payment", payment);
 		//model.addAttribute("payment", payment);
 
 		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+
 		return mav;
 		//return super.getDeviceViewName("pg/kcpOrder");
 	}
@@ -854,16 +878,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/kakao/payment/approve")
 	@ResponseBody
-	public GagaMap approveKakaoPayment(@RequestBody Order order) {
+	public GagaMap approveKakaoPayment(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("payment", kakaoPayService.approveKakaoPayment(order));
+		result.set("payment", kakaoPayService.approveKakaoPayment(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -879,16 +897,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/kakao/payment/order")
 	@ResponseBody
-	public GagaMap kakaoPaymentOrder(@RequestBody Order order) {
+	public GagaMap kakaoPaymentOrder(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("kakaoPay", kakaoPayService.getKakaoPaymentOrder(order));
+		result.set("kakaoPay", kakaoPayService.getKakaoPaymentOrder(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -904,16 +916,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/kakao/payment/cancel")
 	@ResponseBody
-	public GagaMap cancelKakaoPayment(@RequestBody Order order) {
+	public GagaMap cancelKakaoPayment(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("kakaoPay", kakaoPayService.cancelKakaoPayment(order));
+		result.set("kakaoPay", kakaoPayService.cancelKakaoPayment(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -974,16 +980,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/naver/payment/approve")
 	@ResponseBody
-	public GagaMap approveNaverPayment(@RequestBody Order order) {
+	public GagaMap approveNaverPayment(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("payment", naverPayService.approveNaverPayment(order));
+		result.set("payment", naverPayService.approveNaverPayment(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -999,16 +999,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/naver/payment/order")
 	@ResponseBody
-	public GagaMap naverPaymentOrder(@RequestBody Order order) {
+	public GagaMap naverPaymentOrder(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("naverPay", naverPayService.getNaverPaymentOrder(order));
+		result.set("naverPay", naverPayService.getNaverPaymentOrder(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -1024,16 +1018,10 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/naver/payment/cancel")
 	@ResponseBody
-	public GagaMap cancelNaverPayment(@RequestBody Order order) {
+	public GagaMap cancelNaverPayment(@RequestBody Payment payment) {
 		GagaMap result = new GagaMap();
 
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setCustNo(0);
-		} else {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		}
-
-		result.set("naverPay", naverPayService.cancelNaverPayment(order));
+		result.set("naverPay", naverPayService.cancelNaverPayment(payment));
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;

+ 15 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -66,11 +66,19 @@
 	<select id="selectHasNormalDealItemCartList" parameterType="Cart" resultType="int">
 		/* TsfCart.selectHasNormalDealItemCartList : 장바구니 등록 일반 or 딜 상품 확인 */
 		SELECT C.CART_SQ
-		  FROM TB_CART C
-		 WHERE 1=1
-		   AND C.CUST_NO = #{custNo}
-		   AND C.JSESSION_ID = #{jsessionId}
-		   AND C.GOODS_CD = #{goodsCd}
+		FROM   TB_CART C
+		INNER  JOIN TB_CART_DETAIL CD
+		ON     C.CART_SQ = CD.CART_SQ
+		WHERE  1=1
+		<if test="custNo != null and custNo > 0">
+		AND    C.CUST_NO = #{custNo}
+		</if>
+		<if test="custNo == null or custNo == 0">
+		AND    C.JSESSION_ID = #{jsessionId}
+		</if>
+		AND    C.GOODS_CD = #{goodsCd}
+		AND    C.CART_GB = #{cartGb}
+		AND    CD.OPT_CD = #{optCd}
 	</select>
 
 	<!-- 장바구니 신규 등록 -->
@@ -122,6 +130,7 @@
 				, PRODUCT_NO
 				, PRODUCT_CODE
 				, ITEM_QTY
+				, ITEM_PRICE
 				, DISP_ORD
 				, REG_NO
 				, REG_DT
@@ -137,6 +146,7 @@
 			 , O.PRODUCT_NO
 			 , O.PRODUCT_CODE
 			 , IFNULL(GC.QTY, 1)
+			 , IFNULL(GC.COMPS_CURR_PRICE, G.CURR_PRICE)
 			 , IFNULL(GC.DISP_ORD, 1)						<!-- TB_GOODS_COMPOSE DISP_ORD 따라 CART_DETAIL도 동일하게 진행 -->
 			 , #{regNo}
 			 , CURRENT_TIMESTAMP

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -337,7 +337,7 @@
 			, CARD_TYPE = #{cardType}
 			, CARD_NM = #{cardNm}
 			, CARD_MIPS = #{cardMips}
-			, CARD_PCABLE_YN = #{cardPcableYn}
+			, CARD_PCABLE_YN = IFNULL(#{cardPcableYn}, 'Y')
 			, VA_NO = #{vaNo}
 			, VA_BANK = #{vaBank}
 			, VA_DEADLINE = DATE_FORMAT(#{vaDeadline} , '%Y%m%d%H%i%S')

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -177,7 +177,7 @@
 		AND CASE
 			WHEN TCHP.REVIEW_SQ IS NULL THEN 1
 			WHEN TCHP.REVIEW_SQ IS NOT NULL AND TR.REVIEW_SQ IS NOT NULL THEN 1
-		END > 0		
+		END <![CDATA[>]]> 0		
 		AND TCHP.OCCUR_GB IN ('G069_12','G069_13','G069_20','G069_30','G069_40','G069_42','G069_90','G069_99')
 		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}

+ 2 - 0
src/main/resources/config/application.yml

@@ -60,6 +60,7 @@ naverPay:
     clientId: 8TSWSyJMMUvOLKUySQx6
     clientSecret: oGXnO7cMD1
     paymentReadyUrl: /naverpay/payments/v2/reserve
+    paymentRedirectUrl: /order/naver/payment/request
     approvePaymentUrl: /naverpay/payments/v2/apply/payment
     paymentOrderUrl: /naverpay/payments/v2/list/history
     cancelPaymentUrl: /naverpay/payments/v1/cancel
@@ -91,6 +92,7 @@ kakao:
     authorizeUrl: https://kauth.kakao.com/oauth/authorize
     unlinkUrl : https://kapi.kakao.com/v1/user/unlink
     paymentReadyUrl : https://kapi.kakao.com/v1/payment/ready
+    paymentRedirectUrl : /order/kakao/payment/request
     approvePaymentUrl : https://kapi.kakao.com/v1/payment/approve
     paymentOrderUrl : https://kapi.kakao.com/v1/payment/order
     cancelPaymentUrl : https://kapi.kakao.com/v1/payment/cancel

+ 10 - 4
src/main/webapp/WEB-INF/views/web/cart/cartChangeOptionPopupWeb.html

@@ -108,7 +108,7 @@
 												<th:block th:if="${color.cartColorNm != null}">
 													<th:block th:each="size, index : ${color.cartSizeList}">
 														<div>
-															<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty < size.currStockQty}">
+															<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
 															<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
 														</div>
 													</th:block>
@@ -217,12 +217,18 @@
 				, goodsQty : $("input[name=goodsQty]").val()
 			}
 		} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
-			alert("자사 일반");
+			data = {
+				  cartSq : cart.cartSq
+				, goodsCd : cart.goodsCd
+				, goodsType : cart.goodsType
+				, optCd : $(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val()
+				, goodsQty : $("input[name=goodsQty]").val()
+			}
 		} else {
 			alert("입점업체");
 		}
 
-		$.ajax( {
+		/*$.ajax( {
 			type: "POST",
 			url : '/cart/change/option',
 			contentType: 'application/json',
@@ -233,7 +239,7 @@
 				$(".closeCartOptionModal").trigger("click");
 				getCartList();
 			}
-		});
+		});*/
 	}
 
 	$(".closeCartOptionModal").on("click", function() {

+ 89 - 55
src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html

@@ -142,12 +142,17 @@
 												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm"><span>즉시구매</span></button>
 											</p>
 											<p class="util">
-                                        <span>
-                                            <button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active"><span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span></button>
-                                        </span>
+										<span>
+											<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}">
 												<span>
-                                            <button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|"><span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span></button>
-                                        </span>
+													<i class="ico ico_like2"></i>
+													<em class="sr-only">관심상품 추가</em>
+												</span>
+											</button>
+										</span>
+												<span>
+											<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|"><span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span></button>
+										</span>
 											</p>
 										</div>
 									</div>
@@ -272,12 +277,12 @@
 												<button th:if="${cart.soldoutYn.equals('N')}" type="button" class="btn btn_primary btn_sm"><span>즉시구매</span></button>
 											</p>
 											<p class="util">
-                                        <span>
-                                            <button type="button" class="btn_favorite"><span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span></button>
-                                        </span>
+										<span>
+											<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}"><span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span></button>
+										</span>
 												<span>
-                                            <button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|"><span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span></button>
-                                        </span>
+											<button type="button" class="btn_delete" th:onclick="|deleteCart(${cart.cartSq})|"><span><i class="ico ico_trash"></i><em class="sr-only">상품삭제</em></span></button>
+										</span>
 											</p>
 										</div>
 									</div>
@@ -308,8 +313,8 @@
 			<div class="tit_box">
 				<h3>결제 정보</h3>
 				<span>
-                <em class="number" th:text="${order.totCartCnt}"></em>개의 상품
-            </span>
+				<em class="number" th:text="${order.totCartCnt}"></em>개의 상품
+			</span>
 			</div>
 			<div class="od_amount_box">
 				<dl>
@@ -364,10 +369,10 @@
 						<span class="availStdt"></span>&nbsp;~&nbsp;<span class="availEddt"></span>
 					</p>
 					<button type="button" class="btn_close_code" onClick="cancelCartCpn()">
-                    <span>
-                        <i class="ico ico_close1"></i>
-                        <em class="sr-only">닫기</em>
-                    </span>
+					<span>
+						<i class="ico ico_close1"></i>
+						<em class="sr-only">닫기</em>
+					</span>
 					</button>
 				</div>
 				<div class="info_coupon">
@@ -421,45 +426,74 @@
 		notApplyTmtbAreaList();
 
 		/* 세트상품 장바구니 */
-		/* let compsList = [];
+		/*let compsList = [];
 		let temp = new Object;
 		temp.goodsCd = "STYS00000042";
 		temp.itemCd = "14373746";
 		temp.optCd = "베이지110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
 		temp.planDtlSq = "123";
 		compsList.push(temp);
-
+		temp = new Object;
 		temp.goodsCd = "STYS00000042";
 		temp.itemCd = "14373769";
 		temp.optCd = "블루110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
 		temp.planDtlSq = "123";
 		compsList.push(temp);
-
+		temp = new Object;
 		temp.goodsCd = "STYS00000042";
 		temp.itemCd = "14373770";
 		temp.optCd = "아이보리110";
 		temp.goodsQty = 1;
 		temp.goodsType = "G056_S";
-		temp.cartGb = "C";
+		temp.cartGb = "O";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		cfnAddCart(compsList);*/
+
+		/*let compsList = [];
+		let temp = new Object;
+		temp.goodsCd = "14373686";
+		temp.optCd = "챠콜그레이150";
+		temp.goodsQty = 2;
+		temp.goodsType = "G056_D";
+		temp.dealGoodsCd = "STYD000000025"
+		temp.cartGb = "O";
+		temp.afLinkCd = "afLinkCd";
+		temp.ithrCd = "G027_ZZZ";
+		temp.contentsLoc = "G028_YYY";
+		temp.planDtlSq = "123";
+		compsList.push(temp);
+
+		temp = new Object;
+		temp.goodsCd = "14373710";
+		temp.optCd = "L핑크130";
+		temp.goodsQty = 3;
+		temp.goodsType = "G056_D";
+		temp.dealGoodsCd = "STYD000000025"
+		temp.cartGb = "O";
 		temp.afLinkCd = "afLinkCd";
 		temp.ithrCd = "G027_ZZZ";
 		temp.contentsLoc = "G028_YYY";
 		temp.planDtlSq = "123";
 		compsList.push(temp);
 
-		cfnAddCart(compsList); */
+		cfnAddCart(compsList);*/
 	});
 
 	function notApplyTmtbAreaList() {
@@ -480,7 +514,7 @@
 				notApplyQtyTmtbList.push(obj);
 			}
 
-			if($(this).parent().find("input[name=applyAmtSectionYn]").val() == "N") {       // 다다익선 금액은 기본상품만 가져오면됨 (N은 기본상품에 걸려있음)
+			if($(this).parent().find("input[name=applyAmtSectionYn]").val() == "N") {	   // 다다익선 금액은 기본상품만 가져오면됨 (N은 기본상품에 걸려있음)
 				let obj = new Object();
 				obj.tmtbSq = $(this).parent().find("input[name=amtTmtbSq]").val();
 				obj.tmtbNm = $(this).parent().find("input[name=amtTmtbNm]").val();
@@ -548,41 +582,41 @@
 			for(let j = 0 ; j < tmtb.goodsList.length ; j++) {
 				let goods = tmtb.goodsList[j];
 				tmtbHtml += '<div class="item_gd">\n' +
-					'                <figure>\n' +
-					'                    <a href="">\n' +
-					'                        <span class="thumb"><img src="';
+					'				<figure>\n' +
+					'					<a href="">\n' +
+					'						<span class="thumb"><img src="';
 				tmtbHtml += goods.imgPath;
 				tmtbHtml += '" alt=""></span>\n' +
-					'                    </a>\n' +
-					'                    <figcaption>\n' +
-					'                        <a href="">\n' +
-					'                            <div class="brand">';
+					'					</a>\n' +
+					'					<figcaption>\n' +
+					'						<a href="">\n' +
+					'							<div class="brand">';
 				tmtbHtml += goods.brandNm;
 				tmtbHtml += '</div>\n' +
-					'                            <div class="name">';
+					'							<div class="name">';
 				tmtbHtml += goods.goodsNm;
 				tmtbHtml += '</div>\n' +
-					'                            <div class="price">\n' +
-					'                                <span class="selling_price">';
+					'							<div class="price">\n' +
+					'								<span class="selling_price">';
 				tmtbHtml += Number(goods.currPrice).toLocaleString();
 				tmtbHtml += '</span>\n' +
-					'                            </div>\n' +
-					'                        </a>\n' +
-					'                    </figcaption>\n' +
-					'                </figure>\n' +
-					'            </div>';
+					'							</div>\n' +
+					'						</a>\n' +
+					'					</figcaption>\n' +
+					'				</figure>\n' +
+					'			</div>';
 			}
 
 			tmtbHtml += '<div class="txt">\n' +
-				'                <a href="">\n' +
-				'                    <i class="ico ico_saletag"></i>\n' +
-				'                    <input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
-				'                    <span>\n';
+				'				<a href="">\n' +
+				'					<i class="ico ico_saletag"></i>\n' +
+				'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
+				'					<span>\n';
 			tmtbHtml += tmtb.tmtbNm;
 			tmtbHtml += '</span>\n' +
-				'                </a>\n' +
-				'            </div>\n' +
-				'        </div>';
+				'				</a>\n' +
+				'			</div>\n' +
+				'		</div>';
 		}
 
 		// 금액 다다익선 정보 HTML 작성
@@ -590,16 +624,16 @@
 			if (notApplyAmtTmtbList[i].tmtbSq != 0) {
 				let tmtb = notApplyAmtTmtbList[i];
 				tmtbHtml += '<div class="more_sale amtNotApplyTmtbList">\n' +
-					'            <div class="txt">\n' +
-					'                <a href="">\n' +
-					'                    <i class="ico ico_saletag"></i>\n' +
-					'                    <input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
-					'                    <span>';
+					'			<div class="txt">\n' +
+					'				<a href="">\n' +
+					'					<i class="ico ico_saletag"></i>\n' +
+					'					<input type="hidden" name="tmtbSq" value="' + tmtb.tmtbSq + '" />' +
+					'					<span>';
 				tmtbHtml += tmtb.tmtbNm;
 				tmtbHtml += '</span>\n' +
-					'                </a>\n' +
-					'            </div>\n' +
-					'        </div>';
+					'				</a>\n' +
+					'			</div>\n' +
+					'		</div>';
 			}
 		}
 
@@ -754,7 +788,7 @@
 		});
 
 		// 선택된 장바구니 정보 가공
-		let data = {    cartSqArr : cartArr }
+		let data = {	cartSqArr : cartArr }
 		let jsonData = JSON.stringify(data);
 
 		$.ajax( {

+ 33 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -97,6 +97,23 @@
 		// Select this year month
 		var checkYm = year + "" + month;
 		
+		// 작년
+// 		for(var i = 1;i <= 12; i++){
+// 			if(i < 10 && i != month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearAgo + "" + 0 + i +"'>"+ oneYearAgo + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i < 10 && i == month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearAgo + "" + 0 + i +"'>" + oneYearAgo + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i > 9 && i != month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearAgo + "" + i +"'>"+ oneYearAgo + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i > 9 && i == month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearAgo + "" + i +"'>"+ oneYearAgo + "년" + " " + i + "월" +"</li>");
+// 			}
+// 		}
+		
+		// 이번년도
 		for(var i = 1;i <= 12; i++){
 			if(i < 10 && i != month){
 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
@@ -113,6 +130,22 @@
 			}
 		}
 		
+		// 내년
+// 		for(var i = 1;i <= 12; i++){
+// 			if(i < 10 && i != month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearLater + "" + 0 + i +"'>"+ oneYearLater + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i < 10 && i == month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearLater + "" + 0 + i +"'>" + oneYearLater + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i > 9 && i != month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearLater + "" + i +"'>"+ oneYearLater + "년" + " " + i + "월" +"</li>");
+// 			}
+// 			else if(i > 9 && i == month){
+// 				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ oneYearLater + "" + i +"'>"+ oneYearLater + "년" + " " + i + "월" +"</li>");
+// 			}
+// 		}
+		
 	// 날짜변경 이벤트
 	var fnChangeDate = function(parm) {
 		

+ 2 - 2
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -87,7 +87,7 @@
 												<div class="form_field">
 													<div class="select_custom type1">
 														<div class="combo">
-															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
+<!--															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>-->
 															<div class="select">선택</div>
 															<ul class="list" style="width:100px; margin:0 auto">
 																<li class="selected" value="0">선택</li>
@@ -344,7 +344,7 @@
 	var fnChangeQty = function(param) {
 		let url = '/mypage/cancel/refund/amt/calculate';
 		$(param).parent().parent().find('input[name=chgQty]').val($(param).val());
-		
+		$(param).val();
 		let chgReason = $('div[name=chgReason]').parent().find('li.selected').attr('value');
 		
 		if (!gagajf.isNull(chgReason)) {

+ 1 - 1
src/main/webapp/WEB-INF/views/web/order/OrderDcAmtInfoWeb.html

@@ -155,7 +155,7 @@
 													<ul class="list">
 														<li value="0">선택없음</li>
 														<th:block th:each="delvCpn, k : ${delvCpnList}">
-															<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:delvfeecd="${delvCpn.delvFeeCd}" th:text="${delvCpn.cpnNm}"></li>
+															<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.dcVal}" th:delvfeecd="${delvCpn.delvFeeCd}" th:delvfee="${delvCpn.delvFee}" th:text="${delvCpn.cpnNm}"></li>
 														</th:block>
 													</ul>
 												</div>

+ 299 - 177
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -26,57 +26,6 @@
 <!-- payment.js -->
 <script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
 <script type="text/javascript" src="/ux/pc/js/payment.js"></script>
-
-
-<!-- xodud1202 -->
-<script type="text/javascript">
-	/****************************************************************/
-	/* m_Completepayment  설명                                      */
-	/****************************************************************/
-	/* 인증완료시 재귀 함수                                         */
-	/* 해당 함수명은 절대 변경하면 안됩니다.                        */
-	/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
-	/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
-	/****************************************************************/
-	function m_Completepayment( FormOrJson, closeEvent )
-	{
-		var frm = document.order_info;
-
-		/********************************************************************/
-		/* FormOrJson은 가맹점 임의 활용 금지                               */
-		/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
-		/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
-		/********************************************************************/
-		GetField( frm, FormOrJson );
-
-
-		if( frm.res_cd.value == "0000" )
-		{
-			alert("결제 승인 요청 전,\n\n반드시 결제창에서 고객님이 결제 인증 완료 후\n\n리턴 받은 ordr_chk 와 업체 측 주문정보를\n\n다시 한번 검증 후 결제 승인 요청하시기 바랍니다."); //업체 연동 시 필수 확인 사항.
-			alert(frm);
-			/*
-				가맹점 리턴값 처리 영역
-			*/
-
-			frm.submit();
-		} else {
-			alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
-			closeEvent();
-		}
-	}
-	
-	/* 표준웹 실행 */
-	function jsf__pay( form ) {
-		try {
-			KCP_Pay_Execute( form );
-		} catch (e) {
-			/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
-		}
-	}
-</script>
-
-	
-
 	<script type="text/javascript">
 		$(document).on("click", "#buyBtn", function() {
 			$.ajax({
@@ -84,8 +33,8 @@
 				url : '/order/create/preOrder',
 				dataType : 'html',
 				data : {
-					  pgGb		: "PAYCO"
-					, payMeans	: "G014_10"
+					  pgGb		: "KCP"
+					, payMeans	: "G014_30"
 					, ordNo		: "5"
 					, goodsNm	: "상품 테스트"
 					, payAmt	: "1233"
@@ -109,62 +58,76 @@
 
 	<form id="order_info" name="order_info" method="post" action="/order/pay/result/response" ></form>
 	
-	
-	<input type="button" id="buyBtn" value="테스트버튼" style="width:200px; height:200px;"/>
-
+	<div style="margin:20px;">
+		<input type="button" id="buyBtn" value="KCP테스트버튼" style="width:200px; height:70px; background-color: #fd4801; color: white; border: unset;"/>
+		<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:70px; background-color: #fffa00; color: black; border: unset;"/>
+		<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:70px; background-color: lawngreen; color: black; border: unset;"/>
+	</div>
 <!-- // xodud1202 -->
 
 
 <!-- card007 -->
-	<script type="text/javascript">
+	<script th:inline="javascript">
 		$(document).on("click", "#kakaoBtn", function() {
-			$.ajax( {
+			$.ajax({
 				type: "POST",
-				url : '/order/create/order',
+				url : '/order/create/preOrder',
 				dataType : 'html',
-				data : {cartSq : 8},
+				data : {
+					pgGb			: "KAKAO"
+					, custNo		: [[${sessionInfo.custNo}]]
+					, ordNo			: 1000
+					, goodsNm		: "상품 테스트"
+					, payAmt		: 30000
+					, ordGoodsQty	: [[${goodsTotCnt}]]
+				},
+				error : function(e) {
+					console.log(e.responseText);
+				},
 				success : function(result) {
 					$("#order_info").html(result);
 					fnKakaoPaymentReady();
 				}
 			});
+			//let url = '/order/create/preOrder';
+			//let data = {};
+			//data.pgGb = 'KAKAO';
+			//data.ordNo = 1000;
+			//data.custNo = [[${sessionInfo.custNo}]];
+			//data.goodsNm = '상품 테스트';
+			//data.ordGoodsQty = [[${goodsTotCnt}]];
+			//data.payAmt = 30000;
+			//
+			//let jsonData = JSON.stringify(data);
+			//
+			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			//	$("#order_info").html(result);
+			//	console.log(result);
+			//	fnKakaoPaymentReady();
+			//});
 		});
 
 		// 카카오페이 결제준비 처리
 		var fnKakaoPaymentReady = function() {
-			const protocol = 'http:';
-			let url = '/order/kakao/payment/ready';
-			let redirectUrl = '/order/kakao/payment/request';
-			let data = {};
-			data.ordNo = $('#order_info input[name=ordr_idxx]').val();
-			data.goodsNm = $('#order_info input[name=good_name]').val();
-			data.ordQty = $('#ordQty').text();
-			data.realOrdAmt = $('#order_info input[name=good_mny]').val();
-			data.approvalUrl = protocol + _frontUrl + redirectUrl;
-			data.failUrl = protocol + _frontUrl + redirectUrl;
-			data.cancelUrl = protocol + _frontUrl + redirectUrl;
-
-			let jsonData = JSON.stringify(data);
-
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				let tid = result.kakaoPay.tid;
-				let nextRedirectUrl = result.kakaoPay.next_redirect_pc_url;
-				let option = 'width=420, height=520';
-
-				$('#order_info').append('<input type=hidden name="pgTid" value="' + tid + '" />');
+			let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
+			let option = 'width=420, height=520';
 
-				window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
-			});
+			window.open(nextRedirectUrl, 'kakaoPaymentPopup', option);
 		}
 
 		// 카카오페이 결제 승인 요청
 		var fnKakaoPaymentRequest = function(pgToken) {
-			$('#order_info').append('<input type=hidden name="pgToken" value="' + pgToken + '" />');
+			$('#order_info input[name=pgToken]').val(pgToken);
+
+			// TODO
+			// formSubmit
 
+			// 테스트용 호출
 			let url = '/order/kakao/payment/approve';
 			let data = {};
 			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.ordNo = $('#order_info input[name=ordr_idxx]').val();
+			data.partnerOrderId = $('#order_info input[name=partnerOrderId]').val();
+			data.partnerUserId = $('#order_info input[name=partnerUserId]').val();
 			data.pgToken = $('#order_info input[name=pgToken]').val();
 
 			let jsonData = JSON.stringify(data);
@@ -179,7 +142,7 @@
 			return true;
 		}
 
-		// 카카오페이 결제 정보 조회
+		// 카카오페이 결제 정보 조회 (테스트용 호출)
 		var fnKakaoPaymentOrder = function() {
 			let url = '/order/kakao/payment/order';
 			let data = {};
@@ -197,13 +160,12 @@
 			return true;
 		}
 
-		// 카카오페이 결제 취소
+		// 카카오페이 결제 취소 (테스트용 호출)
 		var fnCancelKakaoPayment = function() {
 			let url = '/order/kakao/payment/cancel';
 			let data = {};
 			data.pgTid = $('#order_info input[name=pgTid]').val();
-			data.cnclRtnAmt = 1000;
-			//data.allCanYn = 'Y';
+			data.payAmt = 1000;
 
 			let jsonData = JSON.stringify(data);
 
@@ -218,61 +180,70 @@
 	</script>
 
 	<!-- =========== 네이버페이 ============= -->
-	<script src="https://nsp.pay.naver.com/sdk/js/naverpay.min.js"></script>
 	<script th:inline="javascript">
-		let custNo = [[${sessionInfo.custNo}]];
-		let naverPayClientId = [[${@environment.getProperty('naverPay.clientId')}]];
-		let redirectUrl = '/order/naver/payment/request';
-		const protocol = 'http:';
-		
-		var oPay = Naver.Pay.create({
-			"mode" : "development",				// development or production
-			"clientId": naverPayClientId	// clientId
-		});
-		
 		$(document).on("click", "#naverBtn", function() {
-			$.ajax( {
+			$.ajax({
 				type: "POST",
-				url : '/order/create/order',
+				url : '/order/create/preOrder',
 				dataType : 'html',
-				data : {cartSq : 8},
+				data : {
+					pgGb			: "NAVER"
+					, custNo		: [[${sessionInfo.custNo}]]
+					, ordNo			: 1000
+					, goodsNm		: "상품 테스트"
+					, payAmt		: 1000
+					, ordGoodsQty	: [[${goodsTotCnt}]]
+				},
+				error : function(e) {
+					mcxDialog.alert(e.responseText);
+				},
 				success : function(result) {
 					$("#order_info").html(result);
 					fnNaverPaymentReady();
 				}
 			});
+			//let url = '/order/create/preOrder';
+			//let data = {};
+			//data.pgGb = 'NAVER';
+			//data.ordNo = 1000;
+			//data.custNo = [[${sessionInfo.custNo}]];
+			//data.goodsNm = "상품 테스트";
+			//data.ordGoodsQty = [[${goodsTotCnt}]];
+			//data.payAmt = 30000;
+			//
+			//let jsonData = JSON.stringify(data);
+			//
+			//gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			//	$("#order_info").html(result);
+			//	fnNaverPaymentReady();
+			//});
 		});
 		
 		// 네이버페이 결제준비 처리
 		var fnNaverPaymentReady = function() {
-			const protocol = 'http:';
-			let url = '/order/naver/payment/ready';
-			let redirectUrl = '/order/naver/payment/request';
-			let data = {};
-			data.ordNo = $('#order_info input[name=ordr_idxx]').val();
-			data.goodsNm = $('#order_info input[name=good_name]').val();
-			data.ordQty = $('#ordQty').text();
-			data.realOrdAmt = $('#order_info input[name=good_mny]').val();
-			data.returnUrl = protocol + _frontUrl + redirectUrl;
-			
-			let jsonData = JSON.stringify(data);
+			let naverPayUrl = 'https://' + [[${@environment.getProperty('naverPay.payUrl.web')}]];
+			let reserveId = $('#order_info input[name=reserveId]').val();
+			let url = naverPayUrl + '/payments/' + reserveId;
+			console.log(url);
+			let option = 'width=750, height=' + $(window).height();
 			
-			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				let reserveId = result.naverPay.body.reserveId;
-				let url = "https://test-pay.naver.com/payments/" + reserveId;
-				let option = 'width=750, height=' + $(window).height();
-
-				window.open(url, 'naverPaymentPopup', option);
-			});
+			window.open(url, 'naverPaymentPopup', option);
 		}
 
 		// 네이버페이 결제 승인 요청
 		var fnNaverPaymentRequest = function(paymentId) {
-			$('#order_info').append('<input type=hidden name="pgTid" value="' + paymentId + '" />');
-
+			$('#order_info input[name=pgTid]').val(paymentId);
+			
+			// TODO
+			// formSubmit
+			
+			// 테스트용 호출
 			let url = '/order/naver/payment/approve';
 			let data = {};
 			data.pgTid = $('#order_info input[name=pgTid]').val();
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
 
 			let jsonData = JSON.stringify(data);
 
@@ -282,11 +253,11 @@
 				console.log(' ');
 				fnNaverPaymentOrder();
 			});
-			
+
 			return true;
 		}
 		
-		// 네이버페이 결제 정보 조회
+		// 네이버페이 결제 정보 조회 (테스트용 호출)
 		var fnNaverPaymentOrder = function() {
 			let url = '/order/naver/payment/order';
 			let data = {};
@@ -296,7 +267,7 @@
 			
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 				console.log('====== naverPaymentOrder ======');
-				console.log(result.kakaoPay);
+				console.log(result.naverPay);
 				console.log(' ');
 				fnCancelNaverPayment();
 			});
@@ -304,29 +275,28 @@
 			return true;
 		}
 
-		// 네이버페이 결제 취소
+		// 네이버페이 결제 취소 (테스트용 호출)
 		var fnCancelNaverPayment = function() {
 			let url = '/order/naver/payment/cancel';
 			let data = {};
 			data.pgTid = $('#order_info input[name=pgTid]').val();
 			data.cancelRequester = '1';
-			data.cancelReason = '고객변심';
-			data.cnclRtnAmt = 1000;
-			//data.allCanYn = 'Y';
-			
+			data.chgReasonNm = '고객변심';
+			data.payAmt = 1000;
+			data.paySq = 1234;
+			data.custNo = [[${sessionInfo.custNo}]];
+			data.updNo = [[${sessionInfo.custNo}]];
+
 			let jsonData = JSON.stringify(data);
-			
+
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 				console.log('====== naverPaymentCancel ======');
-				console.log(result.kakaoPay);
+				console.log(result.naverPay);
 				console.log(' ');
-				
 			});
 		}
-	</script>
 
-	<input type="button" id="kakaoBtn" value="카카오테스트버튼" style="width:200px; height:200px;"/>
-	<input type="button" id="naverBtn" value="네이버테스트버튼" style="width:200px; height:200px;"/>
+	</script>
 <!-- // card007 -->
 
 
@@ -339,36 +309,37 @@
 
 <!--  container -->
 <form id="payForm" name="payForm">
-	<br>
+
 	<!-- 주문고객정보 -->
-	<table border="1" style="font-size:10px; text-align:center;">
-		<tr style="height:30px;">
-			<th>custNm</th>
-			<th>email</th>
-			<th>cellPhnno</th>
-			<th>recipZipcode</th>
-			<th>recipBaseAddr</th>
-			<th>recipDtlAddr</th>
-			<th>delvMemo</th>
-			<th>foreignBuyYn</th>
-			<th>orderMadeYn</th>
-		</tr>
-		<tr style="height:30px;">
-			<td class="custNm"></td>
-			<td class="email"></td>
-			<td class="cellPhnno"></td>
-			<td class="recipZipcode"></td>
-			<td class="recipBaseAddr"></td>
-			<td class="recipDtlAddr"></td>
-			<td class="delvMemo"></td>
-			<td class="foreignBuyYn"></td>
-			<td class="orderMadeYn"></td>
-		</tr>
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderInfo">
+		<tbody>
+			<tr style="height:30px;">
+				<th>custNm</th>
+				<th>email</th>
+				<th>cellPhnno</th>
+				<th>recipZipcode</th>
+				<th>recipBaseAddr</th>
+				<th>recipDtlAddr</th>
+				<th>delvMemo</th>
+				<th>foreignBuyYn</th>
+				<th>orderMadeYn</th>
+			</tr>
+			<tr style="height:30px;">
+				<td class="custNm"></td>
+				<td class="email"></td>
+				<td class="cellPhnno"></td>
+				<td class="recipZipcode"></td>
+				<td class="recipBaseAddr"></td>
+				<td class="recipDtlAddr"></td>
+				<td class="delvMemo"></td>
+				<td class="foreignBuyYn"></td>
+				<td class="orderMadeYn"></td>
+			</tr>
+		</tbody>
 	</table>
-	
-	<br>
+
 	<!-- 사은품정보 -->
-	<table border="1" style="font-size:10px; text-align:center;">
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="freegiftInfo">
 		<tr style="height:30px;">
 			<th>freegiftValArr</th>
 			<th>freegiftUsePointArr</th>
@@ -378,10 +349,9 @@
 			<td class="freegiftUsePointArr"></td>
 		</tr>
 	</table>
-	
-	<br>
+
 	<!-- 주문상세금액 -->
-	<table border="1" style="font-size:10px; text-align:center;">
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderDetailInfo">
 		<tr style="height:30px;">
 			<th>cartSq</th>
 			<th>orgCurrPrice</th>
@@ -404,11 +374,12 @@
 			<th>gfcdUseAmt1</th>
 			<th>realOrdAmt1</th>
 			<th>savePntAmt1</th>
-			<th>shoDelvYn</th>
+			<th>shotDelvYn</th>
 			<th>foreignYn</th>
 			<th>orderMadeYn</th>
+			<th>delvFeeCd</th>
 		</tr>
-		<th:block th:each="delvAllCart, index : ${delvCartGoodsList}">
+		<th:block th:each="delvAllCart, index : ${delvAllCartList}">
 			<th:block th:if="${delvAllCart != null and #lists.size(delvAllCart) > 0}">
 				<th:block th:each="goods, i : ${delvAllCart}">
 					<tr style="height:30px;">
@@ -448,15 +419,35 @@
 						<td class="shotDelvYn" 		th:text="${goods.shotDelvYn}"></td>
 						<td class="foreignBuyYn" 	th:text="${goods.foreignBuyYn}"></td>
 						<td class="orderMadeYn" 	th:text="${goods.orderMadeYn}"></td>
+						<td class="delvFeeCd" 		th:text="${goods.delvFeeCd}"></td>
 					</tr>
 				</th:block>
 			</th:block>
 		</th:block>
 	</table>
-	
-	<br>
+
+	<!-- 배송단위목록 -->
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="delvFeeCdInfo">
+		<tr style="height:30px;">
+			<th>supplyCompCd</th>
+			<th>delvFeeCd</th>
+			<th>delvFee</th>
+			<th>delvCpnSq</th>
+			<th>delvCpnDcAmt</th>
+		</tr>
+		<th:block th:each="delvFeeCd, index : ${delvFeeCdList}">
+			<tr style="height:30px;">
+				<td class="supplyCompCd" th:text="${delvFeeCd.supplyCompCd}"></td>
+				<td class="delvFeeCd" th:text="${delvFeeCd.delvFeeCd}"></td>
+				<td class="delvFee" th:text="${delvFeeCd.delvFee}"></td>
+				<td class="delvCpnSq">0</td>
+				<td class="delvCpnDcAmt">0</td>
+			</tr>
+		</th:block>
+	</table>
+
 	<!-- 주문금액합계 -->
-	<table border="1" style="font-size:10px; text-align:center;">
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="orderSumAmtInfo">
 		<tr style="height:30px;">
 			<th>orgGoodsSumAmt</th>
 			<th>delvSumAmt</th>
@@ -726,6 +717,27 @@ $(document).ready( function() {
 
 	// 1. AJAX 정보(회원정보로드)
 	custemerInfoSet(jsonData);
+	
+	// 999. 개발화면정보설정
+	var devTemp = true;
+	var arr = []
+	arr[0] = "orderInfo";
+	arr[1] = "freegiftInfo";
+	arr[2] = "orderDetailInfo";
+	arr[3] = "delvFeeCdInfo";
+	arr[4] = "orderSumAmtInfo";
+	
+	if (devTemp) {
+		$("table").each(function(){
+			var name = $(this).attr("name");
+			for (i=0 ; i<arr.length ; i++) {
+				if (name == arr[i]) {
+					$(this).show();
+				}
+			}
+		});
+	}
+	
 });
 
 // 1. 함수기능 정의
@@ -937,7 +949,7 @@ var freegiftInfoSet = function(jsonData) {
 	});
 }
 
-// 1.6 결제타입로드
+// 1.6 결제타입로드 (결제버튼기능구현)
 var paymentInfoSet = function(jsonData) {
 	$.ajax( {
 		type		: "POST",
@@ -955,6 +967,96 @@ var paymentInfoSet = function(jsonData) {
 				$("#paymentInfo").css("display", "block");
 				$("#paymentInfo").html(result);
 				
+				// 결재하기
+				$("#btn_payment").on("click", function(){
+					// 사은품정보
+					var freegiftValArr 		= $(".freegiftValArr").text().split(",");
+					var prePntDcAmtYn		= $("input[name='rdi-beforpoint']:checked").val();
+					var orderDetailList		= [];
+					var delvFeeCdList		= [];
+
+					// 주문상세데이타 생성
+					$(".cartSq").each(function(){
+						var orderDetailData = {
+							"cartSq"			: $(this).text()
+							,"currPrice"		: $(this).parent().find(".orgCurrPrice").text()
+							,"optAddPrice"		: $(this).parent().find(".optAddPrice").text()
+							,"ordAmt"			: $(this).parent().find(".ordAmt").text()
+							,"cpn1DcSq"			: $(this).parent().find(".cpn1DcSq").text()
+							,"cpn1DcAmt"		: $(this).parent().find(".cpn1DcAmt").text()
+							,"goodsQty"			: $(this).parent().find(".goodsQty").text()
+							,"tmtb1Sq"			: $(this).parent().find(".tmtb1Sq").text()
+							,"tmtb1DcAmt"		: $(this).parent().find(".tmtb1DcAmt").text()
+							,"tmtb2Sq"			: $(this).parent().find(".tmtb2Sq").text()
+							,"tmtb2DcAmt"		: $(this).parent().find(".tmtb2DcAmt").text()
+							,"goodsCpnSq"		: $(this).parent().find(".goodsCpnSq").text()
+							,"goodsCpnDCAmt"	: $(this).parent().find(".goodsCpnDCAmt").text()
+							,"cartCpnSq"		: $(this).parent().find(".cartCpnSq").text()
+							,"carrtCpnDCAmt"	: $(this).parent().find(".cartCpnDCAmt").text()
+							,"prePntDcAmt"		: $(this).parent().find(".prePntDcAmt1").text()
+							,"pntDcAmt"			: $(this).parent().find(".pntDcAmt1").text()
+							,"gfcdUseAmt"		: $(this).parent().find(".gfcdUseAmt1").text()
+							,"savePntAmt"		: $(this).parent().find(".savePntAmt1").text()
+							,"shotDelvYn"		: $(this).parent().find(".shotDelvYn").text()
+							,"foreignBuyYn"		: $(this).parent().find(".foreignYn").text()
+							,"orderMadeYn"		: $(this).parent().find(".orderMadeYn").text()
+							,"delvFeeCd"		: $(this).parent().find(".delvFeeCd").text()
+						}
+						
+						orderDetailList.push(orderDetailData);
+					});
+					
+					// 주문배송업체정보 생성
+					$(".delvFeeCd").each(function(){
+						var delvFeeCdData = {
+							"delvFeeCd"			: $(this).text()
+							,"supplyCompCd"		: $(this).parent().find(".supplyCompCd").text()
+							,"delvFee"			: $(this).parent().find(".delvFee").text()
+							,"delvCpnSq"		: $(this).parent().find(".delvCpnSq").text()
+							,"delvCpnDcAmt"		: $(this).parent().find(".delvCpnDcAmt").text()
+						}
+						
+						delvFeeCdList.push(delvFeeCdData);
+					});
+					
+					// 주문데이타 생성
+					var orderData = {
+						"custNm"				: $(".custNm").text()
+						,"email"				: $(".email").text()
+						,"recipPhnno"			: $(".cellPhnno").text()
+						,"recipZipcode"			: $(".recipZipcode").text()
+						,"recipBaseAddr"		: $(".recipBaseAddr").text()
+						,"recipDtlAddr"			: $(".recipDtlAddr").text()
+						,"delvMemo"				: $(".delvMemo").text()
+						,"freegiftValArr"		: freegiftValArr
+						,"prePntDcAmtYn"		: prePntDcAmtYn
+						,"orderDetailList"		: orderDetailList
+						,"delvFeeCdList"		: delvFeeCdList
+					};
+					
+					var orderData = JSON.stringify(orderData);
+					
+					$.ajax( {
+						type		: "POST",
+						url 		: '/order/create/preOrder',
+						data		: orderData,
+						dataType 	: 'html',
+						beforeSend : function(xhr, settings) {
+							xhr.setRequestHeader("AJAX"			, "true");
+							xhr.setRequestHeader('Accept'		, 'application/json');
+							xhr.setRequestHeader('Content-Type'	, 'application/json');
+							gagajf.showProgressbar(true);
+						},
+						success 	: function(result) {
+							// 결재정보로드
+							//$("#order_info").html(result);
+							//jsf__pay(document.order_info);
+						}
+					});
+				});
+				
+				
+				
 				// 1.8 할인영역 설정
 				dcAmtInfoSet(jsonData);
 			}
@@ -1365,16 +1467,35 @@ var custCpnApply = function(obj) {
 	}
 	// 배송비쿠폰적용
 	else if (cpnType == "delvCpn") {
+		var delvFee 		= parseInt(obj.attr("delvfee"));
+		var delvCpnDcAmt 	= parseInt(obj.attr("data"));
+		var delvFeeCd 		= obj.attr("delvfeecd");
+		
+		// 배송비가 배송비쿠폰할인금액보다 클경우 배송비 - 배송비쿠폰할인금액을 적용
+		if (delvFee > delvCpnDcAmt) {
+			cpnDcAmt = delvFee - delvCpnDcAmt;
+		} else {
+			cpnDcAmt = delvFee;
+		}
+		
 		// 적용된 할인금액 text 설정 
-		var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
-		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
+		var dcAmtStr = "- " + cpnDcAmt.addComma() + " 원 할인적용";
 		
-		var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+		obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
 		
-		obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+		obj.parent().parent().find("input[name='cpnDcAmt']").val(cpnDcAmt);
 		obj.parent().parent().find("input[name='delvFeeCd']").val(obj.attr("delvfeecd"));
 		
 		$(".delvCpnDcSumAmt").text(obj.attr("data"));
+				
+		// 배송비쿠폰 테이블 적용
+		
+		$(".delvFeeCd").each(function(){
+			if ($(this).text() == delvFeeCd) {
+				$(this).parent().find(".delvCpnSq").text(obj.prop("value"));
+				$(this).parent().find(".delvCpnDcAmt").text(obj.attr("data"));
+			}
+		});
 	}
 	
 	// select box 쿠폰 적용 (공통적용)
@@ -1444,6 +1565,7 @@ var cpnApplyDel = function(obj) {
 		//});
 		
 		obj.parent().parent().find("input[name='delvFeeCd']").val("0");
+		$(".delvCpnSq").text("0");
 	}
 	
 	obj.parent().parent().find("input[name='custCpnSq']").val("0");
@@ -1889,4 +2011,4 @@ $(document).ready( function() {
 
 </th:block>
 </body>
-</html>
+</html>

+ 2 - 0
src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html

@@ -270,6 +270,8 @@ var dispYn = [[${order.dispYn}]]; // 노출여부
 
 //컨텐츠 호출
 $(document).ready( function() {
+	dispYn = "Y";
+	
 	// 화면펼침
 	if (dispYn == "Y") {
 		$("#paymentInfo .fold_head").addClass("on");

+ 16 - 0
src/main/webapp/WEB-INF/views/web/pg/kcpOrderWeb.html

@@ -63,4 +63,20 @@
 	<input type="hidden" name="cash_yn"         value=""/>
 	<input type="hidden" name="cash_tr_code"    value=""/>
 	<input type="hidden" name="cash_id_info"    value=""/>
+
+	<!-- 카카오페이 관련 정보 -->
+	<input type="hidden" name="pgTid" th:value="${payment.pgTid}"/>
+	<input type="hidden" name="partnerOrderId" th:value="${payment.partnerOrderId}"/>
+	<input type="hidden" name="partnerUserId" th:value="${payment.partnerUserId}"/>
+	<input type="hidden" name="pgToken" value=""/>
+	<input type="hidden" name="nextRedirectAppUrl" th:value="${payment.nextRedirectAppUrl}"/>
+	<input type="hidden" name="nextRedirectMobileUrl" th:value="${payment.nextRedirectMobileUrl}"/>
+	<input type="hidden" name="nextRedirectPcUrl" th:value="${payment.nextRedirectPcUrl}"/>
+	<input type="hidden" name="androidAppScheme" th:value="${payment.androidAppScheme}"/>
+	<input type="hidden" name="iosAppScheme" th:value="${payment.iosAppScheme}"/>
+
+	<!-- 네이버페이 관련 정보 -->
+	<input type="hidden" name="reserveId" th:value="${payment.reserveId}"/>
+	<input type="hidden" name="paymentId" value=""/>
+
 </html>

+ 36 - 0
src/main/webapp/ux/pc/js/payment.js

@@ -0,0 +1,36 @@
+/****************************************************************/
+/* m_Completepayment  설명                                      */
+/****************************************************************/
+/* 인증완료시 재귀 함수                                         */
+/* 해당 함수명은 절대 변경하면 안됩니다.                        */
+/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
+/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
+/****************************************************************/
+function m_Completepayment( FormOrJson, closeEvent )
+{
+	var frm = document.order_info;
+	
+	/********************************************************************/
+	/* FormOrJson은 가맹점 임의 활용 금지                               */
+	/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
+	/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
+	/********************************************************************/
+	GetField( frm, FormOrJson );
+	
+	
+	if( frm.res_cd.value == "0000" ) {
+		frm.submit();
+	} else {
+		alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
+		closeEvent();
+	}
+}
+
+/* 표준웹 실행 */
+function jsf__pay( form ) {
+	try {
+		KCP_Pay_Execute( form );
+	} catch (e) {
+		/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
+	}
+}

+ 9 - 1
src/main/webapp/ux/style24_link.js

@@ -211,7 +211,15 @@ function cfnAddCart(cartList) {
 		contentType: 'application/json',
 		dataType : 'text',
 		success : function(result) {
-			alert(result);
+			if(cartList[0].cartGb == "C") {
+				mcxDialog.confirm("<div class="+"dialog-title"+">"+"상품이 쇼핑백에 추가되었습니다.</div><p>쇼핑백으로 이동하시겠습니까?</p>", {
+					cancelBtnText: "계속 쇼핑하기",
+					sureBtnText: "쇼핑백 가기",
+					sureBtnClick: function(){
+						location.href='/cart/list/form'; 	//내 쇼핑백 이동url
+					}
+				});
+			}
 		}
 	});
 }