swkim há 5 anos atrás
pai
commit
330d2e7667
21 ficheiros alterados com 955 adições e 0 exclusões
  1. BIN
      산출물/2.분석/01.마스터테이블(로딩용)/통합품번분류코드_v1.70_20201120.xlsx
  2. 70 0
      산출물/3.설계/ERD/.metadata/.log
  3. BIN
      산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index
  4. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/NICE평가정보_휴대폰본인확인 응답코드.pdf
  5. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/NICE평가정보_휴대폰본인확인 응답코드.xlsx
  6. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/~WRL0001.tmp
  7. 132 0
      산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_fail.jsp
  8. 93 0
      산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_main.jsp
  9. 194 0
      산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_success.jsp
  10. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/서비스모듈/NiceID.jar
  11. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/서비스모듈/NiceID_ibm.jar
  12. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/안심본인인증_개발가이드_JSP_V2.2.doc
  13. BIN
      산출물/본인인증모듈/CheckPlusSafe_JSP/안심본인인증_개발가이드_JSP_V2.2.pdf
  14. 109 0
      산출물/본인인증모듈/Mobile_webview/Android가이드/MainActivity.java
  15. BIN
      산출물/본인인증모듈/Mobile_webview/Android가이드/모바일WebView가이드_Android.doc
  16. 32 0
      산출물/본인인증모듈/Mobile_webview/iOS가이드/CustomWKWebView.h
  17. 216 0
      산출물/본인인증모듈/Mobile_webview/iOS가이드/CustomWKWebView.m
  18. 21 0
      산출물/본인인증모듈/Mobile_webview/iOS가이드/UIWebVIewGuide.h
  19. 88 0
      산출물/본인인증모듈/Mobile_webview/iOS가이드/UIWebViewGuide.m
  20. BIN
      산출물/본인인증모듈/Mobile_webview/iOS가이드/모바일WebView가이드_iOS.doc
  21. BIN
      산출물/본인인증모듈/Mobile_webview/모바일 개발 관련 공통 안내사항.docx

BIN
산출물/2.분석/01.마스터테이블(로딩용)/통합품번분류코드_v1.70_20201120.xlsx


+ 70 - 0
산출물/3.설계/ERD/.metadata/.log

@@ -3958,3 +3958,73 @@ Command-line arguments:  -os win32 -ws win32 -arch x86 D:\WIDE\workspace\webapps
 
 !ENTRY org.eclipse.osgi 2 1 2021-01-25 10:33:34.080
 !MESSAGE NLS unused message: ToggleColumnVisibilityHandler_5 in: com.tomato.exerd.handler.messages
+!SESSION 2021-02-01 10:23:39.172 -----------------------------------------------
+eclipse.buildId=M20090211-1700
+java.version=1.6.0_24
+java.vendor=Sun Microsystems Inc.
+BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ko_KR
+Framework arguments:  D:\WIDE\workspace\webapps\style24\style24.doc\산출물\3.설계\ERD\ST24.exerd
+Command-line arguments:  -os win32 -ws win32 -arch x86 D:\WIDE\workspace\webapps\style24\style24.doc\산출물\3.설계\ERD\ST24.exerd
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: OpenResourceDialog_openButton_text in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: OpenResourceDialog_openWithMenu_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: OpenResourceDialog_openWithButton_toolTip in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: CleanDialog_cleanSelectedTaskName in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: RecentWorkspacesPreferencePage_PromptAtStartup_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:40.062
+!MESSAGE NLS unused message: RecentWorkspacesPreferencePage_RemoveButton_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.468
+!MESSAGE NLS unused message: url_couldNotResolve_projectDoesNotExist in: org.eclipse.core.internal.utils.messages
+
+!ENTRY org.eclipse.core.resources 2 10035 2021-02-01 10:23:41.515
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Shortcuts_shortcutTab in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Shortcuts_selectShortcutsLabel in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Shortcuts_availableMenus in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Shortcuts_availableCategories in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Shortcuts_allShortcuts in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: Util_listNull in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: OpenBrowserHandler_NoInfoDialogTitle in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:41.718
+!MESSAGE NLS unused message: AboutFeaturesDialog_SimpleTitle in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:45.802
+!MESSAGE NLS unused message: BinaryDumpHandler_1 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:45.802
+!MESSAGE NLS unused message: ConvertToXMLHandler_1 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:45.802
+!MESSAGE NLS unused message: SelectHandler_11 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:45.802
+!MESSAGE NLS unused message: ToggleColumnVisibilityHandler_4 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-02-01 10:23:45.802
+!MESSAGE NLS unused message: ToggleColumnVisibilityHandler_5 in: com.tomato.exerd.handler.messages

BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/NICE평가정보_휴대폰본인확인 응답코드.pdf


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/NICE평가정보_휴대폰본인확인 응답코드.xlsx


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/~WRL0001.tmp


+ 132 - 0
산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_fail.jsp

@@ -0,0 +1,132 @@
+<%@ page language="java" contentType="text/html;charset=euc-kr" %>
+
+<%
+    NiceID.Check.CPClient niceCheck = new  NiceID.Check.CPClient();
+
+    String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData");
+
+    String sSiteCode = "";				// NICE로부터 부여받은 사이트 코드
+    String sSitePassword = "";			// NICE로부터 부여받은 사이트 패스워드
+
+    String sCipherTime = "";			// 복호화한 시간
+    String sRequestNumber = "";			// 요청 번호
+    String sErrorCode = "";				// 인증 결과코드
+    String sAuthType = "";				// 인증 수단
+    String sMessage = "";
+    String sPlainData = "";
+    
+    int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData);
+
+    if( iReturn == 0 )
+    {
+        sPlainData = niceCheck.getPlainData();
+        sCipherTime = niceCheck.getCipherDateTime();
+        
+        // 데이타를 추출합니다.
+        java.util.HashMap mapresult = niceCheck.fnParse(sPlainData);
+        
+        sRequestNumber 	= (String)mapresult.get("REQ_SEQ");
+        sErrorCode 		= (String)mapresult.get("ERR_CODE");
+        sAuthType 		= (String)mapresult.get("AUTH_TYPE");
+    }
+    else if( iReturn == -1)
+    {
+        sMessage = "복호화 시스템 에러입니다.";
+    }    
+    else if( iReturn == -4)
+    {
+        sMessage = "복호화 처리오류입니다.";
+    }    
+    else if( iReturn == -5)
+    {
+        sMessage = "복호화 해쉬 오류입니다.";
+    }    
+    else if( iReturn == -6)
+    {
+        sMessage = "복호화 데이터 오류입니다.";
+    }    
+    else if( iReturn == -9)
+    {
+        sMessage = "입력 데이터 오류입니다.";
+    }    
+    else if( iReturn == -12)
+    {
+        sMessage = "사이트 패스워드 오류입니다.";
+    }    
+    else
+    {
+        sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn;
+    }
+
+%>
+<%!
+public String requestReplace (String paramValue, String gubun) {
+        String result = "";
+        
+        if (paramValue != null) {
+        	
+        	paramValue = paramValue.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+
+        	paramValue = paramValue.replaceAll("\\*", "");
+        	paramValue = paramValue.replaceAll("\\?", "");
+        	paramValue = paramValue.replaceAll("\\[", "");
+        	paramValue = paramValue.replaceAll("\\{", "");
+        	paramValue = paramValue.replaceAll("\\(", "");
+        	paramValue = paramValue.replaceAll("\\)", "");
+        	paramValue = paramValue.replaceAll("\\^", "");
+        	paramValue = paramValue.replaceAll("\\$", "");
+        	paramValue = paramValue.replaceAll("'", "");
+        	paramValue = paramValue.replaceAll("@", "");
+        	paramValue = paramValue.replaceAll("%", "");
+        	paramValue = paramValue.replaceAll(";", "");
+        	paramValue = paramValue.replaceAll(":", "");
+        	paramValue = paramValue.replaceAll("-", "");
+        	paramValue = paramValue.replaceAll("#", "");
+        	paramValue = paramValue.replaceAll("--", "");
+        	paramValue = paramValue.replaceAll("-", "");
+        	paramValue = paramValue.replaceAll(",", "");
+        	
+        	if(gubun != "encodeData"){
+        		paramValue = paramValue.replaceAll("\\+", "");
+        		paramValue = paramValue.replaceAll("/", "");
+            paramValue = paramValue.replaceAll("=", "");
+        	}
+        	
+        	result = paramValue;
+            
+        }
+        return result;
+  }
+
+%>
+
+<html>
+<head>
+    <title>NICE평가정보 - CheckPlus 안심본인인증 테스트</title>
+</head>
+<body>
+    <center>
+    <p><p><p><p>
+    본인인증이 실패하였습니다.<br>
+    <table border=1>
+        <tr>
+            <td>복호화한 시간</td>
+            <td><%= sCipherTime %> (YYMMDDHHMMSS)</td>
+        </tr>
+        <tr>
+            <td>요청 번호</td>
+            <td><%= sRequestNumber %></td>
+        </tr>            
+        <tr>
+            <td>본인인증 실패 코드</td>
+            <td><%= sErrorCode %></td>
+        </tr>            
+        <tr>
+            <td>인증수단</td>
+            <td><%= sAuthType %></td>
+        </tr>
+     </table><br><br>        
+    <%= sMessage %><br>
+    </center>
+</body>
+</html>

+ 93 - 0
산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_main.jsp

@@ -0,0 +1,93 @@
+<%@ page language="java" contentType="text/html;charset=euc-kr" %>
+
+<%
+    NiceID.Check.CPClient niceCheck = new  NiceID.Check.CPClient();
+    
+    String sSiteCode = "";			// NICE로부터 부여받은 사이트 코드
+    String sSitePassword = "";		// NICE로부터 부여받은 사이트 패스워드
+    
+    String sRequestNumber = "REQ0000000001";        	// 요청 번호, 이는 성공/실패후에 같은 값으로 되돌려주게 되므로 
+                                                    	// 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다.
+    sRequestNumber = niceCheck.getRequestNO(sSiteCode);
+  	session.setAttribute("REQ_SEQ" , sRequestNumber);	// 해킹등의 방지를 위하여 세션을 쓴다면, 세션에 요청번호를 넣는다.
+  	
+   	String sAuthType = "";      	// 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서
+   	
+   	String popgubun 	= "N";		//Y : 취소버튼 있음 / N : 취소버튼 없음
+	String customize 	= "";		//없으면 기본 웹페이지 / Mobile : 모바일페이지
+	
+	String sGender = ""; 			//없으면 기본 선택 값, 0 : 여자, 1 : 남자 
+	
+    // CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다.
+	//리턴url은 인증 전 인증페이지를 호출하기 전 url과 동일해야 합니다. ex) 인증 전 url : http://www.~ 리턴 url : http://www.~
+    String sReturnUrl = "http://www.test.co.kr/checkplus_success.jsp";      // 성공시 이동될 URL
+    String sErrorUrl = "http://www.test.co.kr/checkplus_fail.jsp";          // 실패시 이동될 URL
+
+    // 입력될 plain 데이타를 만든다.
+    String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber +
+                        "8:SITECODE" + sSiteCode.getBytes().length + ":" + sSiteCode +
+                        "9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType +
+                        "7:RTN_URL" + sReturnUrl.getBytes().length + ":" + sReturnUrl +
+                        "7:ERR_URL" + sErrorUrl.getBytes().length + ":" + sErrorUrl +
+                        "11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun +
+                        "9:CUSTOMIZE" + customize.getBytes().length + ":" + customize + 
+						"6:GENDER" + sGender.getBytes().length + ":" + sGender;
+    
+    String sMessage = "";
+    String sEncData = "";
+    
+    int iReturn = niceCheck.fnEncode(sSiteCode, sSitePassword, sPlainData);
+    if( iReturn == 0 )
+    {
+        sEncData = niceCheck.getCipherData();
+    }
+    else if( iReturn == -1)
+    {
+        sMessage = "암호화 시스템 에러입니다.";
+    }    
+    else if( iReturn == -2)
+    {
+        sMessage = "암호화 처리오류입니다.";
+    }    
+    else if( iReturn == -3)
+    {
+        sMessage = "암호화 데이터 오류입니다.";
+    }    
+    else if( iReturn == -9)
+    {
+        sMessage = "입력 데이터 오류입니다.";
+    }    
+    else
+    {
+        sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn;
+    }
+%>
+
+<html>
+<head>
+	<title>NICE평가정보 - CheckPlus 안심본인인증 테스트</title>
+	
+	<script language='javascript'>
+	window.name ="Parent_window";
+	
+	function fnPopup(){
+		window.open('', 'popupChk', 'width=500, height=550, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
+		document.form_chk.action = "https://nice.checkplus.co.kr/CheckPlusSafeModel/checkplus.cb";
+		document.form_chk.target = "popupChk";
+		document.form_chk.submit();
+	}
+	</script>
+</head>
+<body>
+	<%= sMessage %><br><br>
+	업체정보 암호화 데이타 : [<%= sEncData %>]<br><br>
+
+	<!-- 본인인증 서비스 팝업을 호출하기 위해서는 다음과 같은 form이 필요합니다. -->
+	<form name="form_chk" method="post">
+		<input type="hidden" name="m" value="checkplusService">						<!-- 필수 데이타로, 누락하시면 안됩니다. -->
+		<input type="hidden" name="EncodeData" value="<%= sEncData %>">		<!-- 위에서 업체정보를 암호화 한 데이타입니다. -->
+	    
+		<a href="javascript:fnPopup();"> CheckPlus 안심본인인증 Click</a>
+	</form>
+</body>
+</html>

+ 194 - 0
산출물/본인인증모듈/CheckPlusSafe_JSP/샘플페이지/checkplus_success.jsp

@@ -0,0 +1,194 @@
+<%@ page language="java" contentType="text/html;charset=euc-kr" %>
+
+<%	//인증 후 결과값이 null로 나오는 부분은 관리담당자에게 문의 바랍니다.
+    NiceID.Check.CPClient niceCheck = new  NiceID.Check.CPClient();
+
+    String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData");
+
+    String sSiteCode = "";				// NICE로부터 부여받은 사이트 코드
+    String sSitePassword = "";			// NICE로부터 부여받은 사이트 패스워드
+
+    String sCipherTime = "";			// 복호화한 시간
+    String sRequestNumber = "";			// 요청 번호
+    String sResponseNumber = "";		// 인증 고유번호
+    String sAuthType = "";				// 인증 수단
+    String sName = "";					// 성명
+    String sDupInfo = "";				// 중복가입 확인값 (DI_64 byte)
+    String sConnInfo = "";				// 연계정보 확인값 (CI_88 byte)
+    String sBirthDate = "";				// 생년월일(YYYYMMDD)
+    String sGender = "";				// 성별
+    String sNationalInfo = "";			// 내/외국인정보 (개발가이드 참조)
+	String sMobileNo = "";				// 휴대폰번호
+	String sMobileCo = "";				// 통신사
+    String sMessage = "";
+    String sPlainData = "";
+    
+    int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData);
+
+    if( iReturn == 0 )
+    {
+        sPlainData = niceCheck.getPlainData();
+        sCipherTime = niceCheck.getCipherDateTime();
+        
+        // 데이타를 추출합니다.
+        java.util.HashMap mapresult = niceCheck.fnParse(sPlainData);
+        
+        sRequestNumber  = (String)mapresult.get("REQ_SEQ");
+        sResponseNumber = (String)mapresult.get("RES_SEQ");
+        sAuthType		= (String)mapresult.get("AUTH_TYPE");
+        sName			= (String)mapresult.get("NAME");
+		//sName			= (String)mapresult.get("UTF8_NAME"); //charset utf8 사용시 주석 해제 후 사용
+        sBirthDate		= (String)mapresult.get("BIRTHDATE");
+        sGender			= (String)mapresult.get("GENDER");
+        sNationalInfo  	= (String)mapresult.get("NATIONALINFO");
+        sDupInfo		= (String)mapresult.get("DI");
+        sConnInfo		= (String)mapresult.get("CI");
+        sMobileNo		= (String)mapresult.get("MOBILE_NO");
+        sMobileCo		= (String)mapresult.get("MOBILE_CO");
+        
+        String session_sRequestNumber = (String)session.getAttribute("REQ_SEQ");
+        if(!sRequestNumber.equals(session_sRequestNumber))
+        {
+            sMessage = "세션값 불일치 오류입니다.";
+            sResponseNumber = "";
+            sAuthType = "";
+        }
+    }
+    else if( iReturn == -1)
+    {
+        sMessage = "복호화 시스템 오류입니다.";
+    }    
+    else if( iReturn == -4)
+    {
+        sMessage = "복호화 처리 오류입니다.";
+    }    
+    else if( iReturn == -5)
+    {
+        sMessage = "복호화 해쉬 오류입니다.";
+    }    
+    else if( iReturn == -6)
+    {
+        sMessage = "복호화 데이터 오류입니다.";
+    }    
+    else if( iReturn == -9)
+    {
+        sMessage = "입력 데이터 오류입니다.";
+    }    
+    else if( iReturn == -12)
+    {
+        sMessage = "사이트 패스워드 오류입니다.";
+    }    
+    else
+    {
+        sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn;
+    }
+
+%>
+<%!
+
+	public String requestReplace (String paramValue, String gubun) {
+
+        String result = "";
+        
+        if (paramValue != null) {
+        	
+        	paramValue = paramValue.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+
+        	paramValue = paramValue.replaceAll("\\*", "");
+        	paramValue = paramValue.replaceAll("\\?", "");
+        	paramValue = paramValue.replaceAll("\\[", "");
+        	paramValue = paramValue.replaceAll("\\{", "");
+        	paramValue = paramValue.replaceAll("\\(", "");
+        	paramValue = paramValue.replaceAll("\\)", "");
+        	paramValue = paramValue.replaceAll("\\^", "");
+        	paramValue = paramValue.replaceAll("\\$", "");
+        	paramValue = paramValue.replaceAll("'", "");
+        	paramValue = paramValue.replaceAll("@", "");
+        	paramValue = paramValue.replaceAll("%", "");
+        	paramValue = paramValue.replaceAll(";", "");
+        	paramValue = paramValue.replaceAll(":", "");
+        	paramValue = paramValue.replaceAll("-", "");
+        	paramValue = paramValue.replaceAll("#", "");
+        	paramValue = paramValue.replaceAll("--", "");
+        	paramValue = paramValue.replaceAll("-", "");
+        	paramValue = paramValue.replaceAll(",", "");
+        	
+        	if(gubun != "encodeData"){
+        		paramValue = paramValue.replaceAll("\\+", "");
+        		paramValue = paramValue.replaceAll("/", "");
+            paramValue = paramValue.replaceAll("=", "");
+        	}
+        	
+        	result = paramValue;
+            
+        }
+        return result;
+  }
+%>
+
+<html>
+<head>
+    <title>NICE평가정보 - CheckPlus 안심본인인증 테스트</title>
+</head>
+<body>
+    <center>
+    <p><p><p><p>
+    본인인증이 완료 되었습니다.<br>
+    <table border=1>
+        <tr>
+            <td>복호화한 시간</td>
+            <td><%= sCipherTime %> (YYMMDDHHMMSS)</td>
+        </tr>
+        <tr>
+            <td>요청 번호</td>
+            <td><%= sRequestNumber %></td>
+        </tr>            
+        <tr>
+            <td>NICE응답 번호</td>
+            <td><%= sResponseNumber %></td>
+        </tr>            
+        <tr>
+            <td>인증수단</td>
+            <td><%= sAuthType %></td>
+        </tr>
+		<tr>
+            <td>성명</td>
+            <td><%= sName %></td>
+        </tr>
+		<tr>
+            <td>중복가입 확인값(DI)</td>
+            <td><%= sDupInfo %></td>
+        </tr>
+		<tr>
+            <td>연계정보 확인값(CI)</td>
+            <td><%= sConnInfo %></td>
+        </tr>
+		<tr>
+            <td>생년월일(YYYYMMDD)</td>
+            <td><%= sBirthDate %></td>
+        </tr>
+		<tr>
+            <td>성별</td>
+            <td><%= sGender %></td>
+        </tr>
+				<tr>
+            <td>내/외국인정보</td>
+            <td><%= sNationalInfo %></td>
+        </tr>
+        </tr>
+			<td>휴대폰번호</td>
+            <td><%= sMobileNo %></td>
+        </tr>
+		<tr>
+			<td>통신사</td>
+			<td><%= sMobileCo %></td>
+        </tr>
+		<tr>
+			<td colspan="2">인증 후 결과값은 내부 설정에 따른 값만 리턴받으실 수 있습니다. <br>
+			일부 결과값이 null로 리턴되는 경우 관리담당자 또는 계약부서(02-2122-4615)로 문의바랍니다.</td>
+		</tr>
+		</table><br><br>        
+    <%= sMessage %><br>
+    </center>
+</body>
+</html>

BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/서비스모듈/NiceID.jar


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/서비스모듈/NiceID_ibm.jar


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/안심본인인증_개발가이드_JSP_V2.2.doc


BIN
산출물/본인인증모듈/CheckPlusSafe_JSP/안심본인인증_개발가이드_JSP_V2.2.pdf


+ 109 - 0
산출물/본인인증모듈/Mobile_webview/Android가이드/MainActivity.java

@@ -0,0 +1,109 @@
+package com.nice.niceid;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Toast;
+
+import java.net.URISyntaxException;
+
+public class MainActivity extends Activity {
+
+    private WebView mWebView;
+    private static final String URL_INFO = ""//휴대폰본인인증 호출하는 URL 입력;
+	
+	
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        mWebView = (WebView) findViewById(R.id.webView);
+
+		//웹뷰의 설정을 다음과 같이 맞춰주시기 바랍니다.
+        mWebView.getSettings().setJavaScriptEnabled(true);	//필수설정(true)
+		mWebView.getSettings().setDomStorageEnabled(true);		//필수설정(true)
+		mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);	//필수설정(true)
+        
+		mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+        mWebView.getSettings().setLoadsImagesAutomatically(true);
+        mWebView.getSettings().setBuiltInZoomControls(true);
+        mWebView.getSettings().setSupportZoom(true);
+        mWebView.getSettings().setSupportMultipleWindows(true);
+        mWebView.getSettings().setLoadWithOverviewMode(true);
+        mWebView.getSettings().setUseWideViewPort(true);
+
+		
+		/** 
+			!필수사항!
+			
+			웹뷰 내 앱링크를 사용하려면 WebViewClient를 반드시 설정하여 주시기바랍니다. (하단 DemoWebViewClient 참고)
+		**/
+        mWebView.setWebViewClient(new DemoWebViewClient());
+
+        mWebView.loadUrl(URL_INFO);
+    }
+
+    public class DemoWebViewClient extends WebViewClient {
+
+        @Override
+        public boolean shouldOverrideUrlLoading(WebView view, String url) {
+			
+			//웹뷰 내 표준창에서 외부앱(통신사 인증앱)을 호출하려면 intent:// URI를 별도로 처리해줘야 합니다.
+			//다음 소스를 적용 해주세요.
+            if (url.startsWith("intent://")) {
+                Intent intent = null;
+                try {
+                    intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
+                    if (intent != null) {
+                        //앱실행
+                        startActivity(intent);
+                    }
+                } catch (URISyntaxException e) {
+					//URI 문법 오류 시 처리 구간
+					
+                } catch (ActivityNotFoundException e) {
+                    String packageName = intent.getPackage();
+                    if (!packageName.equals("")) {
+                        // 앱이 설치되어 있지 않을 경우 구글마켓 이동
+                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
+                    }
+                }
+				//return  값을 반드시 true로 해야 합니다.
+				return true;
+				
+			} else if (url.startsWith("https://play.google.com/store/apps/details?id=") || url.startsWith("market://details?id=")) {
+				//표준창 내 앱설치하기 버튼 클릭 시 PlayStore 앱으로 연결하기 위한 로직
+                Uri uri = Uri.parse(url);
+                String packageName = uri.getQueryParameter("id");
+                if (packageName != null && !packageName.equals("")) {
+                    // 구글마켓 이동
+                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
+                }
+				//return  값을 반드시 true로 해야 합니다.
+                return true;
+            }
+
+			//return  값을 반드시 false로 해야 합니다.
+            return false;
+        }
+
+        @Override
+        public void onPageStarted(WebView view, String url, Bitmap favicon) {
+            super.onPageStarted(view, url, favicon);
+        }
+
+        @Override
+        public void onPageFinished(WebView view, String url) {
+            super.onPageFinished(view, url);
+        }
+
+    }
+
+}

BIN
산출물/본인인증모듈/Mobile_webview/Android가이드/모바일WebView가이드_Android.doc


+ 32 - 0
산출물/본인인증모듈/Mobile_webview/iOS가이드/CustomWKWebView.h

@@ -0,0 +1,32 @@
+//
+//  CustomWKWebView.h
+//  GuideApp
+//
+//  Created by iOSDev on 2018. 8. 29..
+//  Copyright © 2018년 Nice. All rights reserved.
+//
+
+
+#import <UIKit/UIKit.h>
+#import <WebKit/WKUIDelegate.h>
+#import <WebKit/WKNavigationDelegate.h>
+
+//웹과 뷰사이에 필요한 동작
+typedef NS_ENUM(NSInteger, WKWebViewAction) {
+    WKWebViewActionDidFinishNavigation = 0,
+    WKWebViewActionDidStartProvisionalNavigation,
+    WKWebViewActionDidFailNavigation
+};
+
+typedef void(^WKWebViewActionHandler)(WKWebViewAction action, id result);
+
+@class WKWebView;
+@class WKWebViewConfiguration;
+
+@interface CustomWKWebView : UIView<WKUIDelegate, WKNavigationDelegate>
+
+- (void)loadUrl:(NSString *)url;
+- (WKWebView *)getWKWebView;
+- (void)setWKWebViewAction:(WKWebViewActionHandler)actionHandler;
+
+@end

+ 216 - 0
산출물/본인인증모듈/Mobile_webview/iOS가이드/CustomWKWebView.m

@@ -0,0 +1,216 @@
+//
+//  CustomWKWebView.m
+//  GuideApp
+//
+//  Created by iOSDev on 2018. 8. 29..
+//  Copyright © 2018년 Nice. All rights reserved.
+//
+
+#import "CustomWKWebView.h"
+#import "WKWebViewGuide.h"
+
+#import <WebKit/WebKit.h>
+#import <AVFoundation/AVFoundation.h>
+
+
+@interface CustomWKWebView ()
+
+@property (strong, nonatomic) WKWebView *wkWebView;
+
+@property (copy, nonatomic) WKWebViewActionHandler actionHandler;
+
+
+@end
+
+@implementation CustomWKWebView
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+    self = [super initWithCoder:aDecoder];
+    if (self) {
+        [self initWkWebview:self.frame configuration:nil];
+    }
+    return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self initWkWebview:frame configuration:nil];
+    }
+    return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self initWkWebview:frame configuration:configuration];
+    }
+    return self;
+}
+
+- (void)initWkWebview:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration {
+    self.wkWebView = [[WKWebView alloc] initWithFrame:frame configuration:configuration == nil ? [self getWKWebViewConfigration] : configuration];
+    
+    self.wkWebView.translatesAutoresizingMaskIntoConstraints = false;
+    self.wkWebView.scrollView.bounces = true;
+    self.wkWebView.scrollView.showsHorizontalScrollIndicator = false;
+    self.wkWebView.navigationDelegate = self;
+    self.wkWebView.UIDelegate= self;
+    self.wkWebView.scrollView.scrollsToTop = true;
+    
+    self.wkWebView.backgroundColor = [UIColor whiteColor];
+    /*
+    //적용
+    [self removeInputAccessoryViewFromWKWebView:self.wkWebView];
+    */
+    [self addSubview:self.wkWebView];
+    
+    //set autolayout
+    [self addWKWebViewConstraint:NSLayoutAttributeTop];
+    [self addWKWebViewConstraint:NSLayoutAttributeLeading];
+    [self addWKWebViewConstraint:NSLayoutAttributeTrailing];
+    [self addWKWebViewConstraint:NSLayoutAttributeBottom];
+    
+   
+}
+
+
+- (void)addWKWebViewConstraint:(NSLayoutAttribute)attribute {
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.wkWebView attribute:attribute relatedBy:NSLayoutRelationEqual toItem:self attribute:attribute multiplier:1.0 constant:0.0]];
+}
+
+- (void)loadUrl:(NSString *)url {
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0f];
+    [request setHTTPMethod:@"POST"];
+    
+    [self.wkWebView loadRequest:request];
+}
+
+//WKWebView 설정. 개발업체에 맞게 개발자가 설정
+- (WKWebViewConfiguration *)getWKWebViewConfigration {
+    WKWebViewConfiguration  *wkWebViewConfiguration =  [[WKWebViewConfiguration alloc] init];
+    WKUserContentController *kuserContentController = [[WKUserContentController alloc] init];
+    WKPreferences           *kwebviewPreference     = [[WKPreferences alloc] init];
+    
+    //Message 핸들러 설정
+    //[kuserContentController addScriptMessageHandler:self.scriptMessageHandler name:@"bridge"];
+    wkWebViewConfiguration.userContentController = kuserContentController;
+    
+    // 메모리에서 랜더링 후 보여줌 Defalt = false
+    // true 일경우 랜더링 시간동안 Black 스크린이 나옴
+    wkWebViewConfiguration.suppressesIncrementalRendering = false;
+    
+    // 기본값 : Dynamic (텍스트 선택시 정밀도 설정)
+    wkWebViewConfiguration.selectionGranularity = WKSelectionGranularityDynamic;
+    
+    // 기본값 false : HTML5 Video 형태로 플레이
+    // true  : native full-screen play
+    wkWebViewConfiguration.allowsInlineMediaPlayback = false;
+    
+    if (@available(iOS 9.0, *)) {
+        // whether AirPlay is allowed.
+        wkWebViewConfiguration.allowsAirPlayForMediaPlayback = false;
+        
+        // 기본값 : true;
+        // whether HTML5 videos can play picture-in-picture.
+        wkWebViewConfiguration.allowsPictureInPictureMediaPlayback = true;
+        
+        //LocalStorage 사용하도록 설정
+        wkWebViewConfiguration.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
+        
+        if (@available(iOS 10.0, *)) {
+            // 기본값 : true
+            // true : 사용자가 시작 , false : 자동시작
+            wkWebViewConfiguration.mediaTypesRequiringUserActionForPlayback = true;
+        }
+        
+    }
+    
+    // WKPreference 셋팅
+    kwebviewPreference.minimumFontSize = 0;                                   // 기본값 = 0
+    kwebviewPreference.javaScriptCanOpenWindowsAutomatically = true;         // 기본값 = false
+    kwebviewPreference.javaScriptEnabled = true;                              // 기본값 = true
+    
+    wkWebViewConfiguration.preferences = kwebviewPreference;
+    
+    return wkWebViewConfiguration;
+}
+
+- (void)setWKWebViewAction:(WKWebViewActionHandler)actionHandler {
+    if (actionHandler != nil)
+        self.actionHandler = actionHandler;
+}
+
+
+- (WKWebView *)getWKWebView {
+    return self.wkWebView;
+}
+
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
+    if (self.actionHandler != nil)
+        self.actionHandler(WKWebViewActionDidStartProvisionalNavigation, nil);
+}
+
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
+    if (self.actionHandler != nil)
+        self.actionHandler(WKWebViewActionDidFinishNavigation, nil);
+    
+}
+
+- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+    //DLog(@"didFailNavigation error - %@", [error description]);
+    if (self.actionHandler != nil)
+        self.actionHandler(WKWebViewActionDidFailNavigation, error);
+
+}
+
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+    //DLog(@"didFailProvisionalNavigation error - %@", [error description]);
+    if (self.actionHandler != nil)
+        self.actionHandler(WKWebViewActionDidFailNavigation, error);
+   
+}
+
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
+    NSString *urlString = navigationAction.request.URL.absoluteString;
+    
+	//앱설치 링크로 진입시 별도 처리(https://itunes.apple.com/kr/app/id~~~~~~)
+    if ([urlString hasPrefix:@"https://itunes.apple.com"]) {
+        //스토어 연결(OS에서 처리)
+        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+           
+		//웹뷰 내 페이지 이동 안하도록 설정(PolicyCancel)
+        decisionHandler(WKNavigationActionPolicyCancel);
+        return;
+        
+    } else if ([urlString hasPrefix:@"tauthlink"] || [urlString hasPrefix:@"ktauthexternalcall"] 
+		|| [urlString hasPrefix:@"upluscorporation"]  || [urlString hasPrefix:@"niceipin2"]) {
+        
+		//외부 앱 Scheme로 URL이 시작되는 경우
+		//tauthLink(SKT PASS 인증앱)
+		//ktauthexternalcall(KT PASS 인증앱)
+		//upluscorporation(LGU+ PASS 인증앱)
+		//회원사에서 추가로 연동하고 싶은 앱스키마가 있다면 or 조건에 추가 해주세요. (예시 : niceipin2 )
+
+		//앱 실행
+		[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+		
+		//웹뷰 내 페이지 이동 안하도록 설정(PolicyCancel)
+		decisionHandler(WKNavigationActionPolicyCancel);
+		return;        
+    }
+    
+	
+	//일반 웹 페이지 링크 처리(PolicyAllow)
+    decisionHandler(WKNavigationActionPolicyAllow);
+    return;
+    
+}
+
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
+    decisionHandler(WKNavigationResponsePolicyAllow);
+}
+
+
+
+@end

+ 21 - 0
산출물/본인인증모듈/Mobile_webview/iOS가이드/UIWebVIewGuide.h

@@ -0,0 +1,21 @@
+//
+//  UIWebVIewGuide.h
+//  GuideApp
+//
+//  Created by iOSDev on 2018. 8. 29..
+//  Copyright © 2018년 Nice. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+
+@interface UIWebVIewGuide : UIViewController
+{
+    
+}
+@property (nonatomic, retain) IBOutlet UIWebView *webView;
+@property (nonatomic, retain) IBOutlet UIButton *prevBtn;
+
+
+@end

+ 88 - 0
산출물/본인인증모듈/Mobile_webview/iOS가이드/UIWebViewGuide.m

@@ -0,0 +1,88 @@
+//
+//  UIWebVIewGuide.h
+//  GuideApp
+//
+//  Created by iOSDev on 2018. 8. 29..
+//  Copyright © 2018년 Nice. All rights reserved.
+//
+
+#import "UIWebVIewGuide.h"
+
+
+
+@implementation UIWebVIewGuide
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    NSString *url =  [NSString stringWithFormat:@"%@", @""];	//회원사의 휴대폰본인확인 호출url을 입력해 주세요.
+    
+  
+    
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];
+  
+    [request setHTTPMethod:@"POST"];
+    
+    
+    
+    [_webView loadRequest:request];
+}
+
+
+- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
+{
+    NSString *urlString = [[request URL] absoluteString];
+	
+	//일반 적인 링크이동 처리(http 또는 https로 시작)
+    if ([urlString hasPrefix:@"http"]) {
+		//앱설치 링크로 진입시 별도 처리(https://itunes.apple.com/kr/app/id~~~~~~)
+        if ([urlString hasPrefix:@"https://itunes.apple.com"]) {
+			//앱스토어 연결
+            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+            return NO;	//반드시 NO로 설정해주세요.
+        }
+        else {
+            //일반 웹 페이지 링크 처리
+            return YES;	//반드시 YES로 설정해 주셔야합니다.
+        }
+    } else {
+        if ([[urlString hasPrefix:@"tauthlink"] || [urlString hasPrefix:@"ktauthexternalcall"] || [urlString hasPrefix:@"upluscorporation"] || [urlString hasPrefix:@"niceipin2"]) {
+			//외부 앱 Scheme로 URL이 시작되는 경우
+			//tauthLink(SKT PASS 인증앱)
+			//ktauthexternalcall(KT PASS 인증앱)
+			//upluscorporation(LGU+ PASS 인증앱)
+			//회원사에서 추가로 연동하고 싶은 앱스키마가 있다면 or 조건에 추가 해주세요. (예시 : niceipin2 )
+            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+            return NO;	//반드시 NO로 설정해 주셔야합니다.
+        }
+    }
+    return YES; //반드시 YES로 설정해주세요.
+}
+
+- (void)webViewDidStartLoad:(UIWebView *)webView
+{
+    NSLog(@"webViewDidStartLoad");
+    
+}
+
+- (void)webViewDidFinishLoad:(UIWebView *)webView
+{
+    NSLog(@"webViewDidFinishLoad");
+}
+
+- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
+{
+
+}
+
+
+//상단 좌측 버튼 세팅
+-(IBAction)closeBtn:(id)sender {
+    [self dismissViewControllerAnimated:NO completion:^{
+    }];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+@end

BIN
산출물/본인인증모듈/Mobile_webview/iOS가이드/모바일WebView가이드_iOS.doc


BIN
산출물/본인인증모듈/Mobile_webview/모바일 개발 관련 공통 안내사항.docx