Created
May 27, 2016 00:52
-
-
Save ygpark2/b2d47a2d3a97c5d8edf4dac9e0eba480 to your computer and use it in GitHub Desktop.
Ipin 서비스 자바 클래스
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.kdn.evcs.service; | |
import Kisinfo.Check.IPINClient; | |
import NiceID.Check.CPClient; | |
import com.kdn.evcs.common.BaseConstant; | |
import com.kdn.evcs.common.LogHelper; | |
import org.springframework.stereotype.Service; | |
import java.util.HashMap; | |
import java.util.Map; | |
import javax.servlet.http.HttpSession; | |
/** | |
* Created by ygpark2 on 16. 3. 23. | |
*/ | |
@Service("ipinService") | |
public class IpinService { | |
private IPINClient pClient = new IPINClient(); | |
private CPClient niceCheck = new CPClient(); | |
public Map<String, Object> ipinAuthenticate(String sReturnURL) { | |
Map<String, Object> ipinMap = new HashMap<String, Object>(); | |
sReturnURL += "/ipin_result"; | |
ipinMap.put("sReturnURL", sReturnURL); | |
String sCPRequest = this.pClient.getRequestNO(BaseConstant.IPIN_SITE_CODE); | |
ipinMap.put("sCPRequest", sCPRequest); | |
int ipinRtnCode = this.pClient.fnRequest(BaseConstant.IPIN_SITE_CODE, BaseConstant.IPIN_SITE_PASSWORD, sCPRequest, sReturnURL); | |
ipinMap.put("ipinRtnCode", ipinRtnCode); | |
String sIpinRtnMsg = ""; // 처리결과 메세지 | |
String sIpinEncData = ""; // 암호화 된 데이타 | |
switch (ipinRtnCode) { | |
case 0: | |
// fnRequest 함수 처리시 업체정보를 암호화한 데이터를 추출합니다. | |
// 추출된 암호화된 데이타는 당사 팝업 요청시, 함께 보내주셔야 합니다. | |
sIpinEncData = this.pClient.getCipherData(); // 암호화 된 데이타 | |
sIpinRtnMsg = "정상 처리되었습니다."; | |
LogHelper.info(this.pClient, sIpinRtnMsg); | |
break; | |
case -1: | |
case -2: | |
sIpinRtnMsg = "배포해 드린 서비스 모듈 중, 귀사 서버환경에 맞는 모듈을 이용해 주시기 바랍니다.<BR>" + | |
"귀사 서버환경에 맞는 모듈이 없다면 ..<BR><B>iRtn 값, 서버 환경정보를 정확히 확인하여 메일로 요청해 주시기 바랍니다.</B>"; | |
LogHelper.error(this.pClient, sIpinRtnMsg); | |
break; | |
case -9: | |
sIpinRtnMsg = "입력값 오류 : fnRequest 함수 처리시, 필요한 4개의 파라미터값의 정보를 정확하게 입력해 주시기 바랍니다."; | |
LogHelper.error(this.pClient, sIpinRtnMsg); | |
break; | |
default: | |
sIpinRtnMsg = "iRtn 값 확인 후, NICE신용평가정보 개발 담당자에게 문의해 주세요."; | |
LogHelper.error(this.pClient, sIpinRtnMsg); | |
break; | |
} | |
ipinMap.put("sIpinRtnMsg", sIpinRtnMsg); | |
ipinMap.put("sIpinEncData", sIpinEncData); | |
return ipinMap; | |
} | |
public Map<String, Object> smsAuthenticate(String sBaseURL) { | |
Map<String, Object> smsMap = new HashMap<String, Object>(); | |
// 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다. | |
String sRequestNumber = this.niceCheck.getRequestNO(BaseConstant.CP_SITE_CODE); | |
smsMap.put("sRequestNumber", sRequestNumber); | |
String sAuthType = ""; // 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서 | |
String popgubun = "N"; // Y : 취소버튼 있음 / N : 취소버튼 없음 | |
String customize = ""; // 없으면 기본 웹페이지 / Mobile : 모바일페이지 | |
// CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다. | |
String cpRtnUrl = sBaseURL + "/checkplus_success"; // 성공시 이동될 URL | |
String cpErrUrl = sBaseURL + "/checkplus_fail"; // 실패시 이동될 URL | |
// 입력될 plain 데이타를 만든다. | |
String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber + | |
"8:SITECODE" + BaseConstant.CP_SITE_CODE.getBytes().length + ":" + BaseConstant.CP_SITE_CODE + | |
"9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType + | |
"7:RTN_URL" + cpRtnUrl.getBytes().length + ":" + cpRtnUrl + | |
"7:ERR_URL" + cpErrUrl.getBytes().length + ":" + cpErrUrl + | |
"11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun + | |
"9:CUSTOMIZE" + customize.getBytes().length + ":" + customize; | |
String cpRstMsg = ""; | |
String cpEncData = ""; | |
int cpRtnCode = this.niceCheck.fnEncode(BaseConstant.CP_SITE_CODE, BaseConstant.CP_SITE_PASSWORD, sPlainData); | |
switch (cpRtnCode) { | |
case 0: | |
cpEncData = this.niceCheck.getCipherData(); | |
break; | |
case -1: | |
cpRstMsg = "암호화 시스템 에러입니다."; | |
break; | |
case -2: | |
cpRstMsg = "암호화 처리오류입니다."; | |
break; | |
case -3: | |
cpRstMsg = "암호화 데이터 오류입니다."; | |
break; | |
case -9: | |
cpRstMsg = "입력 데이터 오류입니다."; | |
break; | |
default: | |
cpRstMsg = "알수 없는 에러 입니다. iReturn : " + cpRtnCode; | |
break; | |
} | |
smsMap.put("cpRtnCode", cpRtnCode); | |
smsMap.put("cpEncData", cpEncData); | |
smsMap.put("cpRstMsg", cpRstMsg); | |
return smsMap; | |
} | |
public Map<String, Object> getIpinInfo(String sResponseData, String sCPRequest) { | |
Map<String, Object> ipinInfoMap = new HashMap<String, Object>(); | |
int ipinRtnCode = pClient.fnResponse(BaseConstant.IPIN_SITE_CODE, BaseConstant.IPIN_SITE_PASSWORD, sResponseData, sCPRequest); | |
System.out.println("BaseConstant.SITECODE : " + BaseConstant.IPIN_SITE_CODE); | |
System.out.println("BaseConstant.SITEPW : " + BaseConstant.IPIN_SITE_PASSWORD); | |
System.out.println("sResponseData : " + sResponseData); | |
System.out.println("sCPRequest : " + sCPRequest); | |
System.out.println("=====^^^++++2 : " + ipinRtnCode); | |
String sIpinRtnMsg = ""; // 처리결과 메세지 | |
String sVNumber = pClient.getVNumber(); // 가상주민번호 (13자리이며, 숫자 또는 문자 포함) | |
String sName = pClient.getName(); // 이름 | |
String sDupInfo = pClient.getDupInfo(); // 중복가입 확인값 (DI - 64 byte 고유값) | |
String sAgeCode = pClient.getAgeCode(); // 연령대 코드 (개발 가이드 참조) | |
String sGenderCode = pClient.getGenderCode(); // 성별 코드 (개발 가이드 참조) | |
String sBirthDate = pClient.getBirthDate(); // 생년월일 (YYYYMMDD) | |
String sNationalInfo = pClient.getNationalInfo(); // 내/외국인 정보 (개발 가이드 참조) | |
String sCPRequestNum = pClient.getCPRequestNO(); // CP 요청번호 | |
switch (ipinRtnCode) { | |
case 1: | |
ipinInfoMap.put("ipinRtnCode", ipinRtnCode); | |
ipinInfoMap.put("sVNumber", sVNumber); | |
ipinInfoMap.put("sName", sName); | |
ipinInfoMap.put("sDupInfo", sDupInfo); | |
ipinInfoMap.put("sAgeCode", sAgeCode); | |
ipinInfoMap.put("sGenderCode", sGenderCode); | |
ipinInfoMap.put("sBirthDate", sBirthDate); | |
ipinInfoMap.put("sNationalInfo", sNationalInfo); | |
ipinInfoMap.put("sCPRequestNum", sCPRequestNum); | |
System.out.println("가상주민번호 : " + sVNumber); | |
System.out.println("이름 : " + sName ); | |
System.out.println("중복가입 확인값 (DI) : " + sDupInfo); | |
System.out.println("연령대 코드 : " + sAgeCode); | |
System.out.println("성별 코드 : " + sGenderCode); | |
System.out.println("생년월일 : " + sBirthDate); | |
System.out.println("내/외국인 정보 : " + sNationalInfo); | |
System.out.println("CP 요청번호 : " + sCPRequestNum); | |
System.out.println("***** 복호화 된 정보가 정상인지 확인해 주시기 바랍니다. *****"); | |
sIpinRtnMsg = "정상 처리되었습니다."; | |
break; | |
case -1: | |
case -4: | |
sIpinRtnMsg = "ipinRtnCode 값, 서버 환경정보를 정확히 확인하여 주시기 바랍니다."; | |
break; | |
case -6: | |
sIpinRtnMsg = "당사는 한글 charset 정보를 euc-kr 로 처리하고 있으니, euc-kr 에 대해서 허용해 주시기 바랍니다.<BR>" + | |
"한글 charset 정보가 명확하다면 ..<BR><B>ipinRtnCode 값, 서버 환경정보를 정확히 확인하여 메일로 요청해 주시기 바랍니다.</B>"; | |
break; | |
case -9: | |
sIpinRtnMsg = "입력값 오류 : fnResponse 함수 처리시, 필요한 파라미터값의 정보를 정확하게 입력해 주시기 바랍니다."; | |
break; | |
case -12: | |
sIpinRtnMsg = "CP 비밀번호 불일치 : IPIN 서비스 사이트 패스워드를 확인해 주시기 바랍니다."; | |
break; | |
case -13: | |
sIpinRtnMsg = "CP 요청번호 불일치 : 세션에 넣은 sCPRequest 데이타를 확인해 주시기 바랍니다."; | |
break; | |
default: | |
sIpinRtnMsg = "ipinRtnCode 값 확인 후, NICE평가정보 전산 담당자에게 문의해 주세요."; | |
break; | |
} | |
ipinInfoMap.put("sIpinRtnMsg", sIpinRtnMsg); | |
return ipinInfoMap; | |
} | |
public Map<String, Object> getSmsInfo(String sEncodeData, String sessionRequestNumber) { | |
Map<String, Object> smsInfoMap = new HashMap<String, Object>(); | |
String sRequestNumber = ""; // 요청 번호 | |
String sResponseNumber = ""; // 인증 고유번호 | |
String sAuthType = ""; // 인증 수단 | |
String sName = ""; // 성명 | |
String sDupInfo = ""; // 중복가입 확인값 (DI_64 byte) | |
String sConnInfo = ""; // 연계정보 확인값 (CI_88 byte) | |
String sBirthDate = ""; // 생일 | |
String sGender = ""; // 성별 | |
String sNationalInfo = ""; // 내/외국인정보 (개발가이드 참조) | |
String sSmsRtnMsg = ""; | |
int smsRtnCode = niceCheck.fnDecode(BaseConstant.CP_SITE_CODE, BaseConstant.CP_SITE_PASSWORD, sEncodeData); | |
switch (smsRtnCode) { | |
case 0: | |
String sPlainData = niceCheck.getPlainData(); | |
String sCipherTime = niceCheck.getCipherDateTime(); // 복호화한 시간 | |
System.out.println("복호화한 시간 : " + sCipherTime); | |
HashMap mapresult = niceCheck.fnParse(sPlainData); // 데이타를 추출합니다. | |
sRequestNumber = (String) mapresult.get("REQ_SEQ"); | |
if(sRequestNumber.equals(sessionRequestNumber)) { | |
sResponseNumber = (String) mapresult.get("RES_SEQ"); | |
sAuthType = (String) mapresult.get("AUTH_TYPE"); | |
sName = (String) mapresult.get("NAME"); | |
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"); | |
} else { | |
sSmsRtnMsg = "세션값이 다릅니다. 올바른 경로로 접근하시기 바랍니다."; | |
} | |
break; | |
case -1: | |
sSmsRtnMsg = "복호화 시스템 에러입니다."; | |
break; | |
case -4: | |
sSmsRtnMsg = "복호화 처리오류입니다."; | |
break; | |
case -5: | |
sSmsRtnMsg = "복호화 해쉬 오류입니다."; | |
break; | |
case -6: | |
sSmsRtnMsg = "복호화 데이터 오류입니다."; | |
break; | |
case -9: | |
sSmsRtnMsg = "입력 데이터 오류입니다."; | |
break; | |
case -12: | |
sSmsRtnMsg = "사이트 패스워드 오류입니다."; | |
break; | |
default: | |
sSmsRtnMsg = "알수 없는 에러 입니다. iReturn : " + smsRtnCode; | |
break; | |
} | |
smsInfoMap.put("smsRtnCode", smsRtnCode); | |
smsInfoMap.put("sRequestNumber", sRequestNumber); | |
smsInfoMap.put("sResponseNumber", sResponseNumber); | |
smsInfoMap.put("sAuthType", sAuthType); | |
smsInfoMap.put("sName", sName); | |
smsInfoMap.put("sDupInfo", sDupInfo); | |
smsInfoMap.put("sConnInfo", sConnInfo); | |
smsInfoMap.put("sBirthDate", sBirthDate); | |
smsInfoMap.put("sGender", sGender); | |
smsInfoMap.put("sNationalInfo", sNationalInfo); | |
smsInfoMap.put("sSmsRtnMsg", sSmsRtnMsg); | |
return smsInfoMap; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment