jsshin 5 лет назад
Родитель
Сommit
a2014a7bd6

+ 76 - 10
src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java

@@ -2,14 +2,27 @@ package com.style24.front.biz.thirdparty;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaFileUtil;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
 import com.style24.core.support.util.CryptoUtils;
 import com.style24.front.support.security.session.TsfSession;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
+import javax.annotation.PostConstruct;
+import java.net.URI;
+
 
 /**
  * Yes24 로그인
@@ -29,6 +42,35 @@ public class Yes24Login {
 
 	public static final String PROTOCOL = "http://";
 
+	private String id;
+	private String type;
+	private String requestUrl;
+	private String callBackUrl;
+	private String userInfoUrl;
+	private String linkUrl;
+	private String unlinkUrl;
+
+	@PostConstruct
+	public void init() {
+		id = env.getProperty("yes24.id");
+		type = env.getProperty("yes24.type");
+		requestUrl = env.getProperty("yes24.login.requestUrl");
+		callBackUrl = env.getProperty("yes24.login.callbackUrl");
+		userInfoUrl = env.getProperty("yes24.userInfoUrl");
+		linkUrl = env.getProperty("yes24.linkUrl");
+		unlinkUrl = env.getProperty("yes24.unlinkUrl");
+
+		log.debug("\n\n---- YES24 initialization started ----");
+		log.debug("id: [{}]", id);
+		log.debug("type: [{}]", type);
+		log.debug("requestUrl: [{}]", requestUrl);
+		log.debug("callBackUrl: [{}]", callBackUrl);
+		log.debug("userInfoUrl: [{}]", userInfoUrl);
+		log.debug("linkUrl: [{}]", linkUrl);
+		log.debug("unlinkUrl: [{}]", unlinkUrl);
+		log.debug("\n--- YES24 initialization completed ----\n");
+	}
+
 	/**
 	 * YES24 로그인 화면
 	 * @param state - 콜백 시 해당 값으로 비교 및 모바일을 redirect 값이 있음
@@ -37,13 +79,14 @@ public class Yes24Login {
 	 * @since 2021. 03. 03
 	 */
 	public String getAuthorizeUrl(String state) {
-		String authorizeUrl = "https://www.yes24.com/Templates/FTLoginPartner.aspx";
-		String callBackUrl = "/signin/yes24LoginCallback";
-		String id = TsfSession.getFrontGb().equals("P") ? "PID" : "MID";
+		String idGb = TsfSession.getFrontGb().equals("P") ? "PID" : "MID";
 		StringBuilder apiUrlBuilder = new StringBuilder();
 		String redirectUri = GagaFileUtil.getConcatenationPath(PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), callBackUrl);
-		apiUrlBuilder.append(authorizeUrl)
-				.append("?"+id+"=101582")
+		apiUrlBuilder.append(requestUrl)
+				.append("?")
+				.append(idGb)
+				.append("=")
+				.append(id)
 				.append("&ReturnURL=")
 				.append(redirectUri);
 		log.info("apiUrlBuilder ===> {}", apiUrlBuilder.toString());
@@ -57,21 +100,44 @@ public class Yes24Login {
 	 * @author jsshin
 	 * @since 2021. 03. 03
 	 */
-	public GagaMap getAccessInfo(String inpin) {
+	public GagaMap getUserInfo(String inpin) {
 		GagaMap result = new GagaMap();
-		//1. ipin 복호화
+		// 1. ipin 복호화
 		String decryptIpin = CryptoUtils.decryptAES(inpin);
 		log.info("decryptIpin {}", decryptIpin);
 
-		//2. ipin 값에서 ci 값 분리
+		// 2. ipin 값에서 ci 값 분리
 		String decryptIpinValues[] = decryptIpin.split("|");
 		log.info("decryptIpinValues.length {}", decryptIpinValues.length);
 		log.info("decryptIpinValues0 {}", decryptIpinValues[0]);
 		log.info("decryptIpinValues1 {}", decryptIpinValues[1]);
 
-		//3. ci값 추출 후 통신
-		String encryptCi = CryptoUtils.encryptAES(decryptIpinValues[0]);
+		// 3. Ci 다시 암호화
+		String encryptCi = CryptoUtils.encryptAES(decryptIpinValues[1]);
+		try {
+			MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+			params.add("str_ci", encryptCi);
+			params.add("str_Type", type);
+
+			// Header
+			HttpHeaders headers = new HttpHeaders();
+			headers.set("Host", "wsyes24.yes24.com");
+			headers.set("Content-Type", "application/x-www-form-urlencoded");
+			headers.set("Content-Length", "length");
+
+			HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
+			URI url = URI.create(userInfoUrl);
+
+			// POST방식으로 호출
+			ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+			log.info("getAccessTocken responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+			String jsonResult = responseEntity.getBody();
+			log.info("getAccessTocken responseEntity.getBody(): {} ", jsonResult);
 
+		} catch (Exception e) {
+			log.error(e.getMessage());
+		}
 
 
 		return result;

+ 19 - 42
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -303,48 +304,6 @@ public class TsfCustomerController extends TsfBaseController {
 		return result;
 	}
 
-	/**
-	 * 이용약관 화면
-	 *
-	 * @return ModelAndView
-	 * @author jsshin
-	 * @since 2021. 02. 19
-	 */
-	@GetMapping("/licensing/layer/form")
-	public ModelAndView getLicensingLayerForm() {
-		ModelAndView mav = new ModelAndView();
-
-		return mav;
-	}
-
-	/**
-	 * 개인정보취급방침 화면
-	 *
-	 * @return ModelAndView
-	 * @author jsshin
-	 * @since 2021. 02. 19
-	 */
-	@GetMapping("/privacy/layer/form")
-	public ModelAndView getPrivacyLayerForm() {
-		ModelAndView mav = new ModelAndView();
-
-		return mav;
-	}
-
-	/**
-	 * 마케팅 동의 화면
-	 *
-	 * @return ModelAndView
-	 * @author jsshin
-	 * @since 2021. 02. 19
-	 */
-	@GetMapping("/marketing/layer/form")
-	public ModelAndView getMarketingLayerForm() {
-		ModelAndView mav = new ModelAndView();
-
-		return mav;
-	}
-
 	/**
 	 * 회원가입 유형 화면
 	 *
@@ -829,4 +788,22 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 정보 이용동의 화면 - Yes24 사용
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 03. 25
+	 */
+	@PostMapping("/consent/useinfo/layer")
+	public ModelAndView cnstentUseInfoLayer() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("custNm", "신주승");
+
+		mav.setViewName(super.getDeviceViewName("customer/ConsentUseInfoForm"));
+
+		return mav;
+	}
+
 }

+ 1 - 1
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -328,7 +328,7 @@ public class TsfIndexController extends TsfBaseController {
 		GagaMap userInfo = new GagaMap();
 
 		if (StringUtils.isNotBlank(ipin)) {
-
+			yes24Login.getUserInfo(ipin);
 		}
 
 

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

@@ -97,6 +97,17 @@ kakao:
     paymentOrderUrl : https://kapi.kakao.com/v1/payment/order
     cancelPaymentUrl : https://kapi.kakao.com/v1/payment/cancel
 
+#YES24 API
+yes24 :
+    id : 101582
+    type : ISTYLE
+    login.requestUrl: https://www.yes24.com/Templates/FTLoginPartner.aspx
+    login.callbackUrl: /signin/yes24LoginCallback
+    userInfoUrl : https://wsyes24.yes24.com/Yes_Mem.asmx?op=Yes_Mem_Search_By_CI
+    linkUrl : https://wsyes24.yes24.com/Yes_Mem.asmx?op=Yes_Partner_Insert
+    unlinkUrl : https://wsyes24.yes24.com/Yes_Mem.asmx?op=Yes_Partner_Remove
+
+
 # SPEEDY Image Upload
 speedy:
     ftp:

+ 60 - 0
src/main/webapp/WEB-INF/views/web/customer/ConsentUseInfoFormWeb.html

@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ConsentUseInfoFormWeb.html
+ * @desc    : 정보이용동의팝업
+ *            Yes24 간편가입에 사용됨
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.25   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="mbAgreeLabel">STYLE24 로그인 정보 이용동의</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="agree_info">
+					<p>계정 연동 시, STYLE24 휴면계정은 휴면해제 후 이용 가능합니다.</p>
+					<div class="info_txt">
+						<ul>
+							<li>“<span class="mb_name">회원명</span>” 님의 <em>CI, 이름, 성별, 생년월일, 핸드폰번호, 이메일 정보</em>를 로그인 연동을 위해 아이스타일24에 제공합니다.</li>
+							<li>정보제공 동의 시 YES24 계정으로 로그인 가능하며, 간편하게 회원가입이 가능합니다.</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="modal-footer">
+			<div class="btn_group_block ui_row">
+				<div class="ui_col_6">
+					<button type="button" id="btnAgree" class="btn btn_primary btn_block">
+						<span>동의하기</span>
+					</button>
+				</div>
+				<div class="ui_col_6">
+					<button type="button" id="btnClose" class="btn btn_dark btn_block" >
+						<span>닫기</span>
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	$('#btnAgree').on('click', function () {
+
+	});
+
+	/*]]>*/
+</script>
+</html>

+ 6 - 0
src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html

@@ -52,6 +52,7 @@
 							</li>
 							<li>
 								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
+<!--									<a href="javascript:void(0)" onclick="cfnConsentUseInfo('신주승')">-->
 									<i class="ico ico_snslogin yes24"></i>
 									<span>YES24</span>
 								</a>
@@ -126,6 +127,11 @@
 		}
 	};
 
+	$('#btnClose').on('click', function () {
+		$('#layer_consent_useinfo').modal('hide');
+		//cfCloseLayer('layer_consent_useinfo');
+	});
+
 	$(document).ready(function() {
 
 	});

+ 1 - 1
src/main/webapp/ux/pc/css/common.css

@@ -1227,7 +1227,7 @@ input[type="file"] {
 .quick_menu_group .area > div:first-child span:first-child a{margin-left:0}
 .quick_menu_group .area > div:first-child span:first-child a:after{display:none}
 .quick_menu_group .area > div:first-child span a:after{position:absolute;top:13px;left:0;width:1px;height:13px;background:#959596;content:''}
-.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}*/
+.quick_menu_group .inr a{margin-left:16px;color:#eeeeee;}
 
 
 

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

@@ -27,7 +27,7 @@ const _PAGE_CUSTOMER_SECEDE_COMPLETE = _frontUrl + "/customer/secede/complete/fo
 const _PAGE_CUSTOMER_CERTIFICATION = _frontUrl + "/customer/certification/form"						// 고객 > 본인인증화면
 const _PAGE_USE_TERMS = _frontUrl + "/customer/use/terms/form";										// Footer > 이용약관
 const _PAGE_PRIVACY_POLICY = _frontUrl + "/customer/privacy/policy/form";							// Footer > 개인정보취급방침
-const _PAGE_CUSTOMER_AGREEMENT = _frontUrl + ""
+const _PAGE_CUSTOMER_CONSENT_USERINFO = _frontUrl + "/customer/consent/useinfo/layer";				// 정보 이용동의 : Yes24 로그인
 
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";								// 상품 상세
@@ -696,6 +696,26 @@ function cfGoodsDeailDetail(goodsCd, compsGoodsCd) {
 	cfOpenFullLayer(_PAGE_DEAL_GOODS_DETAIL_LAYER + goodsCd +'/'+compsGoodsCd, 'layer_goods_deal_detail');
 }
 
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 딜구성상품상세 full 팝업
+ * @param  : custNm - 고객명
+ * <pre>
+ *		cfnConsentUseInfo(custNm);
+ * </pre>
+ */
+function cfnConsentUseInfo(custNm) {
+	let str = '<div class="modal fade mbAgree_pop" id="layer_consent_useinfo" tabIndex="-1" role="dialog" aria-labelledby="mbAgreeLabel" aria-hidden="true"></div>';
+
+	if ($('#layer_consent_useinfo').length == 0) {
+		$('body').append(str);
+	}
+
+	cfOpenLayer(_PAGE_CUSTOMER_CONSENT_USERINFO, 'layer_consent_useinfo');
+}
+
 /**
  * @type   : function
  * @access : public
@@ -883,3 +903,5 @@ var cfnGoToBrandMain = function(brandGroupNo) {
 	var params = '?brandGroupNo=' + brandGroupNo;
 	cfnGoToPage(_PAGE_BRAND_MAIN + params);
 }
+
+