Skip to content

Instantly share code, notes, and snippets.

@ygpark2
Created May 27, 2016 00:52
Show Gist options
  • Save ygpark2/b2d47a2d3a97c5d8edf4dac9e0eba480 to your computer and use it in GitHub Desktop.
Save ygpark2/b2d47a2d3a97c5d8edf4dac9e0eba480 to your computer and use it in GitHub Desktop.
Ipin 서비스 자바 클래스
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