조민수 조민수 09-07
(test) nice pay update
@248b980bdb1008051ee093a3132a7d694ea73769
pom.xml
--- pom.xml
+++ pom.xml
@@ -7,7 +7,7 @@
 	<version>1.0.0</version>
 	<name>mjgo</name>
 	<url>http://www.egovframe.go.kr</url>
-	
+
 	<!-- <profiles>
 	  <profile>
 		<id>local</id>
@@ -569,8 +569,20 @@
 		    <artifactId>spring-data-redis</artifactId>
 		    <version>1.8.11.RELEASE</version>
 		</dependency>
-		
-		<!-- valkey -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.13.2</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-test</artifactId>
+			<version>${spring.maven.artifact.version}</version>
+			<scope>test</scope>
+		</dependency>
+        <!-- valkey -->
 	</dependencies>
 	
     <build>
src/main/java/itn/com/cmm/ComDefaultVO.java
--- src/main/java/itn/com/cmm/ComDefaultVO.java
+++ src/main/java/itn/com/cmm/ComDefaultVO.java
@@ -2,6 +2,7 @@
 
 import java.io.Serializable;
 
+import itn.com.utl.page.PageableVO;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -19,7 +20,7 @@
  *  @see 
  *  
  */
-public class ComDefaultVO implements Serializable {
+public class ComDefaultVO implements Serializable, PageableVO {
 	
 	private static final long serialVersionUID = -6062858939907510631L;
 
 
src/main/java/itn/com/utl/page/BasePageableVO.java (added)
+++ src/main/java/itn/com/utl/page/BasePageableVO.java
@@ -0,0 +1,77 @@
+package itn.com.utl.page;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class BasePageableVO implements PageableVO {
+
+    private int pageIndex = 1;
+    private int pageUnit = 10;
+    private int pageSize = 10;
+
+    private int firstIndex;
+    private int lastIndex;
+    private int recordCountPerPage;
+    private String searchKeyword;
+
+
+    // searchVO 로 빼야함 -> BaseVO implements PageableVO, SearchVO
+    private String searchSortCnd;
+    private String searchSortOrd;
+
+    private String searchCondition;
+    private String searchStartDate;
+    private String searchEndDate;
+
+    @Override
+    public int getPageIndex() {
+        return pageIndex;
+    }
+    @Override
+    public int getPageUnit() {
+        return pageUnit;
+    }
+
+    @Override
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    @Override
+    public String getSearchSortCnd() {
+        return searchSortCnd;
+    }
+
+    @Override
+    public void setSearchSortCnd(String searchSortCnd) {
+        this.searchSortCnd = searchSortCnd;
+    }
+
+    @Override
+    public String getSearchSortOrd() {
+        return searchSortOrd;
+    }
+
+    @Override
+    public void setSearchSortOrd(String searchSortOrd) {
+        this.searchSortOrd = searchSortOrd;
+    }
+
+    @Override
+    public void setFirstIndex(int firstIndex) {
+        this.firstIndex = firstIndex;
+    }
+
+    @Override
+    public void setLastIndex(int lastIndex) {
+        this.lastIndex = lastIndex;
+    }
+
+    @Override
+    public void setRecordCountPerPage(int recordCountPerPage) {
+        this.recordCountPerPage = recordCountPerPage;
+    }
+
+}(No newline at end of file)
 
src/main/java/itn/com/utl/page/PageableVO.java (added)
+++ src/main/java/itn/com/utl/page/PageableVO.java
@@ -0,0 +1,16 @@
+package itn.com.utl.page;
+
+public interface PageableVO {
+    int getPageIndex();
+    int getPageUnit();
+    int getPageSize();
+    String getSearchSortCnd();
+    String getSearchSortOrd();
+
+    void setFirstIndex(int firstIndex);
+    void setLastIndex(int lastIndex);
+    void setRecordCountPerPage(int recordCountPerPage);
+    void setSearchSortCnd(String defaultCnd);
+    void setSearchSortOrd(String defaultOrd);
+}
+
 
src/main/java/itn/com/utl/page/PaginationUtil.java (added)
+++ src/main/java/itn/com/utl/page/PaginationUtil.java
@@ -0,0 +1,29 @@
+package itn.com.utl.page;
+
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+
+public class PaginationUtil {
+    public static <T extends PageableVO> PaginationInfo init(T vo) {
+        PaginationInfo paginationInfo = new PaginationInfo();
+        paginationInfo.setCurrentPageNo(vo.getPageIndex());
+        paginationInfo.setRecordCountPerPage(vo.getPageUnit());
+        paginationInfo.setPageSize(vo.getPageSize());
+
+        vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
+        vo.setLastIndex(paginationInfo.getLastRecordIndex());
+        vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+        return paginationInfo;
+    }
+
+    public static <T extends PageableVO> PaginationInfo initWithSort(T vo, String defaultCnd, String defaultOrd) {
+        if(vo.getSearchSortCnd() == null || vo.getSearchSortCnd().isEmpty()) {
+            vo.setSearchSortCnd(defaultCnd);
+        }
+        if (vo.getSearchSortOrd() == null || vo.getSearchSortOrd().isEmpty()) {
+            vo.setSearchSortOrd(defaultOrd);  // asc / desc
+        }
+        return init(vo);
+    }
+}
+
src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
--- src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
+++ src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
@@ -1,6 +1,7 @@
 package itn.let.mjo.pay.service;
 
 import itn.com.cmm.ComDefaultVO;
+import itn.com.utl.page.BasePageableVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -83,8 +84,8 @@
 	private int  	userPoint ;	//사용자 보유 포인트
 	
 	//PG결제사 전송 파라미터
-	private String 	merchantKey = "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; 
-	private String 	merchantID = "itn180208m"; // 상점아이디
+	private String 	merchantKey = "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; 
+	private String 	merchantID = "nictest00m"; // 상점아이디
 	
 	//private String 	merchantKey = "EYzu8jGGMfqaDEp76gSckuvnaHHu+bC4opsSN6lHv3b2lurNYkVXrZ7Z1AoqQnXI3eLuaUFyoRNC6FkrzVjceg==";
 	//private String 	merchantID = "nicepay00m"; // 상점아이디
src/main/java/itn/let/mjo/pay/service/impl/MjonPayServiceImpl.java
--- src/main/java/itn/let/mjo/pay/service/impl/MjonPayServiceImpl.java
+++ src/main/java/itn/let/mjo/pay/service/impl/MjonPayServiceImpl.java
This diff is too big to display.
 
src/main/java/itn/let/mjo/pay/service/impl/PgAuthResult.java (added)
+++ src/main/java/itn/let/mjo/pay/service/impl/PgAuthResult.java
@@ -0,0 +1,29 @@
+package itn.let.mjo.pay.service.impl;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class PgAuthResult {
+    private boolean success;
+    private String authResultCode;
+    private String authResultMsg;
+    private String resultCode;
+    private String resultMsg;
+
+    private String payMethod;
+    private String goodsName;
+    private String amt;
+    private String tid;
+    private String mid;
+    private String moid;
+
+    private String cardCode;
+    private String cardName;
+
+    private String bankCode;
+    private String bankName;
+
+}
src/main/java/itn/let/mjo/pay/web/MjonPayController.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
This diff is too big to display.
src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
@@ -13,6 +13,8 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import itn.com.utl.page.PageableVO;
+import itn.com.utl.page.PaginationUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
@@ -50,38 +52,38 @@
 @Controller
 public class MjonPayV2Controller {
 	private static final Logger LOGGER = LoggerFactory.getLogger(MjonPayController.class);
-	
+
 	@Resource(name = "mjonPayService")
     private MjonPayService mjonPayService;
-	
+
 	@Resource(name = "mberManageService")
 	private EgovMberManageService mberManageService;
-	
+
 	@Resource(name = "mjonCandidateService")
     private MjonCandidateService mjonCandidateService;
-	
+
 	//전용계좌 서비스
 	@Resource(name = "vacsVactService")
 	private VacsVactService vacsVactService;
-	
+
     /** userManageService */
 	@Resource(name = "userManageService")
 	private EgovUserManageService userManageService;
-	
-	/** 사이트 설정 */ 
+
+	/** 사이트 설정 */
 	@Resource(name = "egovSiteManagerService")
-	EgovSiteManagerService egovSiteManagerService;	
+	EgovSiteManagerService egovSiteManagerService;
 
 	/** 알림전송 Util */
 	@Resource(name = "mjonNoticeSendUtil")
-	private MjonNoticeSendUtil mjonNoticeSendUtil;    
+	private MjonNoticeSendUtil mjonNoticeSendUtil;
 
 	@Resource(name="MjonCommon")
 	private MjonCommon mjonCommon;
-	
+
 	@Resource(name = "mberGrdService")
-	MberGrdService mberGrdService;	
-	
+	MberGrdService mberGrdService;
+
 	/** KG 모빌리언스 설정 */
 	// CARD
 	@Value("#{globalSettings['Globals.pay.kgm.card.cnSvcid']}")
@@ -94,13 +96,13 @@
 	private String globalRaSvcid;
 	@Value("#{globalSettings['Globals.pay.kgm.bank.payMode']}")
 	private String globalRaPayMode;
-	
+
 	// MOBILE
 	@Value("#{globalSettings['Globals.pay.kgm.mobile.mcSvcid']}")
 	private String globalMcSvcid;
 	@Value("#{globalSettings['Globals.pay.kgm.mobile.payMode']}")
-	private String globalMcPayMode;	
-	
+	private String globalMcPayMode;
+
     /**
      * 결제하기
      * @param searchVO
@@ -109,91 +111,71 @@
      * @throws Exception
      */
     @RequestMapping(value= {"/web/member/pay/PayView.do"})
-	public String PayViewV2(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, 
-			HttpServletRequest request, RedirectAttributes redirectAttributes,
-			ModelMap model) throws Exception{
-    	
-    	String pattern = (String) request.getAttribute(
-                HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
-    	
-    	//로그인 정보 획득
+	public String PayViewV2(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO,
+                            HttpServletRequest request,
+                            RedirectAttributes redirectAttributes,
+                            ModelMap model
+    ) throws Exception{
+
+        //로그인 정보 획득
     	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
     	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
-    	
+
 		if(loginVO == null) {
 			return "redirect:/web/user/login/login.do";
 		}
-		
-		// 하드코딩
-		// Itm Member Id Check
-		//if(!getItnMemberId(userId)) {
-		//	return "redirect:/web/main/mainPage.do";
-		//}
-		
+
 		MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId());
     	model.addAttribute("mberManageVO", mberManageVO);
-    	
+
     	MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
-    	if(userId != "") { 
+    	if(userId != "") {
     		mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
     		model.addAttribute("mjonCandidateVO",mjonCandidateVO);
-    	}		
-		
+    	}
+
     	mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "nicepay/payResultAjax.do") ;
-    	
-		/** pageing */
-		PaginationInfo paginationInfo = new PaginationInfo();
-		paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex());
-		paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit());
-		paginationInfo.setPageSize(mjonPayVO.getPageSize());
-		
-		mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
-		mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex());
-		mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
-		
-		if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
-			mjonPayVO.setSearchSortCnd("moid");
-			mjonPayVO.setSearchSortOrd("desc");
-		}
+
+        PaginationInfo paginationInfo = PaginationUtil.initWithSort( mjonPayVO,  "moid","desc");
+
 		mjonPayVO.setUserId(loginVO.getId());
-		
-		//대상 리스트 가져오기    
+
+		//대상 리스트 가져오기
 		VacsVactVO vacsVactVO = new VacsVactVO();
 		vacsVactVO.setMberId(loginVO.getId());
     	List<?> bankList = vacsVactService.selectBankAcctAllList(vacsVactVO);		//할당 가능한 계좌 수량  리스트 받아오기
     	List<?> myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO);		//내가 할당받은 전용계좌 리스트 받아오기
-    	
+
     	MjonVaMsgLogVO vaMsgLogVO = new MjonVaMsgLogVO();
     	vaMsgLogVO.setMberId(loginVO.getId());
-    	
+
     	Date now = new Date();
     	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
 		String date = sdf.format(now);
 		vaMsgLogVO.setSendDate(date);
-		
+
     	MjonVaMsgLogVO resultMsgInfo = mjonPayService.selectMyAcctSendCnt(vaMsgLogVO);
-    	
+
     	//대상 리스트, 페이징 정보 전달
     	model.addAttribute("resultList", bankList);
     	model.addAttribute("resultMyList", myBankList);
     	model.addAttribute("resultMsgInfo", resultMsgInfo);
     	model.addAttribute("mjonPayVO", mjonPayVO);
-    	
+
     	// 탭이동
     	String tabType = "1";
     	if(request.getParameter("tabType") != null) {
     		tabType = request.getParameter("tabType");
    		}
     	model.addAttribute("tabType", tabType);
-    	
+
     	MberGrdVO mberGrdVO = new MberGrdVO();
     	List<MberGrdVO> mberGrdSettingList = mberGrdService.selectMberGrdSettingList(mberGrdVO);
     	model.addAttribute("mberGrdSettingList", mberGrdSettingList);
-    	
+
 		return "/web/pay/PayView";
 	}
-    
-    
+
     /**
      * 결제하기
      * @param searchVO
@@ -202,53 +184,42 @@
      * @throws Exception
      */
     @RequestMapping(value= {"/web/member/pay/selectVaViewPrintPopupAjax.do"})
-	public String selectVaViewPrintPopupAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, 
+	public String selectVaViewPrintPopupAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO,
 			HttpServletRequest request, RedirectAttributes redirectAttributes,
 			ModelMap model) throws Exception{
-    	
-    	String pattern = (String) request.getAttribute(
-                HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
-    	
     	//로그인 정보 획득
     	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
     	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
     	String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName());
-    	
+
 		if(loginVO == null) {
 			return "redirect:/web/user/login/login.do";
 		}
-		
-		// 하드코딩
-		// Itm Member Id Check
-		//if(!getItnMemberId(userId)) {
-		//	return "redirect:/web/main/mainPage.do";
-		//}
-		
 		MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId());
     	model.addAttribute("mberManageVO", mberManageVO);
-    	
-		//회원 전용계좌 정보  리스트 가져오기    
+
+		//회원 전용계좌 정보  리스트 가져오기
 		VacsVactVO vacsVactVO = new VacsVactVO();
 		vacsVactVO.setMberId(loginVO.getId());
     	List<?> myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO);		//내가 할당받은 전용계좌 리스트 받아오기
-    	
+
     	//대상 리스트, 페이징 정보 전달
     	model.addAttribute("resultMyList", myBankList);
     	//사용자 정보
     	model.addAttribute("userId", userId);
     	model.addAttribute("userNm", userNm);
-    	
+
     	Calendar cal = Calendar.getInstance();
 
     	int year = cal.get(Calendar.YEAR);
     	int month = cal.get(Calendar.MONTH) + 1;
     	int day = cal.get(Calendar.DAY_OF_MONTH);
-    	
+
     	model.addAttribute("year", year);
     	model.addAttribute("month", month);
     	model.addAttribute("day", day);
-    	
-    	
+
+
 		return "/web/pay/PayVaViewPrintPopup";
 	}
 
@@ -257,7 +228,7 @@
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/selectNextPayMethodAjax.do")
-   	public ModelAndView selectNextPayMethodAjax(MjonPayVO mjonPayVO, 
+   	public ModelAndView selectNextPayMethodAjax(MjonPayVO mjonPayVO,
             HttpServletRequest request ) throws Exception {
 
        	ModelAndView modelAndView = new ModelAndView();
@@ -266,39 +237,39 @@
 		boolean isSuccess = true;
 		String msg = "";
 		String nextPayMethod = "";
-       	
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    			// 다음 결제시 결제수단 SELECT
    			nextPayMethod = userManageService.selectNextPayMethod(userId);
-   			// 실제 마지막 결제 방식 - 
-   			
+   			// 실제 마지막 결제 방식 -
+
    		}
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
+   		}
 
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
    		modelAndView.addObject("nextPayMethod", nextPayMethod);
-   		
+
    		return modelAndView;
-   	}    
-   	
+   	}
+
 	/**
    	 * 다음 결제시 결제수단 UPDATE
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/updateNextPayMethodAjax.do")
-   	public ModelAndView updateNextPayMethodAjax(UserManageVO userManageVO, 
+   	public ModelAndView updateNextPayMethodAjax(UserManageVO userManageVO,
             HttpServletRequest request ) throws Exception {
 
        	ModelAndView modelAndView = new ModelAndView();
@@ -306,15 +277,15 @@
 
 		boolean isSuccess = true;
 		String msg = "";
-       	
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    			// 다음 결제시 결제수단 SELECT
    			userManageVO.setMberId(userId);
@@ -323,21 +294,21 @@
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
+   		}
 
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
-   		
+
    		return modelAndView;
-   	}        
-    
+   	}
+
     /////////////////////////////////////////////////////////////////////////////////////////
     //
     //
     //	CARD
     //
     //
-    
+
     /**
    	 * KGM 간편결제 정보 Encode
    	 * @param MjonPayVO
@@ -346,7 +317,7 @@
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/kgmCardEncodeAjax.do")
-   	public ModelAndView kgmCardEncodeAjax(MjonPayVO mjonPayVO, 
+   	public ModelAndView kgmCardEncodeAjax(MjonPayVO mjonPayVO,
             HttpServletRequest request ) throws Exception {
 
        	ModelAndView modelAndView = new ModelAndView();
@@ -354,22 +325,22 @@
 
 		boolean isSuccess = true;
 		String msg = "";
-       	
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    		String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName());
 
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    		  	// Get Server Info
    			String kgmServerName = request.getServerName();
    			String kgmPath = "";
    			kgmPath = getKgServerPath(request);
-   			
+
    			// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
    			String appr_dtm = dateFormat.format(new Date());
@@ -430,7 +401,7 @@
    				Notiurl		= McashCipher.encodeString(Notiurl, Tradeid);
    				Prdtprice	= McashCipher.encodeString(Prdtprice, Tradeid);
    				Cryptstring	= McashCipher.encodeString(Cryptstring, Tradeid);
-   			}   			
+   			}
 
    			// 필수
    			modelAndView.addObject("CASH_GB", CASH_GB);
@@ -439,7 +410,7 @@
    			modelAndView.addObject("PAY_MODE", PAY_MODE);
    			modelAndView.addObject("Prdtnm", Prdtnm);
    			modelAndView.addObject("Siteurl", Siteurl);
-   			modelAndView.addObject("Tradeid", Tradeid);   			
+   			modelAndView.addObject("Tradeid", Tradeid);
    			// 선택
    			modelAndView.addObject("CALL_TYPE", CALL_TYPE);
    			modelAndView.addObject("Closeurl", Closeurl);
@@ -470,22 +441,22 @@
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
+   		}
 
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
-   		
+
    		return modelAndView;
-   	}    
-    
+   	}
+
     /**
-     * KGM Card 결제 notiUrl 페이지 
+     * KGM Card 결제 notiUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/notiUrlCardAjax.do"})
-	public String notiUrlCardAjax(			
+	public String notiUrlCardAjax(
 			HttpServletRequest request
 			, HttpServletResponse response
 			, ModelMap model
@@ -493,7 +464,7 @@
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-    	
+
     	String rtnMsg = "";
 
     	String CASH_GB		= request.getParameter("CASH_GB"); 		/* 결제수단(CN)*/
@@ -511,14 +482,14 @@
     	String Cardcode		= request.getParameter("Cardcode");		/* 결제 카드코드 */
     	String Cardname		= request.getParameter("Cardname");		/* 결제 카드사명 */
     	String chkValue		= request.getParameter("chkValue");		/* 결과값 검증 hash데이터 */
-    	String spayMethod	= request.getParameter("Paymethod");	/* 지불방법 (간편결제 시에만 응답) */	
+    	String spayMethod	= request.getParameter("Paymethod");	/* 지불방법 (간편결제 시에만 응답) */
     	String MSTR			= request.getParameter("MSTR");			//[2000byte 이하] 가맹점 전달 콜백변수
 
     	System.out.println("#############################################################");
 		System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
 		System.out.println("KG MOBILIANS NotiUrl - CARD MSTR : " + MSTR);
 		System.out.println("KG MOBILIANS NotiUrl - CARD SpayMethod : " + spayMethod);
-    	
+
     	String cpChkValue = "";
 		cpChkValue = "Mobilid="+ Mobilid +
 								"&Mrchid=null"+
@@ -529,32 +500,32 @@
 
 		String encChkValue = McashCipher.encodeString(cpChkValue, Tradeid);
 		//chkValue = "ZZZZZ";
-		//encChkValue = chkValue; 
+		//encChkValue = chkValue;
 		System.out.println("KG MOBILIANS NotiUrl - CARD chkValue : " + chkValue);
 		System.out.println("KG MOBILIANS NotiUrl - CARD encChkValue : " + encChkValue);
 		System.out.println("KG MOBILIANS NotiUrl - CARD getIsKgmServerIp : " + getIsKgmServerIp(request));	// Kgm Ip Check
-	   		
+
 		try {
 			// Step 1. Tid로 존재여부 체크
 			int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
 
 			if (tidCnt > 0) {
     			// 저장된 데이터 있을경우
-				rtnMsg = "SUCCESS";	    
-    			
+				rtnMsg = "SUCCESS";
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
-				System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg2 : " + rtnMsg);    					    			
-			} 
+				System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg2 : " + rtnMsg);
+			}
 			else if (tidCnt == 0) {
 				// Check0. 데이터 위·변조 체크
 				if (!encChkValue.equals(chkValue)) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - CARD : 데이터 위·변조 가능성 높으니 결제오류 처리  => " + cpChkValue);
-					
+
 					Resultcd = "9999";
 					Resultmsg = "데이터 위·변조 가능성이 있어 결제오류 처리했습니다. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요.";
-					
+
 			    	try {
 			    		// 법인폰 알람여부 체크
 			    		JoinSettingVO joinSettingVO = new JoinSettingVO();
@@ -562,30 +533,30 @@
 			    		// SMS 체크
 			    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 			    			// 스미싱의심 SMS 알림전송
-			    			mjonNoticeSendUtil.smishingSmsNoticeSend("간편결제 데이터 위·변조 가능성 결제오류 처리", Userid, "");    		
-			    		}    		
-			    		
+			    			mjonNoticeSendUtil.smishingSmsNoticeSend("간편결제 데이터 위·변조 가능성 결제오류 처리", Userid, "");
+			    		}
+
 			    		// SLACK 체크
-			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 				    		// Slack 메시지 발송(단순본문)
 				    		String msg = "[문자온] " + Userid + "님 결제건 알림 => 데이터 위·변조 가능성이 있어 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
-				    		mjonCommon.sendSimpleSlackMsg(msg);    		
+				    		mjonCommon.sendSimpleSlackMsg(msg);
 			    		}
 			    	}
 			    	catch (Exception e) {
 						System.out.println("#############################################################");
-						System.out.println("KG MOBILIANS NotiUrl - CARD : 데이터 위·변조 가능성 높으니 결제오류 처리  => SMS, 슬랙 알림 오류");			    		
-			    	}					
+						System.out.println("KG MOBILIANS NotiUrl - CARD : 데이터 위·변조 가능성 높으니 결제오류 처리  => SMS, 슬랙 알림 오류");
+			    	}
 				}
-				
+
 				// Check1. KG모빌리언스 호출아이피 체크
 				if (!getIsKgmServerIp(request)) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - CARD : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
-					
+
 					Resultcd = "9998";
 					Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제  여부 확인후, 고객님께 안내후 결제취소해주세요.";
-					
+
 			    	try {
 			    		// 법인폰 알람여부 체크
 			    		JoinSettingVO joinSettingVO = new JoinSettingVO();
@@ -593,23 +564,23 @@
 			    		// SMS 체크
 			    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 			    			// 스미싱의심 SMS 알림전송
-			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");    		
-			    		}    		
-			    		
+			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
+			    		}
+
 			    		// SLACK 체크
-			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 				    		// Slack 메시지 발송(단순본문)
 				    		String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
-				    		mjonCommon.sendSimpleSlackMsg(msg);    		
+				    		mjonCommon.sendSimpleSlackMsg(msg);
 			    		}
 			    	}
 			    	catch (Exception e) {
 						System.out.println("#############################################################");
-						System.out.println("KG MOBILIANS NotiUrl - CARD : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");			    		
-			    	}										
+						System.out.println("KG MOBILIANS NotiUrl - CARD : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");
+			    	}
 				}
-				
-				// 저장 Start 
+
+				// 저장 Start
 		    	// 사용자 정보
 		    	String mberNm = "";
 		    	String moblphonNo = "";
@@ -620,9 +591,9 @@
 		    	if (userInfo != null) {
 		    		mberNm = userInfo.getMberNm();
 		    		moblphonNo = userInfo.getMoblphonNo();
-		    		mberEmailAdres = userInfo.getMberEmailAdres();    		
+		    		mberEmailAdres = userInfo.getMberEmailAdres();
 		    	}
-		    	
+
 		    	// MjonPayVO
 		    	MjonPayVO mjonPayVO = new MjonPayVO();
 		    	mjonPayVO.setResultCd(Resultcd);
@@ -653,13 +624,13 @@
 		    	}
 		    	mjonPayVO.setPgStatus(pgStatus);		// 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
 		    	mjonPayVO.setRcptType("9");				// 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
-		    	mjonPayVO.setResultCode(Resultcd); 
-		    	mjonPayVO.setResultMsg(Resultmsg); 
+		    	mjonPayVO.setResultCode(Resultcd);
+		    	mjonPayVO.setResultMsg(Resultmsg);
 		    	mjonPayVO.setAmt(Prdtprice);			// 결제금액
 				mjonPayVO.setPayMethod("SPAY");		// 결제방법
 				mjonPayVO.setSpayMethod(spayMethod);	// 간편결제 결제방법
 				mjonPayVO.setSpayDiv(MSTR);	// 간편결제분류
-				
+
 				mjonPayVO.setPgCode("KGM");				//
 				mjonPayVO.setGoodsName(Prdtnm);	//
 				mjonPayVO.setPhone("");					// 모바일
@@ -675,12 +646,12 @@
 		    	// 추가
 		    	mjonPayVO.setCardCode(Cardcode);
 		    	mjonPayVO.setCardName(Cardname);
-				
+
 				// 인서트
-		    	mjonPayService.insertKgmAllV2(mjonPayVO);    						
-				
+		    	mjonPayService.insertKgmAllV2(mjonPayVO);
+
 		    	rtnMsg = "SUCCESS";
-				
+
 		    	try {
 		    		// 대상 : 휴대폰결제, 즉시이체, 전용계좌
 		    		// Step 1. 스미싱의심 지정 여부
@@ -696,32 +667,32 @@
 					    		// SMS 체크
 					    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 					    			// 스미싱의심 SMS 알림전송
-					    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/간편결제 첫결제", Userid, mberNm);    		
-					    		}    								    		
-			    				
+					    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/간편결제 첫결제", Userid, mberNm);
+					    		}
+
 			    				// SLACK 체크
-					    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+					    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 						    		// Slack 메시지 발송(단순본문)
 						    		String msg = "[문자온] 스미싱의심/간편결제 첫결제 - " + mberNm +"("+ Userid + ")";
-						    		mjonCommon.sendSimpleSlackMsg(msg);    		
+						    		mjonCommon.sendSimpleSlackMsg(msg);
 					    		}
-					    		
+
 					    		// 스미싱 의심회원으로 변경
 					    		UserManageVO userManageVO = new UserManageVO();
 					    		userManageVO.setSmishingYn("Y");
 					    		userManageVO.setMberId(Userid);
-					    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);				    				
+					    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
 			    			}
 			    		}
-		    		}			    		
+		    		}
 		    	}
 		    	catch (Exception e) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - CARD 슬랙알림 & 스미싱의심 처리 Error");
 					System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
-					System.out.println("KG MOBILIANS NotiUrl - CARD e.getMessage() : " + e.getMessage());		    		
-		    	}		    	
-		    	
+					System.out.println("KG MOBILIANS NotiUrl - CARD e.getMessage() : " + e.getMessage());
+		    	}
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
 				System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg : " + rtnMsg);
@@ -729,62 +700,62 @@
 		}
 		catch(Exception e) {
 			rtnMsg = "FAIL";
-			
+
 			System.out.println("#############################################################");
 			System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
-			System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg : " + rtnMsg);    	
+			System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg : " + rtnMsg);
 			System.out.println("KG MOBILIANS NotiUrl - CARD e.getMessage() : " + e.getMessage());
-   		}		    				
-	
+   		}
+
     	model.addAttribute("returnMsg", rtnMsg);
-    	
+
 		return "web/cop/kgmV2/cardNotiUrl";
 	}
-    
+
     /**
-     * KGM Card 결제 okUrl 페이지 
+     * KGM Card 결제 okUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/okUrlCardAjax.do"})
-	public String okUrlCardAjax(			
+	public String okUrlCardAjax(
 			HttpServletRequest request
 			, HttpSession session
-			, HttpServletResponse response			
+			, HttpServletResponse response
 			, ModelMap model
 		) throws Exception{
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-		
+
     	String rstMsg = "";
     	if("0000".equals(request.getParameter("Resultcd"))) {
     		rstMsg = "간편결제가 정상적으로 완료되었습니다.";
     	}
     	else {
     		rstMsg = "간편결제가 실패했습니다.";
-    	}    	
-    	
+    	}
+
     	model.addAttribute("Resultcd", request.getParameter("Resultcd"));
-    	model.addAttribute("Resultmsg", rstMsg);    	
+    	model.addAttribute("Resultmsg", rstMsg);
 
 		System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
 		System.out.println("KG MOBILIANS OkUrl - CARD ResultCd : " + request.getParameter("Resultcd"));
-		System.out.println("KG MOBILIANS OkUrl - CARD ResultMsg : " + rstMsg);    					    			
-		
-		
+		System.out.println("KG MOBILIANS OkUrl - CARD ResultMsg : " + rstMsg);
+
+
     	return "web/cop/kgmV2/cardOkUrl";
-	}   	
-    
-   	
+	}
+
+
     /////////////////////////////////////////////////////////////////////////////////////////
     //
     //
     //	MOBILE
     //
     //
-   	
+
     /**
    	 * KGM 모바일 정보 Encode
    	 * @param MjonPayVO
@@ -793,7 +764,7 @@
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/kgmMobileEncodeAjax.do")
-   	public ModelAndView kgmMobileEncodeAjax(MjonPayVO mjonPayVO, 
+   	public ModelAndView kgmMobileEncodeAjax(MjonPayVO mjonPayVO,
             HttpServletRequest request ) throws Exception {
 
        	ModelAndView modelAndView = new ModelAndView();
@@ -801,21 +772,21 @@
 
 		boolean isSuccess = true;
 		String msg = "";
-       	
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    		  	// Get Server Info
    			String kgmServerName = request.getServerName();
    			String kgmPath = "";
    			kgmPath = getKgServerPath(request);
-   			
+
    			// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
    			String appr_dtm = dateFormat.format(new Date());
@@ -829,19 +800,19 @@
    			*****************************************************************************************/
    			String MC_SVCID		= globalMcSvcid;	//C	//[  12byte 고정] 모빌리언스에서 부여한 서비스ID (12byte 숫자 형식)
 	   		String PAY_MODE		= globalMcPayMode;				//C	//[   2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금)
-   			String Prdtprice = request.getParameter("Prdtprice");;						//결제요청금액.	
+   			String Prdtprice = request.getParameter("Prdtprice");;						//결제요청금액.
    			String Okurl = kgmPath + "/web/kgm/pay/okUrlMobileAjax.do";							//성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp )
 	   		String Prdtnm		= "캐시충전";			//C	//[  50byte 이하] 상품명
 	   		String Siteurl		= kgmServerName;			// localhost [  20byte 이하] 가맹점도메인 (예: www.mcash.co.kr)
-	   		String Tradeid		= MC_SVCID + "_" + appr_dtm + "_" + numberGen(6,1);	//[4byte 이상, 40byte 이하] 가맹점거래번호. 결제 요청 시 마다 unique한 값을 세팅해야 함. //해당 샘플에는 테스트를 위해 {가맹점 서비스ID + 요청일시} 형식으로 세팅하였음.													
+	   		String Tradeid		= MC_SVCID + "_" + appr_dtm + "_" + numberGen(6,1);	//[4byte 이상, 40byte 이하] 가맹점거래번호. 결제 요청 시 마다 unique한 값을 세팅해야 함. //해당 샘플에는 테스트를 위해 {가맹점 서비스ID + 요청일시} 형식으로 세팅하였음.
 	   		String Notiurl		= kgmPath + "/web/kgm/pay/notiUrlMobileAjax.do";
-	
+
 	   		/*****************************************************************************************
 	   		- 디자인 관련 필수항목
 	   		*****************************************************************************************/
 	   		String LOGO_YN		= "N";		//[   1byte 고정] 가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함))
 	   		String CALL_TYPE	= "P";		//[   4byte 이하] 결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임)
-	
+
 	   		/*****************************************************************************************
 	   		- 선택 입력 항목
 	   		*****************************************************************************************/
@@ -863,7 +834,7 @@
 	   		String MSTR				= "";	//[2000byte 이하] 가맹점 콜백 변수. 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &, % 는 사용불가 (예: MSTR="a=1|b=2|c=3")
 	   		String MC_EZ_YN		= "Y";	//[   1byte 고정] 간소화결제여부. 간소화결제 사용시  "Y" 로 설정 (N: 미사용-default, Y: 사용)
 	   		String MC_EZ_KEY		= "";	//[   20byte 고정] 간소화결제 사용자키
-	   		
+
 	   		/*****************************************************************************************
 	   		- 오픈마켓의 경우 아래의 정보를 입력해야 합니다.
 	   		장바구니 결제의 경우 대표 판매자 외 n명, 대표 판매자 연락처를 입력하세요.
@@ -872,7 +843,7 @@
 	   		*****************************************************************************************/
 	   		String Sellernm			= "";	//[  50byte 이하] 실판매자 이름 (오픈마켓의 경우 실 판매자 정보 필수)
 	   		String Sellertel		= "";	//[  15byte 이하] 실판매자 전화번호 (오픈마켓의 경우 실 판매자 정보 필수)
-	
+
 	   		/*****************************************************************************************
 	   		- 디자인 관련 선택항목 (향후 변경될 수 있습니다.)
 	   		*****************************************************************************************/
@@ -901,7 +872,7 @@
    				Notiurl		= McashCipher.encodeString(Notiurl, Tradeid);
    				Prdtprice	= McashCipher.encodeString(Prdtprice, Tradeid);
    				Cryptstring	= McashCipher.encodeString(Cryptstring, Tradeid);
-   			}   			
+   			}
 
    			// 필수
    			modelAndView.addObject("CASH_GB", CASH_GB);
@@ -921,7 +892,7 @@
 	   		modelAndView.addObject("MC_DEFAULTCOMMID", MC_DEFAULTCOMMID);
 	   		modelAndView.addObject("MC_FIXCOMMID", MC_FIXCOMMID);
 	   		modelAndView.addObject("MC_FIXCOMMID", MC_FIXCOMMID);
-	   		modelAndView.addObject("Item", Item);   			
+	   		modelAndView.addObject("Item", Item);
 	   		modelAndView.addObject("Prdtcd", Prdtcd);
 	   		modelAndView.addObject("MC_Cpcode", MC_Cpcode);
 	   		modelAndView.addObject("Notiemail", Notiemail);
@@ -936,7 +907,7 @@
 	   		modelAndView.addObject("PRDT_HIDDEN", PRDT_HIDDEN);
 	   		modelAndView.addObject("EMAIL_HIDDEN", EMAIL_HIDDEN);
 	   		modelAndView.addObject("CONTRACT_HIDDEN", CONTRACT_HIDDEN);
-   			
+
    			modelAndView.addObject("CALL_TYPE", CALL_TYPE);
    			modelAndView.addObject("Closeurl", Closeurl);
    			modelAndView.addObject("MSTR", MSTR);
@@ -953,22 +924,22 @@
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
+   		}
 
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
-   		
+
    		return modelAndView;
-   	}       
-    
+   	}
+
     /**
-     * KGM Mobile 결제 notiUrl 페이지 
+     * KGM Mobile 결제 notiUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/notiUrlMobileAjax.do"})
-	public String notiUrlMobileAjax(			
+	public String notiUrlMobileAjax(
 			HttpServletRequest request
 			, HttpServletResponse response
 			, ModelMap model
@@ -976,13 +947,13 @@
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-    	
+
 		response.setContentType("text/xml; charset=euc-kr");
 	    request.setCharacterEncoding("euc-kr");
-		
+
 	    /*****************************************************************************************/
     	String CASH_GB		= "MC";					//[   2byte 고정] 결제수단구분. "MC" 고정값. 수정불가!
-    	
+
     	String rtnMsg = "";
     	String Svcid		= request.getParameter("Svcid"); 		/* 서비스아이디 */
     	String Mobilid		= request.getParameter("Mobilid"); 		/* 모빌리언스 거래번호 */
@@ -1002,32 +973,32 @@
     	String No			= request.getParameter("No");			//[  11byte 이하] 폰번호
     	String USERKEY		= request.getParameter("USERKEY");		//[  15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY
     	String MC_EZ_KEY	= request.getParameter("Ezkey");		//[  20byte 고정] 간소화결제 사용자키
-    	
+
     	System.out.println("#############################################################");
 		System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
 		System.out.println("KG MOBILIANS NotiUrl - MOBILE getIsKgmServerIp : " + getIsKgmServerIp(request));	// Kgm Ip Check
-		
+
 		try {
 			// Step 1. Tid로 존재여부 체크
 			int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
 
 			if (tidCnt > 0) {
     			// 저장된 데이터 있을경우
-				rtnMsg = "SUCCESS";	    
-    			
+				rtnMsg = "SUCCESS";
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
-				System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg2 : " + rtnMsg);    					    			
-			} 
+				System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg2 : " + rtnMsg);
+			}
 			else if (tidCnt == 0) {
 				// Check1. KG모빌리언스 호출아이피 체크
 				if (!getIsKgmServerIp(request)) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
-					
+
 					Resultcd = "9998";
 					Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제  여부 확인후, 고객님께 안내후 결제취소해주세요.";
-					
+
 			    	try {
 			    		// 법인폰 알람여부 체크
 			    		JoinSettingVO joinSettingVO = new JoinSettingVO();
@@ -1035,23 +1006,23 @@
 			    		// SMS 체크
 			    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 			    			// 스미싱의심 SMS 알림전송
-			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");    		
-			    		}    		
-			    		
+			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
+			    		}
+
 			    		// SLACK 체크
-			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 				    		// Slack 메시지 발송(단순본문)
 				    		String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
-				    		mjonCommon.sendSimpleSlackMsg(msg);    		
+				    		mjonCommon.sendSimpleSlackMsg(msg);
 			    		}
 			    	}
 			    	catch (Exception e) {
 						System.out.println("#############################################################");
-						System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");			    		
-			    	}										
+						System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");
+			    	}
 				}
-				
-				// 저장 Start 
+
+				// 저장 Start
 		    	// 사용자 정보
 		    	String mberNm = "";
 		    	String moblphonNo = "";
@@ -1062,9 +1033,9 @@
 		    	if (userInfo != null) {
 		    		mberNm = userInfo.getMberNm();
 		    		moblphonNo = userInfo.getMoblphonNo();
-		    		mberEmailAdres = userInfo.getMberEmailAdres();    		
+		    		mberEmailAdres = userInfo.getMberEmailAdres();
 		    	}
-		    	
+
 		    	// MjonPayVO
 		    	MjonPayVO mjonPayVO = new MjonPayVO();
 		    	mjonPayVO.setResultCd(Resultcd);
@@ -1084,7 +1055,7 @@
 		    	mjonPayVO.setUserId(Userid);
 		    	mjonPayVO.setUserKey(USERKEY);
 		    	mjonPayVO.setMcEzKey(MC_EZ_KEY);
-		    	
+
 		    	// 추가정보(mj_pg)
 		    	String pgStatus = "";
 		    	if("0000".equals(Resultcd)) {
@@ -1095,13 +1066,13 @@
 		    	}
 		    	mjonPayVO.setPgStatus(pgStatus);		// 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
 		    	mjonPayVO.setRcptType("9");				// 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
-		    	mjonPayVO.setResultCode(Resultcd); 
-		    	mjonPayVO.setResultMsg(Resultmsg); 
+		    	mjonPayVO.setResultCode(Resultcd);
+		    	mjonPayVO.setResultMsg(Resultmsg);
 		    	mjonPayVO.setAmt(Prdtprice);			// 결제금액
 				mjonPayVO.setPayMethod("CELLPHONE");	// 결제방법
 				mjonPayVO.setSpayMethod("");	// 간편결제 결제방법
 				mjonPayVO.setSpayDiv("");	// 간편결제분류
-				
+
 				mjonPayVO.setPgCode("KGM");				//
 				mjonPayVO.setGoodsName(Prdtnm);	//
 				mjonPayVO.setPhone("");					// 모바일
@@ -1114,12 +1085,12 @@
 		    	mjonPayVO.setBuyerName(mberNm);
 		    	mjonPayVO.setBuyerTel(moblphonNo);
 		    	mjonPayVO.setBuyerEmail(mberEmailAdres);
-				
+
 				// 인서트
-		    	mjonPayService.insertKgmAllV2(mjonPayVO);    						
-				
+		    	mjonPayService.insertKgmAllV2(mjonPayVO);
+
 		    	rtnMsg = "SUCCESS";
-		    	
+
 		    	try {
 			    	// 휴대폰 15만원결제 => 법인폰 알림
 			    	if (mjonPayVO.getAmt().equals("165000")) {
@@ -1129,16 +1100,16 @@
 			    		// SMS 체크
 			    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 			    			// 스미싱의심 SMS 알림전송
-			    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm);    		
-			    		}    		
-			    		
+			    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm);
+			    		}
+
 			    		// SLACK 체크
-			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 				    		// Slack 메시지 발송(단순본문)
 				    		String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ Userid + ")";
-				    		mjonCommon.sendSimpleSlackMsg(msg);    		
+				    		mjonCommon.sendSimpleSlackMsg(msg);
 			    		}
-			    		
+
 			    		// 스미싱 의심회원으로 변경
 			    		UserManageVO userManageVO = new UserManageVO();
 			    		userManageVO.setSmishingYn("Y");
@@ -1160,33 +1131,33 @@
 						    		// SMS 체크
 						    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 						    			// 스미싱의심 SMS 알림전송
-						    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 첫결제", Userid, mberNm);    		
-						    		}    								    		
-				    				
+						    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 첫결제", Userid, mberNm);
+						    		}
+
 				    				// SLACK 체크
-						    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+						    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 							    		// Slack 메시지 발송(단순본문)
 							    		String msg = "[문자온] 스미싱의심/휴대폰 첫결제 - " + mberNm +"("+ Userid + ")";
-							    		mjonCommon.sendSimpleSlackMsg(msg);    		
+							    		mjonCommon.sendSimpleSlackMsg(msg);
 						    		}
-						    		
+
 						    		// 스미싱 의심회원으로 변경
 						    		UserManageVO userManageVO = new UserManageVO();
 						    		userManageVO.setSmishingYn("Y");
 						    		userManageVO.setMberId(Userid);
-						    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);				    				
+						    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
 				    			}
 				    		}
-			    		}			    		
+			    		}
 			    	}
 		    	}
 		    	catch (Exception e) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - MOBILE 슬랙알림 & 스미싱의심 처리 Error");
 					System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
-					System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage());		    		
+					System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage());
 		    	}
-				
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
 				System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg);
@@ -1194,61 +1165,61 @@
 		}
 		catch(Exception e) {
 			rtnMsg = "FAIL";
-			
+
 			System.out.println("#############################################################");
 			System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
-			System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg);    	
+			System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg);
 			System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage());
-   		}		    				
-	
+   		}
+
     	model.addAttribute("returnMsg", rtnMsg);
-    	
+
 		return "web/cop/kgmV2/mobileNotiUrl";
 	}
-    
+
     /**
-     * KGM Mobile 결제 okUrl 페이지 
+     * KGM Mobile 결제 okUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/okUrlMobileAjax.do"})
-	public String okUrlMobileAjax(			
+	public String okUrlMobileAjax(
 			HttpServletRequest request
 			, HttpSession session
-			, HttpServletResponse response			
+			, HttpServletResponse response
 			, ModelMap model
 		) throws Exception{
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-		
+
     	String rstMsg = "";
     	if("0000".equals(request.getParameter("Resultcd"))) {
     		rstMsg = "휴대폰결제가 정상적으로 완료되었습니다.";
     	}
     	else {
     		rstMsg = "휴대폰결제가 실패했습니다.";
-    	}    	
-    	
+    	}
+
     	model.addAttribute("Resultcd", request.getParameter("Resultcd"));
-    	model.addAttribute("Resultmsg", rstMsg);    	
+    	model.addAttribute("Resultmsg", rstMsg);
 
 		System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
 		System.out.println("KG MOBILIANS OkUrl - MOBILE ResultCd : " + request.getParameter("Resultcd"));
-		System.out.println("KG MOBILIANS OkUrl - MOBILE ResultMsg : " + rstMsg);    					    			
-		
+		System.out.println("KG MOBILIANS OkUrl - MOBILE ResultMsg : " + rstMsg);
+
     	return "web/cop/kgmV2/mobileOkUrl";
-	}     
-    
-   	
+	}
+
+
     /////////////////////////////////////////////////////////////////////////////////////////
     //
     //
     //	BANK
     //
     //
-   	
+
     /**
    	 * KGM 즉시이체 정보 Encode
    	 * @param MjonPayVO
@@ -1257,7 +1228,7 @@
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/kgmBankEncodeAjax.do")
-   	public ModelAndView kgmBankEncodeAjax(MjonPayVO mjonPayVO, 
+   	public ModelAndView kgmBankEncodeAjax(MjonPayVO mjonPayVO,
             HttpServletRequest request ) throws Exception {
 
        	ModelAndView modelAndView = new ModelAndView();
@@ -1265,21 +1236,21 @@
 
 		boolean isSuccess = true;
 		String msg = "";
-       	
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    		  	// Get Server Info
    			String kgmServerName = request.getServerName();
    			String kgmPath = "";
    			kgmPath = getKgServerPath(request);
-   			
+
    			// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
    			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
    			String appr_dtm = dateFormat.format(new Date());
@@ -1318,7 +1289,7 @@
 	   		*****************************************************************************************/
 	   		String LOGO_YN		= "N";		//[   1byte 고정] 가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함))
 	   		String CALL_TYPE	= "P";		//[   4byte 이하] 결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임)
-	   		
+
    			/*****************************************************************************************
    			- 디자인 관련 선택항목 (향후 변경될 수 있습니다.)
    			*****************************************************************************************/
@@ -1328,8 +1299,8 @@
    			String HEIGHT			= "";	//[   4byte 이하] 결제창 높이 (px단위: iframe 등 사용시 결제창 높이 조절, 팝업창 등 호출시 "" 로 세팅)
    			String PRDT_HIDDEN		= "";	//[   1byte 고정] iframe 사용시 상품명 숨김 여부 (가맹점 디자인 결제창으로 결제 입력 사항만 iframe에서 사용시)
    			String EMAIL_HIDDEN		= "";	//[   1byte 고정] 결제자 e-mail 입력창 숨김 여부 (N: 표시-default, Y: 미표시)
-   			String CONTRACT_HIDDEN	= "";	//[   1byte 고정] 이용약관 숨김 여부 (Y: 표시-default,  N: 미표시)   			
-   			
+   			String CONTRACT_HIDDEN	= "";	//[   1byte 고정] 이용약관 숨김 여부 (Y: 표시-default,  N: 미표시)
+
    			/*****************************************************************************************
    			- 암호화 처리 (암호화 사용 시)
    			Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다.
@@ -1347,7 +1318,7 @@
    				Notiurl		= McashCipher.encodeString(Notiurl, Tradeid);
    				Prdtprice	= McashCipher.encodeString(Prdtprice, Tradeid);
    				Cryptstring	= McashCipher.encodeString(Cryptstring, Tradeid);
-   			}   			
+   			}
 
    			// 필수
    			modelAndView.addObject("CASH_GB", CASH_GB);
@@ -1355,7 +1326,7 @@
    			modelAndView.addObject("PAY_MODE", PAY_MODE);
    			modelAndView.addObject("Prdtnm", Prdtnm);
    			modelAndView.addObject("Siteurl", Siteurl);
-   			modelAndView.addObject("Tradeid", Tradeid);   			
+   			modelAndView.addObject("Tradeid", Tradeid);
    			// 선택
    			modelAndView.addObject("Closeurl", Closeurl);
    			modelAndView.addObject("MSTR", MSTR);
@@ -1373,7 +1344,7 @@
    			modelAndView.addObject("EMAIL_HIDDEN", EMAIL_HIDDEN);
    			modelAndView.addObject("CONTRACT_HIDDEN", CONTRACT_HIDDEN);
    			modelAndView.addObject("LOGO_YN", LOGO_YN);
-   			modelAndView.addObject("CALL_TYPE", CALL_TYPE);   			
+   			modelAndView.addObject("CALL_TYPE", CALL_TYPE);
    			// 변환
    			modelAndView.addObject("Cryptyn", Cryptyn);
    	   		modelAndView.addObject("Okurl", Okurl);
@@ -1385,22 +1356,22 @@
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
+   		}
 
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
-   		
+
    		return modelAndView;
-   	}    
-    
+   	}
+
     /**
-     * KGM Bank 결제notiUrl 페이지 
+     * KGM Bank 결제notiUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/notiUrlBankAjax.do"})
-	public String notiUrlBankAjax(			
+	public String notiUrlBankAjax(
 			HttpServletRequest request
 			, HttpServletResponse response
 			, ModelMap model
@@ -1408,10 +1379,10 @@
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-    	
+
 		/*****************************************************************************************/
 		String CASH_GB		= "RA";		//[   2byte 고정] 결제수단구분. "RA" 고정값. 수정불가!
-		
+
     	String rtnMsg = "";
     	String Resultcd		= request.getParameter("Resultcd");		//[   4byte 고정] 결과코드
     	String Resultmsg	= request.getParameter("Resultmsg");	//[ 100byte 이하] 결과메세지
@@ -1426,33 +1397,33 @@
     	// 추가
     	String Payeremail	= request.getParameter("Payeremail");	/* 결제자 이메일 */
     	String Banknm		= request.getParameter("Banknm");	/* 은행명 */
-    	
+
     	System.out.println("#############################################################");
 		System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
 		System.out.println("KG MOBILIANS NotiUrl - BANK Banknm : " + Banknm);
 		System.out.println("KG MOBILIANS NotiUrl - BANK getIsKgmServerIp : " + getIsKgmServerIp(request));	// Kgm Ip Check
-		
+
 		try {
 			// Step 1. Tid로 존재여부 체크
 			int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
 
 			if (tidCnt > 0) {
     			// 저장된 데이터 있을경우
-				rtnMsg = "SUCCESS";	    	
-    			
+				rtnMsg = "SUCCESS";
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
-				System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg);    					    			
-			} 
+				System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg);
+			}
 			else if (tidCnt == 0) {
 				// Check1. KG모빌리언스 호출아이피 체크
 				if (!getIsKgmServerIp(request)) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - BANK : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
-					
+
 					Resultcd = "9998";
 					Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제  여부 확인후, 고객님께 안내후 결제취소해주세요.";
-					
+
 			    	try {
 			    		// 법인폰 알람여부 체크
 			    		JoinSettingVO joinSettingVO = new JoinSettingVO();
@@ -1460,23 +1431,23 @@
 			    		// SMS 체크
 			    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 			    			// 스미싱의심 SMS 알림전송
-			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");    		
-			    		}    		
-			    		
+			    			mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
+			    		}
+
 			    		// SLACK 체크
-			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+			    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 				    		// Slack 메시지 발송(단순본문)
 				    		String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
-				    		mjonCommon.sendSimpleSlackMsg(msg);    		
+				    		mjonCommon.sendSimpleSlackMsg(msg);
 			    		}
 			    	}
 			    	catch (Exception e) {
 						System.out.println("#############################################################");
-						System.out.println("KG MOBILIANS NotiUrl - BANK : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");			    		
-			    	}										
+						System.out.println("KG MOBILIANS NotiUrl - BANK : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리  => SMS, 슬랙 알림 오류");
+			    	}
 				}
-				
-				// 저장 Start 
+
+				// 저장 Start
 		    	// 사용자 정보
 		    	String mberNm = "";
 		    	String moblphonNo = "";
@@ -1487,9 +1458,9 @@
 		    	if (userInfo != null) {
 		    		mberNm = userInfo.getMberNm();
 		    		moblphonNo = userInfo.getMoblphonNo();
-		    		mberEmailAdres = userInfo.getMberEmailAdres();    		
+		    		mberEmailAdres = userInfo.getMberEmailAdres();
 		    	}
-		    	
+
 		    	// MjonPayVO
 		    	MjonPayVO mjonPayVO = new MjonPayVO();
 		    	mjonPayVO.setResultCd(Resultcd);
@@ -1520,12 +1491,12 @@
 		    	}
 		    	mjonPayVO.setPgStatus(pgStatus);		// 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
 		    	mjonPayVO.setRcptType("9");				// 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
-		    	mjonPayVO.setResultCode(Resultcd); 
-		    	mjonPayVO.setResultMsg(Resultmsg); 
+		    	mjonPayVO.setResultCode(Resultcd);
+		    	mjonPayVO.setResultMsg(Resultmsg);
 		    	mjonPayVO.setAmt(Prdtprice);			// 결제금액
 				mjonPayVO.setPayMethod("BANK");	// 결제방법
 				mjonPayVO.setSpayMethod("");	// 간편결제 결제방법
-				mjonPayVO.setSpayDiv("");	// 간편결제분류				
+				mjonPayVO.setSpayDiv("");	// 간편결제분류
 				mjonPayVO.setPgCode("KGM");				//
 				mjonPayVO.setGoodsName(Prdtnm);	//
 				mjonPayVO.setPhone("");					// 모바일
@@ -1539,13 +1510,13 @@
 		    	mjonPayVO.setBuyerTel(moblphonNo);
 		    	mjonPayVO.setBuyerEmail(mberEmailAdres);
 				// 추가
-		    	mjonPayVO.setBankName(Banknm);		    	
-		    	
+		    	mjonPayVO.setBankName(Banknm);
+
 				// 인서트
-		    	mjonPayService.insertKgmAllV2(mjonPayVO);    						
-				
+		    	mjonPayService.insertKgmAllV2(mjonPayVO);
+
 		    	rtnMsg = "SUCCESS";
-				
+
 		    	try {
 		    		// 대상 : 휴대폰결제, 즉시이체, 전용계좌
 		    		// Step 1. 스미싱의심 지정 여부
@@ -1561,69 +1532,69 @@
 					    		// SMS 체크
 					    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
 					    			// 스미싱의심 SMS 알림전송
-					    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/즉시이체 첫결제", Userid, mberNm);    		
-					    		}    								    		
-			    				
+					    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/즉시이체 첫결제", Userid, mberNm);
+					    		}
+
 			    				// SLACK 체크
-					    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
+					    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
 						    		// Slack 메시지 발송(단순본문)
 						    		String msg = "[문자온] 스미싱의심/즉시이체 첫결제 - " + mberNm +"("+ Userid + ")";
-						    		mjonCommon.sendSimpleSlackMsg(msg);    		
+						    		mjonCommon.sendSimpleSlackMsg(msg);
 					    		}
-					    		
+
 					    		// 스미싱 의심회원으로 변경
 					    		UserManageVO userManageVO = new UserManageVO();
 					    		userManageVO.setSmishingYn("Y");
 					    		userManageVO.setMberId(Userid);
-					    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);				    				
+					    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
 			    			}
 			    		}
-		    		}			    		
+		    		}
 		    	}
 		    	catch (Exception e) {
 					System.out.println("#############################################################");
 					System.out.println("KG MOBILIANS NotiUrl - BANK 슬랙알림 & 스미싱의심 처리 Error");
 					System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
-					System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage());		    		
-		    	}		    	
-		    	
+					System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage());
+		    	}
+
 				System.out.println("#############################################################");
 				System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
-				System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg);    				
+				System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg);
 			}
 		}
 		catch(Exception e) {
 			rtnMsg = "FAIL";
-			
+
 			System.out.println("#############################################################");
 			System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
 			System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg);
 			System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage());
-   		}		    				
+   		}
 
-    	
+
     	model.addAttribute("returnMsg", rtnMsg);
-    	
+
 		return "web/cop/kgmV2/bankNotiUrl";
 	}
-    
+
     /**
-     * KGM Bank 결제 okUrl 페이지 
+     * KGM Bank 결제 okUrl 페이지
      * @param searchVO
      * @param model
      * @throws Exception
      */
     @RequestMapping(value= {"/web/kgm/pay/okUrlBankAjax.do"})
-	public String okUrlBankAjax(			
+	public String okUrlBankAjax(
 			HttpServletRequest request
 			, HttpSession session
-			, HttpServletResponse response			
+			, HttpServletResponse response
 			, ModelMap model
 		) throws Exception{
 
 		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
 		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-		
+
     	String rstMsg = "";
     	if("0000".equals(request.getParameter("Resultcd"))) {
     		rstMsg = "즉시이체가 정상적으로 완료되었습니다.";
@@ -1637,34 +1608,34 @@
 
 		System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
 		System.out.println("KG MOBILIANS OkUrl - BANK ResultCd : " + request.getParameter("Resultcd"));
-		System.out.println("KG MOBILIANS OkUrl - BANK ResultMsg : " + rstMsg);    					    			
-		
+		System.out.println("KG MOBILIANS OkUrl - BANK ResultMsg : " + rstMsg);
+
     	return "web/cop/kgmV2/bankOkUrl";
-	}      
-    
+	}
+
  	/**
    	 * 마지막 결제수단 SELECT
    	 * @throws Exception
    	 */
    	@RequestMapping(value = "/web/member/pay/selectLastPayMethodAjax.do")
-   	public ModelAndView selectLastPayMethodAjax(MjonPayVO mjonPayVO, 
+   	public ModelAndView selectLastPayMethodAjax(MjonPayVO mjonPayVO,
    			HttpServletRequest request ) throws Exception {
-   		
+
    		ModelAndView modelAndView = new ModelAndView();
    		modelAndView.setViewName("jsonView");
-   		
+
    		boolean isSuccess = true;
    		String msg = "";
    		String nextPayMethod = "";
-   		
+
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
-   		
+
    		if(userId == null) {
    			isSuccess = false;
-   			msg = "로그인이 필요합니다.";   			
+   			msg = "로그인이 필요합니다.";
    		}
-   		
+
    		try {
    			// 다음 결제시 결제수단 SELECT
    			nextPayMethod = userManageService.selectLastPayMethod(userId);
@@ -1672,38 +1643,38 @@
    		catch(Exception e) {
    			isSuccess = false;
    			msg = e.getMessage();
-   		}		
-   		
+   		}
+
    		modelAndView.addObject("isSuccess", isSuccess);
    		modelAndView.addObject("msg", msg);
    		modelAndView.addObject("nextPayMethod", nextPayMethod);
-   		
+
    		return modelAndView;
    	}
-   	
+
   	// Get Server Path
    	public static String getKgServerPath(HttpServletRequest request) {
 		String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();
 		if (request.getServerPort() == 80) {
 			kgmPath = request.getScheme() + "://" + request.getServerName();
-		}    
+		}
 
 		// 테스트서버 정보 변환
   		if(kgmPath.indexOf("192.168.0.125") > -1){
   			kgmPath = "https://test.munjaon.co.kr:9998";
-    	}		
-		
+    	}
+
 		System.out.println("#############################################################");
 		System.out.println("KG MOBILIANS kgServerPath : " + kgmPath);
-		
+
    	    return kgmPath;
-   	}    
-    
+   	}
+
   	// Get Ip
    	public static String getClientIP(HttpServletRequest request) {
    	    String ip = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
    	    String ipMethod = "X-Forwarded-For";
-   	    
+
    	    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    	        ip = request.getHeader("Proxy-Client-IP");
    	        ipMethod = "Proxy-Client-IP";
@@ -1724,18 +1695,18 @@
    	        ip = request.getRemoteAddr();
    	        ipMethod = "getRemoteAddr";
    	    }
-   	 
+
 		System.out.println("#############################################################");
 		System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ipMethod);
 		System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ip);
-		
+
    	    return ip;
    	}
-   	
+
    	// Kgm Ip Check
    	public boolean getIsKgmServerIp(HttpServletRequest request) {
    		boolean rtnVal = false;
-   		
+
    		String[] kgmServerIpArray = {
    				"175.158.12.133"
    				, "175.158.12.140"
@@ -1743,18 +1714,18 @@
    				, "116.127.121.151"
    				, "218.50.55.107"
    				, "116.127.121.132"};
-		
+
    		// List 로 변환
 		List<String> strList = new ArrayList<>(Arrays.asList(kgmServerIpArray));
-		
+
 		// List Contains
 		if(strList.contains(getClientIP(request))) {
 			rtnVal = true;	// 해당아이피 strArray에 존재
 		}
-		
+
 		return rtnVal;
    	}
-   	
+
     /**
      * 전달된 파라미터에 맞게 난수를 생성한다
      * @param len : 생성할 난수의 길이
@@ -1763,12 +1734,12 @@
     public static String numberGen(int len, int dupCd ) {
         Random rand = new Random();
         String numStr = ""; //난수가 저장될 변수
-        
+
         for(int i=0;i<len;i++) {
-            
+
             //0~9 까지 난수 생성
             String ran = Integer.toString(rand.nextInt(10));
-            
+
             if(dupCd==1) {
                 //중복 허용시 numStr에 append
                 numStr += ran;
@@ -1785,16 +1756,16 @@
         }
         return numStr;
     }
-   	
+
    	// Itm Member Id Check
    	public boolean getItnMemberId(String userId) {
    		boolean rtnVal = false;
-   		
+
    		String[] idArray = {
    				"nobledeco"
    				, "nopay"
    				, "dlwldn"
-   				
+
    				, "afterpay"
    				, "anjooyoung"
    				, "antelope3"
@@ -1864,18 +1835,18 @@
    				, "rosewiper6"
    				, "rosewiper7"
    				, "subsub8729"
-   				, "whtkdgml3627"   				
+   				, "whtkdgml3627"
    			};
-		
+
    		// List 로 변환
 		List<String> strList = new ArrayList<>(Arrays.asList(idArray));
-		
+
 		// List Contains
 		if(strList.contains(userId)) {
 			rtnVal = true;	// 해당아이피 strArray에 존재
 		}
-		
+
 		return rtnVal;
    	}
-   	
+
 }
src/main/java/itn/let/mjo/test/web/TestController.java
--- src/main/java/itn/let/mjo/test/web/TestController.java
+++ src/main/java/itn/let/mjo/test/web/TestController.java
@@ -3506,7 +3506,7 @@
 	@RequestMapping("/uss/ion/test/callNicepay.do")
     public String callNicepay(Model model) {
         String url = "https://dev.nicepay.co.kr/webapi/sslConnectionTest.jsp";
-        String mid = "itn180208m"; // 실제 MID 값으로 변경
+        String mid = "nictest00m"; // 실제 MID 값으로 변경
         
         try {
             // RestTemplate 사용
src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult.jsp
@@ -27,7 +27,7 @@
 String tid 					= (String)request.getParameter("TID");	// 거래 ID
 String cancelAmt 			= (String)request.getParameter("CancelAmt");	// 취소금액
 String partialCancelCode 	= (String)request.getParameter("PartialCancelCode"); 	// 부분취소여부
-String mid 					= "itn180208m";	// 상점 ID
+String mid 					= "nictest00m";	// 상점 ID
 String moid					= "nicepay_api_3.0_test";	// 주문번호
 String cancelMsg 			= "고객요청";	// 취소사유
 
@@ -39,7 +39,7 @@
 ****************************************************************************************
 */
 DataEncrypt sha256Enc 	= new DataEncrypt();
-String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
+String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
 String ediDate			= getyyyyMMddHHmmss();
 String signData 		= sha256Enc.encrypt(mid + cancelAmt + ediDate + merchantKey);
 
src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult_utf.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult_utf.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/cancelResult_utf.jsp
@@ -27,7 +27,7 @@
 String tid 					= (String)request.getParameter("TID");	// 거래 ID
 String cancelAmt 			= (String)request.getParameter("CancelAmt");	// 취소금액
 String partialCancelCode 	= (String)request.getParameter("PartialCancelCode"); 	// 부분취소여부
-String mid 					= "itn180208m";	// 상점 ID
+String mid 					= "nictest00m";	// 상점 ID
 String moid					= "nicepay_api_3.0_test";	// 주문번호
 String cancelMsg 			= "고객요청";	// 취소사유
 
@@ -38,7 +38,7 @@
 ****************************************************************************************
 */
 DataEncrypt sha256Enc 	= new DataEncrypt();
-String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
+String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
 String ediDate			= getyyyyMMddHHmmss();
 String signData 		= sha256Enc.encrypt(mid + cancelAmt + ediDate + merchantKey);
 
src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp
@@ -12,8 +12,8 @@
 * 추가 가능한 옵션 파라미터는 연동메뉴얼을 참고하세요.
 *******************************************************
 */
-String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
-String merchantID 		= "itn180208m"; 				// 상점아이디
+String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
+String merchantID 		= "nictest00m"; 				// 상점아이디
 String goodsName 		= "나이스페이"; 					// 결제상품명
 String price 			= "500"; 						// 결제상품금액	
 String buyerName 		= "나이스"; 						// 구매자명
src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp_back
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp_back
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest.jsp_back
@@ -12,8 +12,8 @@
 * 추가 가능한 옵션 파라미터는 연동메뉴얼을 참고하세요.
 *******************************************************
 */
-String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
-String merchantID 		= "itn180208m"; 				// 상점아이디
+String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
+String merchantID 		= "nictest00m"; 				// 상점아이디
 String goodsName 		= "나이스페이"; 					// 결제상품명
 String price 			= "500"; 						// 결제상품금액	
 String buyerName 		= "나이스"; 						// 구매자명
src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest_utf.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest_utf.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/payRequest_utf.jsp
@@ -12,8 +12,8 @@
 * 추가 가능한 옵션 파라미터는 연동메뉴얼을 참고하세요.
 *******************************************************
 */
-String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
-String merchantID 		= "itn180208m"; 				// 상점아이디
+String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
+String merchantID 		= "nictest00m"; 				// 상점아이디
 String goodsName 		= "나이스페이"; 					// 결제상품명
 String price 			= "1004"; 						// 결제상품금액	
 String buyerName 		= "나이스"; 						// 구매자명
src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult.jsp
@@ -55,7 +55,7 @@
 	****************************************************************************************
 	*/
 	DataEncrypt sha256Enc 	= new DataEncrypt();
-	String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
+	String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
 	String ediDate			= getyyyyMMddHHmmss();
 	String signData 		= sha256Enc.encrypt(authToken + mid + amt + ediDate + merchantKey);
 
src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult_utf.jsp
--- src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult_utf.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/nicepay/payResult_utf.jsp
@@ -55,7 +55,7 @@
 	****************************************************************************************
 	*/
 	DataEncrypt sha256Enc 	= new DataEncrypt();
-	String merchantKey 		= "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 상점키
+	String merchantKey 		= "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="; // 상점키
 	String ediDate			= getyyyyMMddHHmmss();
 	String signData 		= sha256Enc.encrypt(authToken + mid + amt + ediDate + merchantKey);
 
Add a comment
List