using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Cosmos.Common; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.CommonManager; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : IC 리더기 제어 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.OLEDevice { /// /// IC 리더기 제어 CLASS /// public class DeviceICReader : IICReaderUs { #region SpcnPos.DLL 을 이용한 IC리더기 제어 함수 /// /// 배출 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderCardExhaust(int tranType, int mediaType, byte[] maintainType, byte[] backFeeding, byte[] etcData, byte[] output_msg); /// /// 승인 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcPos(byte[] input_msg, int input_msg_len, byte[] signData, byte[] icData, byte[] oilData, byte[] authInfo, byte[] output_msg); /// /// 망취소 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnReversal(byte[] req_msg, byte[] res_msg, byte[] authInfo, byte[] output_msg); /// /// [IC리더기] 초기화 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderInit(); /// /// [IC리더기] 시간설정 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderSetTime(); // 환경설정 정보 가져오기 [DllImport("SpcnPos.dll")] public static extern int SpcnGetFlag(byte[] appName, byte[] keyName, byte[] output, int outputMaxLen); // 환경설정 정보 설정하기 [DllImport("SpcnPos.dll")] public static extern int SpcnSetFlag(byte[] appName, byte[] keyName, byte[] value); /// /// [IC리더기] 상호인증 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderKeyDownload(byte[] inTrmlId, byte[] inAuthInfo); /// /// [IC리더기] 무결성검사 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderIntegrity(byte[] outResTime); /// /// [IC리더기] 상태확인 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderStatus(byte[] outHwStatus, byte[] outIntegrityStatus, byte[] outCardInStatus, byte[] outReaderName, byte[] outReaderVersion, byte[] outModuleId); /// /// [IC리더기] 카드 정보 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderCardInfo(int tranType, byte[] trmlId, int amount, byte[] output_msg); /// /// [IC리더기] 발급사 인증 요청 함수 /// IcChipData는 ARC / (FS) / Additional Response Data / (FS) / Issuer Authentication Data / (FS) / Issuer Script 형태를 맞춰야 함 /// 승인응답일 경우에는 정상적으로 데이터가 넘어오나 승인취소일 경우에는 ARC만 들어오므로 FS갯수만 맞추면 됨. /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderCardIssuer(byte[] inIcChipData, byte[] output_msg); /// /// [IC리더기] 카드번호 암호화 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderCardEncrypt(byte[] inCardNum, byte[] output_msg); // (RF) RF카드 정보 조회 [DllImport("SpcnPos.dll")] public static extern int SpcnRfPrepaidCardInfo(byte[] output_msg); /// /// (RF) 후불 결제 거래 카드 정보 요청 /// [DllImport("SpcnPos.dll")] public static extern int SpcnRfCreditCardInfo(byte[] terminalNo, byte[] samType, byte[] amount, byte[] msg1, byte[] msg2, byte[] msg3, byte[] output_msg); // (RF) [미보안] 후불 결제 거래 카드 정보 요청 [DllImport("SpcnPosEx.dll")] public static extern int SpcnRfCreditCardInfoEx(byte[] terminalNo, byte[] samType, byte[] amount, byte[] msg1, byte[] msg2, byte[] msg3, byte[] output_msg); //20171013 dkshin 해피기프트(신) IC/RF 충전 및 승인 /// /// (RF) 해피기프트카드(코나머니) 정보 읽기 조회 /// [DllImport("SpcnPos.dll")] public static extern int SpcnRfEtcCardInfo(byte[] terminalNo, byte[] samType, byte[] amount, byte[] msg1, byte[] msg2, byte[] msg3, byte[] output_msg); /// /// RF 초기화 요청 함수 /// [DllImport("SpcnPos.dll")] public static extern int SpcnRfReaderInit(); /// /// RF 시간 설정 /// [DllImport("SpcnPos.dll")] public static extern int SpcnRfReaderSetTime(); // RF 상호인증 요청 [DllImport("SpcnPos.dll")] public static extern int SpcnRfReaderKeyDownload(byte[] inTrmlId, byte[] inAuthInfo); // RF 무결성 요청 [DllImport("SpcnPos.dll")] public static extern int SpcnRfReaderIntegrity(byte[] outResTime); // RF 상태확인 [DllImport("SpcnPos.dll")] public static extern int SpcnRfReaderStatus(byte[] outHwStatus, byte[] outIntegrityStatus, byte[] outCardInStatus, byte[] outReaderName, byte[] outReaderVersion, byte[] outModuleId); // RF 사원카드 정보 [DllImport("SpcnPos.dll")] public static extern int SpcnRfEmployeeCardInfo(byte[] output); /// /// IC 리더 콜백 호출 요청 /// /// [DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void SpcnRegIcCallback(IntPtr callback); /// /// IC 리더 콜백 호출 해지 /// [DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void SpcnUnRegIcCallback(); /// /// IC 리더 설정 /// /// /// /// [DllImport("SpcnPos.dll")] public static extern int SpcnIcReaderSettingDevice(byte[] type, byte[] value); /// /// MSR 신용카드 요청 - 미인증 POS 사용 /// /// /// /// /// [DllImport("SpcnPos.dll")] public static extern int SpcnPos(byte[] input_msg, int input_msg_len, byte[] output_msg); /// /// /// /// /// [DllImport("SpcnPos.dll")] public static extern int SpcnStopProcess(int type); /// /// IC 리더기 펌웨어 업데이트 /// /// /// /// /// /// [DllImport("DeFWDownloadDll.dll")] public static extern int DE_DownloadFW(int checkfwtout, int downfwtout, int nPort, byte[] DCheck); /// /// IC 리더기 펌웨어 이전 버전 업데이트 /// /// /// /// /// [DllImport("DeFWDownloadDll.dll")] public static extern int DE_BacktoFW(int checkfwtout, int downfwtout, int nPort); //#20171016 IC리더기 펌웨어 업데이트 Start, srlee /// /// IC 리더기 펌웨어 업데이트_NEW /// /// /// /// /// /// [DllImport("VANDeDownloadDll.dll")] public static extern int DE_FWDOWN(int nPort, int nBaud, byte[] cPW, byte[] filepath); /// /// IC 리더기 펌웨어 다운로드 상태 확인하는 callback 함수 등록 /// /// /// [DllImport("VANDeDownloadDll.dll")] public static extern void DE_CallBackFunReg(IntPtr callback); //#20171016 IC리더기 펌웨어 업데이트 End, srlee #endregion /// /// 등록제 정보 /// (0~15 : IC리더기 정보, 16~31 : POS S/W명 과 Version) /// private StringBuilder m_sAuthInfo_IC = new StringBuilder(); public StringBuilder AuthInfo_IC { get { return m_sAuthInfo_IC; } } /// /// 등록제 정보 /// (0~15 : RF리더기 정보, 16~31 : POS S/W명 과 Version) /// private StringBuilder m_sAuthInfo_RF = new StringBuilder(); public StringBuilder AuthInfo_RF { get { return m_sAuthInfo_RF; } } /// /// StateServer Object (StateServer 객체) /// public StateServer StateObject = (StateServer)StateServer.GetInstance(); /// /// Device 상태 정보 객체 /// public DeviceStatus m_cDevStatus = null; /// /// Pos 상태 정보 객체 /// public PosStatus m_cPosStatus = null; // VAN IP, PORT Update 체크 여부 private static bool m_bUpdateIni = false; /// /// IC리더 콜백 처리 여부 /// private bool m_bIcReaderCallBack = false; //#20171024 START, PHJ private string m_sPAY_WAY_CD; /// /// 결제수단코드 /// public string PAY_WAY_CD { set { this.m_sPAY_WAY_CD = value; } } private string m_sPAY_DTL_CD; /// /// 결제수단상세코드 /// public string PAY_DTL_CD { set { this.m_sPAY_DTL_CD = value; } } //#20171024 END, PHJ /// /// 생성자 /// public DeviceICReader() { try { m_cPosStatus = (PosStatus)StateObject.POS; m_cDevStatus = (DeviceStatus)StateObject.DEVICE; //InitializeDevice(); } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } } /// /// IC리더기 초기화 작업 /// public void InitializeDevice() { //UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); UpdateIniConfig(); if (m_cDevStatus.ICReader.UseYn == true) { SetAuthInfoString(PosConst.POS_CARD_READER_DEVICE_TYPE.IC_READER); } } /// /// SpcnPos.dll 이 사용하는 SpcnPosCfg.ini 파일 update /// private void UpdateIniConfig() { StringBuilder sbGetText = new StringBuilder(); CmMessage m_PosDevice = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + "PosDevice.INI"); string sPortNumber = string.Empty; long lBaudrate = 0; bool bRtn = false; try { sPortNumber = CmUtil.StringNullEmpty(GetConfigInfo(m_PosDevice, "ICREADER", "SerialPortNumber")); lBaudrate = CmUtil.LongParse(CmUtil.StringNullEmpty(GetConfigInfo(m_PosDevice, "ICREADER", "SerialBaudRate"))); if (sPortNumber.Length < 3 || lBaudrate <= 0) { new Exception("PosDevice.INI IC리더기 설정 오류"); return; } sbGetText.Clear(); WinAPI.GetPrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, PosConst.POS_ICREADER_CONFIG.KEY_READER_PORT, string.Empty, sbGetText, 64, BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig); if (sbGetText.ToString() != sPortNumber.Substring(3, sPortNumber.Length - 3))//Yoo modify 20160613 { bRtn = WinAPI.WritePrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, PosConst.POS_ICREADER_CONFIG.KEY_READER_PORT, sPortNumber.Substring(3, sPortNumber.Length - 3), BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig);//Yoo modify 20160613 if (bRtn == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) PosConst.INI_FILE_NAME.ICReaderConfig + "/" + PosConst.POS_ICREADER_CONFIG.KEY_READER_PORT + " 쓰기 실패"); } } sbGetText.Clear(); WinAPI.GetPrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, PosConst.POS_ICREADER_CONFIG.KEY_READER_BAUDRATE, string.Empty, sbGetText, 64, BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig); if (sbGetText.ToString() != Convert.ToString(lBaudrate)) { bRtn = WinAPI.WritePrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, PosConst.POS_ICREADER_CONFIG.KEY_READER_BAUDRATE, Convert.ToString(lBaudrate), BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig); if (bRtn == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) PosConst.INI_FILE_NAME.ICReaderConfig + "/" + PosConst.POS_ICREADER_CONFIG.KEY_READER_BAUDRATE + " 쓰기 실패"); } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } } public void UpdateIniConfig(string sSvrIP, string sPort) { StringBuilder sbGetText = new StringBuilder(); CmMessage m_PosDevice = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + "PosDevice.INI"); bool bRtn1 = false; bool bRtn2 = false; try { // IP, PORT 설정 (SPCN) if (sSvrIP.Trim() != "" && sPort.Trim() != "") { bRtn1 = WinAPI.WritePrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, "SPCN_IP", sSvrIP.Trim(), BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig); if (bRtn1 == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", PosConst.INI_FILE_NAME.ICReaderConfig + "/" + sSvrIP + " SPCN_IP 쓰기 실패"); } bRtn2 = WinAPI.WritePrivateProfileString(PosConst.POS_ICREADER_CONFIG.APPNAME, "SPCN_PORT", sPort.Trim(), BaseCom.NxBinPath + PosConst.INI_FILE_NAME.ICReaderConfig); if (bRtn2 == false) { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", PosConst.INI_FILE_NAME.ICReaderConfig + "/" + sPort + " SPCN_PORT 쓰기 실패"); } if (bRtn1 == true && bRtn2 == true) { // VAN IP, PORT Update flag 설정 m_bUpdateIni = true; } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } } /// /// 설정 파일 읽기 /// /// /// /// /// private string GetConfigInfo(CmMessage cCfgInfo, string sGroup, string sValueName) { return GetConfigInfo(cCfgInfo, sGroup, sValueName, ""); } private string GetConfigInfo(CmMessage cCfgInfo, string sGroup, string sValueName, string sDefault) { try { string sValue = cCfgInfo.GetMessage(sGroup).GetMessageValue(sValueName); if (sValue == null) return sDefault; else return sValue; } catch { } return sDefault; } /// /// Byte배열을 string으로 변환 (Byte배열의 null(0x00)값 제거) /// /// /// private string ByteToString(byte[] data) { int inx = Array.FindIndex(data, 0, (x) => x == 0x0); if (inx >= 0) { return Encoding.Default.GetString(data, 0, inx); } else { return Encoding.Default.GetString(data); } } /// /// Byte배열을 string으로 변환 (Byte배열의 null(0x00)값 제거) - 카드번호 전용 /// /// /// /// private void ByteToString(byte[] data, ref string sData) { int inx = Array.FindIndex(data, 0, (x) => x == 0x0); if (inx >= 0) { sData = Encoding.Default.GetString(data, 0, inx); } else { sData = Encoding.Default.GetString(data); } } /// /// 등록제 정보 설정 /// /// /// public StringBuilder SetAuthInfoString(string sDeviceType) { string[] arICReaderStatus = null; string sPosSwInfo = string.Empty; try { if (m_bUpdateIni == false) { UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); } arICReaderStatus = GetStatus_ICReader(sDeviceType); sPosSwInfo = m_cPosStatus.Base.Auth_POS_SW_Ver; //PosConst.IC_AUTH_POS_SW_INFO; sPosSwInfo = sPosSwInfo.PadLeft(16, '#'); if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { // RF리더기 m_sAuthInfo_RF = new StringBuilder(); // 무결성 실패시 리턴 if (arICReaderStatus[1] != "0") return m_sAuthInfo_RF; m_sAuthInfo_RF.Clear(); m_sAuthInfo_RF.Append(arICReaderStatus[3].PadLeft(12, '#')); m_sAuthInfo_RF.Append(arICReaderStatus[4]); m_sAuthInfo_RF.Append(sPosSwInfo); } else { // IC리더기 m_sAuthInfo_IC = new StringBuilder(); // 무결성 실패시 리턴 if (arICReaderStatus[1] != "0") return m_sAuthInfo_IC; m_sAuthInfo_IC.Clear(); m_sAuthInfo_IC.Append(arICReaderStatus[3].PadLeft(12, '#')); m_sAuthInfo_IC.Append(arICReaderStatus[4]); m_sAuthInfo_IC.Append(sPosSwInfo); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) return m_sAuthInfo_RF; else return m_sAuthInfo_IC; } #region SpcnPos.DLL 모듈 호출 함수 /// /// [IC리더기] 상태확인 요청 /// /// /// public string[] GetStatus_ICReader(string sDeviceType) { int iRet = 0; string[] arReturn = null; byte[] outHwStatus = new byte[2049]; byte[] outIntegrityStatus = new byte[2049]; byte[] outCardInStatus = new byte[2049]; byte[] outReaderName = new byte[2049]; byte[] outReaderVersion = new byte[2049]; byte[] outModuleId = new byte[2049]; try { if (m_bUpdateIni == false) { UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); } Array.Clear(outHwStatus, 0x0, outHwStatus.Length); Array.Clear(outIntegrityStatus, 0x0, outIntegrityStatus.Length); Array.Clear(outCardInStatus, 0x0, outCardInStatus.Length); Array.Clear(outReaderName, 0x0, outReaderName.Length); Array.Clear(outReaderVersion, 0x0, outReaderVersion.Length); Array.Clear(outModuleId, 0x0, outModuleId.Length); if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnRfReaderStatus.Start."); if (m_cDevStatus.SignPad.UseYn == false) return arReturn; iRet = SpcnRfReaderStatus(outHwStatus, outIntegrityStatus, outCardInStatus, outReaderName, outReaderVersion, outModuleId); } else { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnIcReaderStatus.Start."); if (m_cDevStatus.ICReader.UseYn == false) return arReturn; iRet = SpcnIcReaderStatus(outHwStatus, outIntegrityStatus, outCardInStatus, outReaderName, outReaderVersion, outModuleId); } if (iRet > 0) { arReturn = new string[] { ByteToString(outHwStatus) , ByteToString(outIntegrityStatus) , ByteToString(outCardInStatus) , ByteToString(outReaderName) , ByteToString(outReaderVersion) , ByteToString(outModuleId)}; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Success. "); } else { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Error. " + iRet); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Exception. " + ex.Message); } return arReturn; } /// /// 카드번호 암호화 /// //#20170913 현금영수증, 포인트카드 마스킹 미적용 start //기존 //public string GetEncryptedCardNo(string sPlainCardNo) //변경 public string GetEncryptedCardNo(string sPlainCardNo, string sEncGB = "1") //#20170913 현금영수증, 포인트카드 마스킹 미적용 end { int iRtn = -1; string sRtn = string.Empty; byte[] outEncryptedCardNo; try { outEncryptedCardNo = new byte[2049]; Array.Clear(outEncryptedCardNo, 0x0, outEncryptedCardNo.Length); #if !DEVICE_MSR_VER // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return sRtn; } if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return sRtn; } //#20171024 START, PHJ if ( (m_sPAY_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM) && (m_sPAY_DTL_CD == ItemConst.TR_ITEM_ID.ETC_INFO.CASHBILL) && (sPlainCardNo.Length >= 16) && (sPlainCardNo.StartsWith(PosConst.HP_CARD_PRIFIX))) { sPlainCardNo = CmUtil.MidH(sPlainCardNo, 0, 16); //#20171024 START, PHJ - 20171027 m_sPAY_WAY_CD = ""; m_sPAY_DTL_CD = ""; //#20171024 END, PHJ - 20171027 } //#20171024 END, PHJ iRtn = SpcnIcReaderCardEncrypt(Encoding.Default.GetBytes(sPlainCardNo), outEncryptedCardNo); if (iRtn == -161 || iRtn == -162) { SpcnStopProcess(0); // 이전 진행중인 처리가 있다면 중지 후 암호화 처리(2017.06.01) iRtn = SpcnIcReaderCardEncrypt(Encoding.Default.GetBytes(sPlainCardNo), outEncryptedCardNo); } if (iRtn <= 0) return sRtn; sRtn = ByteToString(outEncryptedCardNo); //#20171123 서명패드로 입력받는 경우 마스킹 미처리 start if (sEncGB == "0") { sRtn = CmUtil.MidH(sRtn, 0, 514) + sPlainCardNo; } //#20171123 서명패드로 입력받는 경우 마스킹 미처리 end #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return sRtn; } if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return sRtn; } //#20171024 START, PHJ if ( (m_sPAY_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM) && (m_sPAY_DTL_CD == ItemConst.TR_ITEM_ID.ETC_INFO.CASHBILL) && (sPlainCardNo.Length >= 16) && (sPlainCardNo.StartsWith(PosConst.HP_CARD_PRIFIX))) { sPlainCardNo = CmUtil.MidH(sPlainCardNo, 0, 16); //#20171024 START, PHJ - 20171027 m_sPAY_WAY_CD = ""; m_sPAY_DTL_CD = ""; //#20171024 END, PHJ - 20171027 } //#20171024 END, PHJ iRtn = SpcnIcReaderCardEncrypt(Encoding.Default.GetBytes(sPlainCardNo), outEncryptedCardNo); if (iRtn == -161 || iRtn == -162) { SpcnStopProcess(0); // 이전 진행중인 처리가 있다면 중지 시킨다. iRtn = SpcnIcReaderCardEncrypt(Encoding.Default.GetBytes(sPlainCardNo), outEncryptedCardNo); } if (iRtn <= 0) return sRtn; sRtn = ByteToString(outEncryptedCardNo); } else { // MSR string sInputType = ""; //#20171024 START, PHJ //기존 //sPlainCardNo = MSR_CardNoCheck(sPlainCardNo, "", ref sInputType); //변경 sPlainCardNo = MSR_CardNoCheck(sPlainCardNo, "", ref sInputType, m_sPAY_WAY_CD, m_sPAY_DTL_CD); //#20171024 END, PHJ //#20170913 현금영수증, 포인트카드 마스킹 미적용 start //기존 //sRtn = "00" + CmUtil.MidH(sPlainCardNo, 0, 512) + CmUtil.MidH(sPlainCardNo, 0, 6) + "********"; //변경 if (sEncGB == "0") { sRtn = "00" + CmUtil.MidH(sPlainCardNo, 0, 512) + sPlainCardNo; } else { sRtn = "00" + CmUtil.MidH(sPlainCardNo, 0, 512) + CmUtil.MidH(sPlainCardNo, 0, 6) + "********"; } //#20170913 현금영수증, 포인트카드 마스킹 미적용 end } #endif } catch (Exception ex) { sRtn = sPlainCardNo; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return sRtn; } /// /// [IC리더기] 배출 요청 /// public bool Exhaust_ICCard() { int iRtn = 0; bool bRtn = false; byte[] maintainType = Encoding.Default.GetBytes("2"); byte[] backFeeding = Encoding.Default.GetBytes("00"); byte[] etcData = Encoding.Default.GetBytes(""); byte[] output_msg = Encoding.Default.GetBytes(""); iRtn = SpcnIcReaderCardExhaust(3, 0, maintainType, backFeeding, etcData, output_msg); if (iRtn > 0) { bRtn = true; } return bRtn; } /// /// [IC리더기] 초기화 요청 /// public bool Init_ICReader(string sDeviceType) { int iRtn = 0; bool bRtn = false; try { if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { // 서명패드 초기화 iRtn = SpcnRfReaderInit(); } else { if (m_bUpdateIni == false) { UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); } // IC 리더기 초기화 iRtn = SpcnIcReaderInit(); } if (iRtn > 0) { bRtn = true; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// [IC리더기] 시간설정 요청 /// public bool SetTime_ICReader(string sDeviceType) { int iRtn = 0; bool bRtn = false; try { if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { if (m_cDevStatus.SignPad.UseYn != true) return bRtn; // 서명패드 시간설정 요청 iRtn = SpcnRfReaderSetTime(); } else { if (m_cDevStatus.ICReader.UseYn == false) return bRtn; // IC 리더기 시간설정 요청 iRtn = SpcnIcReaderSetTime(); } if (iRtn > 0) { bRtn = true; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// [IC리더기] 상호인증 요청 /// /// /// /// public string KeyDownload_ICReader(string sDeviceType, string sTerminerID) { int iRtn = 0; string sRet = UserCom.RST_ERR; try { // 서명패드 무결성 검사시 if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { if (m_cDevStatus.SignPad.UseYn == false) return sRet; // 상태 확인 SetAuthInfoString(sDeviceType); UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnRfReaderKeyDownload.Start. " + AuthInfo_RF.ToString()); // 상호인증 iRtn = SpcnRfReaderKeyDownload(Encoding.Default.GetBytes(sTerminerID), Encoding.Default.GetBytes(AuthInfo_RF.ToString())); } else { if (m_cDevStatus.ICReader.UseYn == false) return sRet; if (m_bUpdateIni == false) { UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); } // 상태 확인 SetAuthInfoString(sDeviceType); UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnIcReaderKeyDownload.Start. " + AuthInfo_IC.ToString()); // 상호인증 iRtn = SpcnIcReaderKeyDownload(Encoding.Default.GetBytes(sTerminerID), Encoding.Default.GetBytes(AuthInfo_IC.ToString())); } if (iRtn > 0) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Success. "); sRet = UserCom.RST_OK; } else { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Error. " + iRtn); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return sRet; } /// /// [IC리더기] 무결성검사 요청 /// /// 장비구분:IC/ SignPad /// 응답 결과 시간 /// true:정상처리, false:에러 public string IntegrityCheck_ICReader(string sDeviceType, ref string sRsltTime) { int iRtn = 0; string sRet = UserCom.RST_ERR; byte[] outResTime = new byte[2049]; // 무결성 검사 상태값 설정 DeviceStatus m_cDevStatus = (DeviceStatus)StateObject.DEVICE; try { sRsltTime = string.Empty; Array.Clear(outResTime, 0x0, outResTime.Length); // 상태 확인 SetAuthInfoString(sDeviceType); // 시간설정 SetTime_ICReader(sDeviceType); // 서명패드 무결성 검사시 if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { if (m_cDevStatus.SignPad.UseYn == false) return sRet; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnRfReaderIntegrity.Start. "); // 무결성 검사 iRtn = SpcnRfReaderIntegrity(outResTime); } else { if (m_cDevStatus.ICReader.UseYn == false) return sRet; if (m_bUpdateIni == false) { UpdateIniConfig(m_cDevStatus.ICReader.VanIP, m_cDevStatus.ICReader.VanPort); } UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnIcReaderIntegrity.Start. "); // 무결성 검사 iRtn = SpcnIcReaderIntegrity(outResTime); } if (iRtn > 0) { sRsltTime = ByteToString(outResTime); sRet = UserCom.RST_OK; if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.IC_READER) m_cDevStatus.ICReader.Integrity_IC_Status = true; else if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) m_cDevStatus.ICReader.Integrity_SignPad_Status = true; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Success. "); } else { sRsltTime = string.Empty; // 무결성 실패시 인증번호 삭제 if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.IC_READER) { m_sAuthInfo_IC.Clear(); m_cDevStatus.ICReader.Integrity_IC_Status = false; } else if (sDeviceType == PosConst.POS_CARD_READER_DEVICE_TYPE.SAIGNPAD) { m_sAuthInfo_RF.Clear(); m_cDevStatus.ICReader.Integrity_SignPad_Status = false; } UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Error. " + iRtn); } } catch (Exception ex) { sRsltTime = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return sRet; } /// /// [IC리더기] 카드 정보 요청 /// public bool GetCardInfo_ICReader(int iTranType, int iAmount, ref string sRsltMsg) { return GetCardInfo_ICReader(iTranType, iAmount, ref sRsltMsg, false); } public bool GetCardInfo_ICReader(int iTranType, int iAmount, ref string sRsltMsg, bool bMask) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[4096]; try { #if !DEVICE_MSR_VER sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { //Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return bRtn; } else if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { //Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return bRtn; } UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "SpcnIcReaderCardInfo.Start. "); iRtn = SpcnIcReaderCardInfo(iTranType, Encoding.Default.GetBytes(m_cPosStatus.Base.OlePosICReaderSerialNumber), iAmount, outMsg); if (iRtn > 0) { //카드번호 뒷 4자리 *로 치환 - 여전법대응! (마스킹 필요한 카드 필요시 사용) if (outMsg.Length > 1046 && bMask == false) { for (int iRow = 1042; iRow < 1046; iRow++) { if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! { outMsg[iRow] = (byte)0x2A; //*로 치환 } } } ByteToString(outMsg, ref sRsltMsg); bRtn = true; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Success. "); } else { //Block된 카드인경우 에러 메세지! //if (iRtn == -144) // WinManager.ErrorMessage(ErrCodeToMsg(iRtn)); if (iRtn != -118) { string sErrMsg = ErrCodeToMsg(iRtn); //Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } else { UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn); } sRsltMsg = string.Empty; } #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return bRtn; } else if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return bRtn; } iRtn = SpcnIcReaderCardInfo(iTranType, Encoding.Default.GetBytes(m_cPosStatus.Base.OlePosICReaderSerialNumber), iAmount, outMsg); if (iRtn > 0) { //카드번호 뒷 4자리 *로 치환 - 여전법대응! (마스킹 필요한 카드 필요시 사용) if (outMsg.Length > 1046 && bMask == false) { for (int iRow = 1042; iRow < 1046; iRow++) { if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! { outMsg[iRow] = (byte)0x2A; //*로 치환 } } } ByteToString(outMsg, ref sRsltMsg); bRtn = true; } else { //Block된 카드인경우 에러 메세지! //if (iRtn == -144) // WinManager.ErrorMessage(ErrCodeToMsg(iRtn)); if (iRtn != -118) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } sRsltMsg = string.Empty; } } #endif } catch (Exception ex) { sRsltMsg = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// [IC리더기] 발급사 인증 요청 /// public bool CardIssuer_ICReader(string sIcChipData, ref string sRsltMsg) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[2049]; try { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); iRtn = SpcnIcReaderCardIssuer(Encoding.Default.GetBytes(sIcChipData), outMsg); if (iRtn > 0) { sRsltMsg = ByteToString(outMsg); if (CmUtil.MidH(sRsltMsg, 0, 2) == "00") { bRtn = true; } else { bRtn = false; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) "Error - IssuerRecvValue : " + sRsltMsg); } } else { sRsltMsg = string.Empty; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// 승인 요청 /// public int SpcnCommPos(string sInputMsg, string sSignData, string sIcData, string sOilData, string m_sAuthInfo, ref string sRecvData) { int nReturn = -99; try { byte[] bytInputMsg = null; byte[] bytSignData = null; byte[] bytIcData = null; byte[] bytOilData = null; byte[] bytAuthInfo = null; byte[] bytOutput = new byte[4096]; sRecvData = string.Empty; Array.Clear(bytOutput, 0, bytOutput.Length); //// 무결성 실패후 진행시 오류 메시지 표시 //if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cPosStatus.Base.OlePosICReaderUseFlag == "1") //{ // Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); // return nReturn; //} bytInputMsg = Encoding.Default.GetBytes(sInputMsg); bytSignData = Encoding.Default.GetBytes(sSignData); bytIcData = Encoding.Default.GetBytes(sIcData); //#20180827 유가보조/면세유 미사용 start //기존 bytOilData = Encoding.Default.GetBytes(sOilData); //변경 /* UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "[sOilData:" + sOilData); sOilData = ""; bytOilData = Encoding.Default.GetBytes(sOilData); */ //#20180827 유가보조/면세유 미사용 end if (m_sAuthInfo == PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_RF) { bytAuthInfo = Encoding.Default.GetBytes(AuthInfo_RF.ToString()); } else { bytAuthInfo = Encoding.Default.GetBytes(AuthInfo_IC.ToString()); } #if !DEVICE_MSR_VER nReturn = SpcnIcPos(bytInputMsg, sInputMsg.Length, bytSignData, bytIcData, bytOilData, bytAuthInfo, bytOutput); // IC 승인조회 #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { nReturn = SpcnIcPos(bytInputMsg, sInputMsg.Length, bytSignData, bytIcData, bytOilData, bytAuthInfo, bytOutput); // IC 승인조회 } else { //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 Start // 기존 //nReturn = SpcnPos(bytInputMsg, sInputMsg.Length, bytOutput); // MSR 승인조회 if ((sIcData != "" || sIcData != null) && m_sAuthInfo == PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_RF) // 해피기프트(신) MS에서 RF 승인 시 nReturn = SpcnIcPos(bytInputMsg, sInputMsg.Length, bytSignData, bytIcData, bytOilData, bytAuthInfo, bytOutput); // IC 승인조회 else nReturn = SpcnPos(bytInputMsg, sInputMsg.Length, bytOutput); // MSR 승인조회 //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 End } #endif if (nReturn < 0) //승인실퍠 { // 실패경우 sRecvData = ErrCodeToMsg(nReturn); } else { sRecvData = ByteToString(bytOutput); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return nReturn; } /// /// 망취소 요청 /// /// 직전 승인 요청전문 /// 직전 승인 응답전문 /// 응답전문 /// public int SpcnCommPosForNetCancel(string sReqMsg, string sResMsg, ref string sRecvData) { int nReturn = -99; try { byte[] bytReqMsg = Encoding.Default.GetBytes(sReqMsg); byte[] bytResMsg = Encoding.Default.GetBytes(sResMsg); byte[] bytOutput = new byte[2049]; sRecvData = string.Empty; Array.Clear(bytOutput, 0, bytOutput.Length); #if !DEVICE_MSR_VER // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return nReturn; } if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return nReturn; } nReturn = SpcnReversal(bytReqMsg, bytResMsg, Encoding.Default.GetBytes(AuthInfo_IC.ToString()), bytOutput); #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.UseYn == false) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0389); return nReturn; } if (m_cDevStatus.ICReader.Integrity_IC_Status != true) { Cosmos.CommonManager.WinManager.ErrorMessage(Cosmos.CommonManager.POS_MESSAGE.ERROR.MSG_0386); return nReturn; } nReturn = SpcnReversal(bytReqMsg, bytResMsg, Encoding.Default.GetBytes(AuthInfo_IC.ToString()), bytOutput); } else { // MSR 망취소 함수 확인 필요 //nReturn = SpcnReversal(bytReqMsg, bytResMsg, Encoding.Default.GetBytes(AuthInfo_IC.ToString()), bytOutput); } #endif if (nReturn < 0) //승인실퍠 { //실패경우 sRecvData = ErrCodeToMsg(nReturn); } else { sRecvData = ByteToString(bytOutput); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return nReturn; } /// /// RF 카드 정보 요청 /// /// /// /// /// /// /// /// public bool GetRfCreditCardInfo(string sSamType, string sAmount, string sMsg1, string sMsg2, string sMsg3, ref string sRsltMsg) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[2049]; try { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); DeviceStatus m_cDevStatus = (DeviceStatus)StateObject.DEVICE; if (m_cDevStatus.SignPad.UseYn != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0390); return false; } #if !DEVICE_MSR_VER if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) { //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 Start //sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0385); //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 End return false; } } // 터미널 ID가져오기 string sTerminalNo = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); byte[] bytTerminalNo = Encoding.Default.GetBytes(sTerminalNo); byte[] bytSamType = Encoding.Default.GetBytes(sSamType); byte[] bytAmount = Encoding.Default.GetBytes(sAmount); byte[] bytsMsg1 = Encoding.Default.GetBytes(sMsg1); byte[] bytsMsg2 = Encoding.Default.GetBytes(sMsg2); byte[] bytsMsg3 = Encoding.Default.GetBytes(sMsg3); iRtn = SpcnRfCreditCardInfo(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); if (iRtn <= 0) { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } return false; } //카드번호 뒷 4자리 *로 치환 - 여전법대응! if (outMsg.Length > 526) { for (int iRow = 526; iRow < 530; iRow++) { if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! { outMsg[iRow] = (byte)0x2A; //*로 치환 } } } ByteToString(outMsg, ref sRsltMsg); bRtn = true; #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); return false; } } // 터미널 ID가져오기 string sTerminalNo = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); byte[] bytTerminalNo = Encoding.Default.GetBytes(sTerminalNo); byte[] bytSamType = Encoding.Default.GetBytes(sSamType); byte[] bytAmount = Encoding.Default.GetBytes(sAmount); byte[] bytsMsg1 = Encoding.Default.GetBytes(sMsg1); byte[] bytsMsg2 = Encoding.Default.GetBytes(sMsg2); byte[] bytsMsg3 = Encoding.Default.GetBytes(sMsg3); if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) iRtn = SpcnRfCreditCardInfo(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); else iRtn = SpcnRfCreditCardInfoEx(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); if (iRtn <= 0) { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } return false; } string sTempData = ByteToString(outMsg); //미인증 데이터 인증 데이터 포멧으로 변환 //카드구분(1)+카드방식(1)+신용Track데이터(40)+포인트Track데이터(42)+IC Chip 데이터(512) //카드구분(1)+카드방식(1)+카드정보(512)+마스킹카드번호(40)+서비스코드(5)+포인트카드정보(512)+포인트마스킹(40)+포인트서비스코드(5)+IC CHIP(512)+삼성페이 서비스(40) sRsltMsg = CmUtil.LeftH(CmUtil.MidH(sTempData, 0, 42), 514); sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 2, 6) + (CmUtil.MidH(sTempData, 8, 10).Replace("=", "").Trim().Length == 9 ? "*********" : "**********"), 40); sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 34, 5), 5); sRsltMsg += CmUtil.LeftH("", 557); sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 84, 512), 512); sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 42, 40), 40); ////카드번호 뒷 4자리 *로 치환 - 여전법대응! //if (outMsg.Length > 526) //{ // for (int iRow = 526; iRow < 530; iRow++) // { // if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! // { // outMsg[iRow] = (byte)0x2A; //*로 치환 // } // } // if (m_cDevStatus.ICReader.UseYn != true) // 여전법 인증여부(0:MSR, 1:IC) // { // for (int iRow = 0; iRow < 16; iRow++) // { // if (iRow >= 0 && iRow < 6) // outMsg[514 + iRow] = outMsg[2 + iRow]; // 카드 bin // else if (iRow >= 6 && iRow < 16) // outMsg[514 + iRow] = (byte)0x2A; // 7~16 *로 변환 // } // for (int iRow = 34; iRow < 40; iRow++) // { // outMsg[555 + (iRow-35)] = outMsg[iRow]; // 서비스 코드 // } // } //} //ByteToString(outMsg, ref sRsltMsg); bRtn = true; #endif } catch (Exception ex) { sRsltMsg = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } //20171013 dkshin 해피기프트(신) IC/RF 충전 및 승인 /// /// RF 코나머니카드 정보 요청 /// /// /// /// /// /// /// /// public bool GetRfEtcCardInfo(string sSamType, string sAmount, string sMsg1, string sMsg2, string sMsg3, ref string sRsltMsg) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[2049]; try { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); DeviceStatus m_cDevStatus = (DeviceStatus)StateObject.DEVICE; if (m_cDevStatus.SignPad.UseYn != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0390); return false; } #if !DEVICE_MSR_VER if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) { //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 Start //sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0385); //#20171208, RF버튼 선택 시에만 서명패드 무결성 체크하도록 수정 End return false; } } // 터미널 ID가져오기 string sTerminalNo = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); byte[] bytTerminalNo = Encoding.Default.GetBytes(sTerminalNo); byte[] bytSamType = Encoding.Default.GetBytes(sSamType); byte[] bytAmount = Encoding.Default.GetBytes(sAmount); byte[] bytsMsg1 = Encoding.Default.GetBytes(sMsg1); byte[] bytsMsg2 = Encoding.Default.GetBytes(sMsg2); byte[] bytsMsg3 = Encoding.Default.GetBytes(sMsg3); iRtn = SpcnRfEtcCardInfo(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); if (iRtn <= 0) { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } return false; } //카드번호 뒷 4자리 *로 치환 - 여전법대응! if (outMsg.Length > 526) { for (int iRow = 526; iRow < 530; iRow++) { if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! { outMsg[iRow] = (byte)0x2A; //*로 치환 } } } ByteToString(outMsg, ref sRsltMsg); bRtn = true; #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { // 무결성 실패후 진행시 오류 메시지 표시 if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); return false; } } // 터미널 ID가져오기 string sTerminalNo = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); byte[] bytTerminalNo = Encoding.Default.GetBytes(sTerminalNo); byte[] bytSamType = Encoding.Default.GetBytes(sSamType); byte[] bytAmount = Encoding.Default.GetBytes(sAmount); byte[] bytsMsg1 = Encoding.Default.GetBytes(sMsg1); byte[] bytsMsg2 = Encoding.Default.GetBytes(sMsg2); byte[] bytsMsg3 = Encoding.Default.GetBytes(sMsg3); //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 Start //if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) // iRtn = SpcnRfCreditCardInfo(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); //else // iRtn = SpcnRfCreditCardInfoEx(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); iRtn = SpcnRfEtcCardInfo(bytTerminalNo, bytSamType, bytAmount, bytsMsg1, bytsMsg2, bytsMsg3, outMsg); //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 End if (iRtn <= 0) { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } return false; } //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 Start // 기존 //string sTempData = ByteToString(outMsg); //미인증 데이터 인증 데이터 포멧으로 변환 //카드구분(1)+카드방식(1)+신용Track데이터(40)+포인트Track데이터(42)+IC Chip 데이터(512) //카드구분(1)+카드방식(1)+카드정보(512)+마스킹카드번호(40)+서비스코드(5)+포인트카드정보(512)+포인트마스킹(40)+포인트서비스코드(5)+IC CHIP(512)+삼성페이 서비스(40) //sRsltMsg = CmUtil.LeftH(CmUtil.MidH(sTempData, 0, 42), 514); //sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 2, 6) + (CmUtil.MidH(sTempData, 8, 10).Replace("=", "").Trim().Length == 9 ? "*********" : "**********"), 40); //sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 34, 5), 5); //sRsltMsg += CmUtil.LeftH("", 557); //sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 84, 512), 512); //sRsltMsg += CmUtil.LeftH(CmUtil.MidH(sTempData, 42, 40), 40); // 변경 if (outMsg.Length > 526) { for (int iRow = 526; iRow < 530; iRow++) { if (outMsg[iRow] != ((byte)0x20)) //스페이스 아니면! { outMsg[iRow] = (byte)0x2A; //*로 치환 } } } ByteToString(outMsg, ref sRsltMsg); //#20171129, 해피기프트(신) MS매장 RF카드 IC승인되도록 수정 End bRtn = true; #endif } catch (Exception ex) { sRsltMsg = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// SPC 사원 카드 정보 읽기 /// /// /// public bool GetSpcEmpCardInfo(ref string sRsltMsg) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[2049]; try { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); DeviceStatus m_cDevStatus = (DeviceStatus)StateObject.DEVICE; if (m_cDevStatus.SignPad.UseYn != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0390); return false; } //#if !DEVICE_MSR_VER // // 무결성 실패후 진행시 오류 메시지 표시 // if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) // { // sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); // return false; // } //#else // if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) // { // // 무결성 실패후 진행시 오류 메시지 표시 // if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) // { // sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); // return false; // } // } //#endif iRtn = SpcnRfEmployeeCardInfo(outMsg); if (iRtn > 0) { ByteToString(outMsg, ref sRsltMsg); bRtn = true; } else { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } sRsltMsg = string.Empty; } } catch (Exception ex) { sRsltMsg = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// 선불카드 조회 /// /// public bool RfPrepaidCardInfo(ref string sRsltMsg) { int iRtn = 0; bool bRtn = false; byte[] outMsg = new byte[2049]; try { sRsltMsg = string.Empty; Array.Clear(outMsg, 0x0, outMsg.Length); DeviceStatus m_cDevStatus = (DeviceStatus)StateObject.DEVICE; if (m_cDevStatus.SignPad.UseYn != true) { sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0390); return false; } //#if !DEVICE_MSR_VER // // 무결성 실패후 진행시 오류 메시지 표시 // if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) // { // sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); // return false; // } //#else // if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) // { // // 무결성 실패후 진행시 오류 메시지 표시 // if (m_cDevStatus.ICReader.Integrity_SignPad_Status != true) // { // sRsltMsg = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0387); // return false; // } // } //#endif iRtn = SpcnRfPrepaidCardInfo(outMsg); if (iRtn > 0) { ByteToString(outMsg, ref sRsltMsg); bRtn = true; } else { if (iRtn != -84) { string sErrMsg = ErrCodeToMsg(iRtn); Cosmos.CommonManager.WinManager.ErrorMessage(sErrMsg); UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ERROR => CODE : " + iRtn + "=" + sErrMsg); } return false; } } catch (Exception ex) { sRsltMsg = string.Empty; UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return bRtn; } /// /// IC 콜백 요청 /// /// /// public bool RegIcCallback(PosOLEDevice.DelegateIcReader delegateReader) { try { // return true; // 콜백 제거(2017.05.15) #if !DEVICE_MSR_VER if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnRegIcCallback.Start"); GCHandle gch = GCHandle.Alloc(delegateReader); IntPtr intptr_delegate = Marshal.GetFunctionPointerForDelegate(delegateReader); SpcnStopProcess(0); SpcnRegIcCallback(intptr_delegate); gch.Free(); m_bIcReaderCallBack = true; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnRegIcCallback.Success"); #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; GCHandle gch = GCHandle.Alloc(delegateReader); IntPtr intptr_delegate = Marshal.GetFunctionPointerForDelegate(delegateReader); SpcnRegIcCallback(intptr_delegate); gch.Free(); m_bIcReaderCallBack = true; } #endif return true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return false; } /// /// IC 콜백 해지 /// /// public bool UnRegIcCallback() { try { // return true; // 콜백 제거(2017.05.15) #if !DEVICE_MSR_VER if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_bIcReaderCallBack == false) return false; //if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnUnRegIcCallback.Start"); SpcnUnRegIcCallback(); m_bIcReaderCallBack = false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnUnRegIcCallback.Success"); #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; SpcnUnRegIcCallback(); m_bIcReaderCallBack = false; } #endif return true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return false; } /// /// IC 콜백 설정 /// /// public bool IcReaderSettingDevice(bool bEnable) { try { // return true; // 콜백 제거(2017.05.15) #if !DEVICE_MSR_VER if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; StringBuilder a = new StringBuilder(); StringBuilder b = new StringBuilder(); byte[] by_a = new byte[3]; byte[] by_b = new byte[3]; int rc = 0; if (bEnable == true) { a.Append("U1"); b.Append("1"); } else { a.Append("U1"); b.Append("0"); } by_a = System.Text.Encoding.UTF8.GetBytes(a.ToString()); by_b = System.Text.Encoding.UTF8.GetBytes(b.ToString()); rc = SpcnIcReaderSettingDevice(by_a, by_b); #else if (m_cDevStatus.ICReader.UseYn == true) // 여전법 인증여부(0:MSR, 1:IC) { if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; StringBuilder a = new StringBuilder(); StringBuilder b = new StringBuilder(); byte[] by_a = new byte[3]; byte[] by_b = new byte[3]; int rc = 0; if (bEnable == true) { a.Append("U1"); b.Append("1"); } else { a.Append("U1"); b.Append("0"); } by_a = System.Text.Encoding.UTF8.GetBytes(a.ToString()); by_b = System.Text.Encoding.UTF8.GetBytes(b.ToString()); rc = SpcnIcReaderSettingDevice(by_a, by_b); } #endif return true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return false; } /// /// 문자열을 바이트열로 변환 /// /// /// private byte[] GetByteArrayFromString(string src) { return System.Text.Encoding.Default.GetBytes(src); } /// /// 응답코드 /// /// /// private string ErrCodeToMsg(int nErrCode) { string sMsg = string.Empty; try { switch (nErrCode) { case -3: sMsg = "암호화오류(전문생성오류)"; break; case -4: sMsg = "암호화오류(전문생성오류)"; break; case -5: sMsg = "암호화오류 (전문오류)"; break; case -6: sMsg = "암호화오류 (전문오류)"; break; case -7: sMsg = "암호화오류 (키생성)"; break; case -8: sMsg = "암호화오류 (키생성)"; break; case -9: sMsg = "암호화오류 (키생성)"; break; case -10: sMsg = "요청 IP 오류"; break; case -11: sMsg = "암호화 구분 2 붙인 전문 오류"; break; case -12: sMsg = "전자서명 전문일 경우 전문길이 필드 없는 오류"; break; case -13: sMsg = "전자서명 전문일 경우 전문길이 필드 없는 오류"; break; case -14: sMsg = "전문 전체길이 체크 오류"; break; case -15: sMsg = "파라미터 오류 (접속 IP 오류)"; break; case -16: sMsg = "파라미터 오류 (요청전문 오류)"; break; case -17: sMsg = "전자서명 암호화 오류"; break; case -18: sMsg = "개시거래 요망"; break; case -20: sMsg = "SOCKET CONNECT 오류"; break; case -21: sMsg = "SOCKET SELECT 오류"; break; case -22: sMsg = "SOCKET RECV SELECT 오류"; break; case -23: sMsg = "SOCKET RECV SELECT 오류"; break; case -24: sMsg = "SOCKET RECV 오류"; break; case -25: sMsg = "SOCKET RECV 오류"; break; case -26: sMsg = "SOCKET SEND 오류"; break; case -30: sMsg = "전문오류 (전자서명 필요없는 거래)"; break; case -31: sMsg = "전문오류 (전자서명 데이터 구조 오류)"; break; case -32: sMsg = "전문오류 (CR 없음)"; break; case -33: sMsg = "전문오류 (ETX 없음)"; break; case -34: sMsg = "전문오류(FS2 없음)"; break; case -35: sMsg = "전자서명오류 (암호화 오류)"; break; case -36: sMsg = "전자서명 길이 오류 (모바일)"; break; case -37: sMsg = "IC데이터 오류 (FS오류)"; break; case -38: sMsg = "IC데이터 오류(IC데이터/등록정보 오류)"; break; case -40: sMsg = "EOT 미수신 (수신X)"; break; case -41: sMsg = "EOT 미수신 (수신오류)"; break; case -42: sMsg = "SOCKET 초기화 오류"; break; case -43: sMsg = "SOCKET CONNECT 오류"; break; case -44: sMsg = "SOCKET SEND 오류 (암호화)"; break; case -45: sMsg = "SOCKET SEND 오류 (전문)"; break; case -46: sMsg = "SOCKET RECV 오류 (헤더)"; break; case -47: sMsg = "SOCKET RECV 오류 (전문)"; break; case -48: sMsg = "SOCKET RECV 오류 (암호화)"; break; case -49: sMsg = "SOCKET RECV 오류 (CHECK)"; break; case -50: sMsg = "SOCKET SEND 오류 (ACK)"; break; case -60: sMsg = "(모바일)SOCKET 생성 오류"; break; case -61: sMsg = "(모바일)SOCKET CONNECT 오류"; break; case -62: sMsg = "(모바일)SOCKET SELECT 오류"; break; case -63: sMsg = "(모바일)SOCKET 옵션 설정 오류"; break; case -64: sMsg = "(모바일)SOCKET 옵션 설정 오류"; break; case -65: sMsg = "(모바일)SOCKET 오류"; break; case -66: sMsg = "(모바일)SOCKET RECV 오류"; break; case -67: sMsg = "(모바일)SOCKET RECV SELECT 오류"; break; case -68: sMsg = "(모바일)SOCKET RECV SELECT 오류"; break; case -69: sMsg = "(모바일)SOCKET SEND 오류"; break; case -70: sMsg = "(모바일)SOCKET SEND SELECT 오류"; break; case -79: sMsg = "시리얼 클래스 생성 오류"; break; case -80: sMsg = "INI 파일 오류 (TYPE 구분 설정요망)"; break; case -81: sMsg = "싸인패드 포트 오류"; break; case -82: sMsg = "싸인패드 포트 오류"; break; case -83: sMsg = "싸인패드 통신 오류"; break; case -84: sMsg = "싸인패드 사용자 취소"; break; case -85: sMsg = "싸인패드 타임아웃 오류"; break; case -86: sMsg = "싸인패드 오픈 오류"; break; case -87: sMsg = "싸인패드 초기화 오류"; break; case -88: sMsg = "싸인패드 요청 오류"; break; case -89: sMsg = "싸인패드 통신 오류"; break; case -90: sMsg = "요청전문오류 (헤더 메시지 길이 오류)"; break; case -91: sMsg = "요청전문오류 (거래구분 코드 오류)"; break; case -92: sMsg = "미지원 전문"; break; case -93: sMsg = "요청전문 필수 항목 누락"; break; case -94: sMsg = "버퍼 초과"; break; case -95: sMsg = "핀블럭 길이 오류"; break; case -96: sMsg = "(전자서명생성) 이미지 파일 미존재"; break; case -97: sMsg = "(전자서명생성) 이미지 파일 읽기 오류"; break; case -98: sMsg = "(전자서명생성) 이미지 파일 크기 오류"; break; case -99: sMsg = "(전자서명생성) 이미지 파일 데이터 오류"; break; case -101: sMsg = "IC리더기 포트 설정 오류"; break; case -102: sMsg = "IC리더기 오픈 오류"; break; case -103: sMsg = "IC리더기 시리얼 생성 오류"; break; case -104: sMsg = "IC리더기 파라미터 오류"; break; case -105: sMsg = "IC리더기 쓰기 오류"; break; case -106: sMsg = "보안표준키 다운로드 항목 오류(K2)"; break; case -107: sMsg = "보안표준키 다운로드 승인 거절(K2)"; break; case -108: sMsg = "보안표준키 다운로드 항목 오류(K4)"; break; case -109: sMsg = "보안표준키 다운로드 승인 거절(K4)"; break; case -110: sMsg = "IC리더기 응답 오류(Class 생성 오류)"; break; case -111: sMsg = "IC리더기 응답 오류(길이 정보 수신 오류)"; break; case -112: sMsg = "IC리더기 응답 오류(STX 오류)"; break; case -113: sMsg = "IC리더기 응답 오류(수신 오류)"; break; case -114: sMsg = "IC리더기 응답전문 오류(STX 오류)"; break; case -115: sMsg = "IC리더기 응답전문 오류(ETX 오류)"; break; case -116: sMsg = "IC리더기 응답전문 오류(LRC 오류)"; break; case -117: sMsg = "IC리더기 초기화 오류"; break; case -118: sMsg = "IC리더기 사용자 취소"; break; case -119: sMsg = "IC리더기 타임아웃 오류"; break; case -120: sMsg = "IC리더기 통신 오류"; break; case -121: sMsg = "카드발급사 인증요청 IC CHIP DATA 오류"; break; case -122: sMsg = "카드발급사 인증요청 데이터 오류"; break; case -123: sMsg = "카드발급사 등록제 정보 데이터 오류"; break; case -124: sMsg = "카드발급사 응답전문 데이터 오류"; break; case -125: sMsg = "카드발급사 전문 구분 데이터 오류"; break; case -126: sMsg = "카드발급사 전문버젼 데이터 오류"; break; case -127: sMsg = "카드발급사 응답전문 미승인 오류"; break; case -128: sMsg = "카드발급사 응답전문 GS 데이터 오류"; break; case -129: sMsg = "카드발급사 인증 거절 (망취소 거절) - POS 망취소 요망"; break; case -130: sMsg = "카드발급사 인증 거절 (망취소 완료)"; break; case -131: sMsg = "망취소 실패(GS 없음) - POS에서 망취소 요망"; break; case -132: sMsg = "망취소 실패(서버 거절) - POS에서 망취소 요망"; break; case -133: sMsg = "망취소 실패(통신오류) - POS에서 망취소 요망"; break; case -134: sMsg = "망취소 대상 아님"; break; case -140: sMsg = "IC리더기 카드 읽기 오류 (거래매체 유형 미지정 오류)"; break; case -141: sMsg = "IC리더기 카드 읽기 오류 (거래매체 유형 예외 오류)"; break; case -142: sMsg = "IC리더기 카드 읽기 오류 (IC거래 구분 오류)"; break; case -143: sMsg = "IC리더기 거래중 카드 제거 오류"; break; case -144: sMsg = "IC리더기 거래가 거절된 카드 오류"; break; case -145: sMsg = "IC리더기 기타 오류"; break; case -146: sMsg = "IC리더기 거래 요청 전 카드 삽입 오류"; break; case -147: sMsg = "IC리더기 상호인증 미완료 후 거래 시도 오류"; break; case -148: sMsg = "IC리더기 무결성 미성공 후 거래 시도 오류"; break; case -149: sMsg = "IC리더기 에러 코드 발생 오류"; break; case -150: sMsg = "IC리더기 Fallback 진행 오류"; break; case -151: sMsg = "IC리더기 거래 중 오류 (비정상 응답)"; break; case -161: sMsg = "IC 거래 진행 중"; break; case -162: sMsg = "SIGNPAD 거래 진행 중"; break; case -2243: sMsg = "여러장의 카드가 입력됨"; break; case -2150: sMsg = "지원 불가 카드입니다."; break; default: sMsg = "정의되어 있지 않은 메세지" + "[" + nErrCode + "]"; break; } //sMsg = string.Format("ErrCd:{0} Desc:{1}", nErrCode, sMsg); } catch { } return sMsg; } #endregion #region 카드번호 첫자리와 끝자리 체크하여 문자인 경우 스페이스로 치환 /// /// 카드번호 첫자리와 끝자리 체크하여 문자인 경우 스페이스로 치환 /// /// /// //#20171024 START, PHJ //기존 //private string MSR_CardNoCheck(string sCardNo, string sValidDate, ref string sInputType) //변경 private string MSR_CardNoCheck(string sCardNo, string sValidDate, ref string sInputType, string sPayWayCd = "", string sPayDtlCd = "") //#20171024 END, PHJ { string sRet = ""; string sFirst = CmUtil.MidH(sCardNo, 0, 1); string sLast = CmUtil.MidH(sCardNo, CmUtil.LenH(sCardNo.Trim()) - 1, 1); try { if (sFirst.Contains("^") == true) return ""; else if (sFirst.Contains("%") == true) return ""; sCardNo = sCardNo.Trim(); if (sFirst.Contains(m_cDevStatus.Msr.STX) == true && m_cDevStatus.Msr.STX.Trim() != "") { // 첫자리가 ;, ? 경우 치환 sCardNo = CmUtil.MidH(sCardNo, 1, CmUtil.LenH(sCardNo.Trim())); } else if (CmUtil.IsNumber(sFirst) != true) { // 첫자리가 숫자가 아닌 경우 치환 sCardNo = CmUtil.MidH(sCardNo, 1, CmUtil.LenH(sCardNo.Trim())); } if (sLast.Contains(m_cDevStatus.Msr.ETX) == true && m_cDevStatus.Msr.ETX.Trim() != "") { // 끝자리가 ? 경우 치환 sCardNo = CmUtil.MidH(sCardNo, 0, CmUtil.LenH(sCardNo.Trim()) - 1); } if (sCardNo.IndexOf("=") > 0) { if (sCardNo.Trim().Length >= 37) sCardNo = CmUtil.MidH(sCardNo, 0, 37); sInputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; } else if (sValidDate != null && sValidDate.Trim() != "") { sCardNo = sCardNo + "=" + sValidDate; sInputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; } else { //#20171024 START, PHJ //기존 //sInputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; //변경 if ( (m_sPAY_WAY_CD == ItemConst.TR_ITEM_ID.ETC_INFO_ITEM) && (m_sPAY_DTL_CD == ItemConst.TR_ITEM_ID.ETC_INFO.CASHBILL) && (sCardNo.Length >= 16) && (sCardNo.StartsWith(PosConst.HP_CARD_PRIFIX))) { sInputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; sCardNo = CmUtil.MidH(sCardNo, 0, 16); m_sPAY_WAY_CD = ""; m_sPAY_DTL_CD = ""; } else { sInputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; } //#20171024 END, PHJ } sRet = sCardNo; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return sRet; } #endregion #region IC리더기 펌웨어 업데이트 요청 /// /// IC리더기 펌웨어 업데이트 요청 /// /// /// /// /// /// /// public bool SetDE_DownloadFW(int checkfwtout, int downfwtout, int nPort, byte[] DllCheck, ref string sMsg) { int iRtn = 0; bool bRtn = false; try { if (m_cDevStatus.ICReader.UseYn == false) return true; // IC리더기 펌웨어 업데이트 요청 iRtn = DE_DownloadFW(checkfwtout, downfwtout, nPort, DllCheck); // 응답값 sMsg = GetReturn_DE_DownloadFW(iRtn); // 업데이트 성공 또는 업데이트 필요없으면 정상 리턴 if (iRtn == 1000 || iRtn == 1001) bRtn = true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message + "\n" + sMsg ); } return bRtn; } //#20171016 IC리더기 펌웨어 업데이트 Start, srlee /// /// IC 리더기 펌웨어 업데이트_NEW /// /// /// /// /// /// public int SetDE_FWDOWN(int nPort, int nBaud, byte[] filepath, IntPtr callBackFunc) { int iRtn = -99; byte[] cPW = Encoding.UTF8.GetBytes("FC28CCCE3C301E274E135435C54A46CC"); try { DE_CallBackFunReg(callBackFunc); // IC리더기 펌웨어 업데이트 요청 iRtn = DE_FWDOWN(nPort, nBaud, cPW, filepath); if (iRtn != 0) // 0:정상 { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "ICREADER FW ERROR => CODE : " + iRtn); } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return iRtn; } //#20171016 IC리더기 펌웨어 업데이트 End, srlee #endregion #region IC리더기 펌웨어 업데이트 상태 응답값 /// /// IC리더기 펌웨어 업데이트 상태 응답값 /// /// /// private string GetReturn_DE_DownloadFW(int ret) { string sMsg = ""; try { switch (ret) { case 1000: sMsg = "성공하였습니다."; break; case 1001: sMsg = "업데이트가 필요없습니다."; break; case 1002: sMsg = "업데이트가 필요합니다."; break; case 1003: sMsg = "다운로드 체크 프로그램에서 응답을 못받았습니다."; break; case 1005: sMsg = "다운로드 체크 프로그램에서 응답 받는 환경 생성 실패하였습니다."; break; case 1006: sMsg = "업데이트 프로그램이 실행 안되어있습니다."; break; case 1: sMsg = "서버에 연결하지 않고 펌웨어 업데이트를 시도하였습니다."; break; case 2: sMsg = "다운로드할 단말기를 못찾았습니다."; break; case 3: sMsg = "FTP 연결에 실패하였습니다."; break; case 4: sMsg = "리더기 정보 및 서버 체크 중입니다."; break; case 5: sMsg = "업데이트 정보 파일 가져오기를 실패하였습니다."; break; case 6: sMsg = "업데이트 할 펌웨어 파일이 없습니다."; break; case 7: sMsg = "업데이트 할 펌웨어 파일 가져오기에 실패하였습니다."; break; case 8: sMsg = "펌웨어 인증에 실패하였습니다.(1)"; break; case 9: sMsg = "펌웨어 인증에 실패하였습니다.(2)"; break; case 10: sMsg = "펌웨어 인증에 실패하였습니다.(3)"; break; case 11: sMsg = "펌웨어 파일의 버전 조회에 실패하였습니다."; break; case 12: sMsg = "BIOS 인증에 실패하였습니다."; break; case 13: sMsg = "펌웨어 파일 읽기에 실패하였습니다."; break; case 14: sMsg = "펌웨어 파일 다운로드 도중에 실패하였습니다."; break; case 15: sMsg = "펌웨어 파일 다운로드 완료 후 실패하였습니다."; break; case 16: sMsg = "펌웨어 파일 다운로드 완료 후 펌웨어 확인에 실패하였습니다."; break; case 17: sMsg = "단말기 포트 연결에 실패하였습니다."; break; case 18: sMsg = "펌웨어 파일 다운로드 중입니다."; break; case 19: sMsg = "잘못된 펌웨어 버전 정보입니다."; break; case 20: sMsg = "서버에서 다운로드 받은 버전과 다운로드 완료한 펌웨어 파일의 버전 정보가 일치하지 않습니다."; break; case 21: sMsg = "서버 확인 로그 파일 저장에 실패하였습니다."; break; case 22: sMsg = "서버 확인 로그 파일 저장에 실패하였습니다."; break; case 23: sMsg = "서버 확인 로그 파일 저장에 실패하였습니다.(년도 폴더 생성 실패)"; break; case 24: sMsg = "서버 확인 로그 파일 저장에 실패하였습니다.(월 폴더 생성 실패)"; break; case 25: sMsg = "다운로드 받은 펌웨어 파일의 버전 확인에 실패하였습니다."; break; case 26: sMsg = "다운로드 도중 타임아웃 실패하였습니다."; break; case 27: sMsg = "이전 버전의 파일이 없습니다."; break; case 28: sMsg = "이전버전 파일 다운로드 도중 실패하였습니다."; break; case 29: sMsg = "펌웨어와 호환되지않는 DLL입니다."; break; case 1008: sMsg = "파일을 실행할 수 없습니다. 관리자에게 문의하십시오."; break; case 30: sMsg = "DualPayUpdater를 실행할 수 없습니다."; break; case 31: sMsg = "이전 버전의 펌웨어 파일이 존재하지 않습니다."; break; case 32: sMsg = "다운받은 펌웨어 파일이 존재하지 않습니다."; break; case 33: sMsg = "이전 버전의 펌웨어 파일의 버전 확인을 실패하였습니다."; break; case 1007: sMsg = "업데이트할 FW 파일이 없습니다."; break; case 1009: sMsg = "이전 버전의 펌웨어 파일이 존재합니다."; break; case 34: sMsg = "업데이트를 하지 않았습니다."; break; default: sMsg = "에러가 발생하였습니다."; break; } } catch (Exception) { throw; } return sMsg; } #endregion [DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int SpcnIcReaderCardInfo_RegCallback(int tranType, byte[] trmlId, int amount, int timeout_sec, IntPtr callback); [DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int SpcnIcReaderCardInfo_UnRegCallback(); /// /// IC 콜백 요청(CARD INFO) /// /// /// /// /// public bool RegIcCallbackCardInfo(string sTmrId, int nCardAmt, PosOLEDevice.CallbackIc delegateIcReader) { try { if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_cDevStatus.ICReader.Integrity_IC_Status != true && m_cDevStatus.ICReader.UseYn == true) return false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnIcReaderCardInfo_RegCallback.Start"); int rc = 0; GCHandle gch = GCHandle.Alloc(delegateIcReader); IntPtr intptr_delegate = Marshal.GetFunctionPointerForDelegate(delegateIcReader); rc = SpcnIcReaderCardInfo_RegCallback(0, GetByteArrayFromString(sTmrId), nCardAmt, 60, intptr_delegate); gch.Free(); m_bIcReaderCallBack = true; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnIcReaderCardInfo_RegCallback.Success"); return true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return false; } /// /// IC 콜백 해지(CARD INFO) /// /// public bool UnRegIcCallbackCardInfo() { try { if (m_cDevStatus.ICReader.UseYn == false) return false; if (m_bIcReaderCallBack == false) return false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnIcReaderCardInfo_UnRegCallback.Start"); int rc = SpcnIcReaderCardInfo_UnRegCallback(); m_bIcReaderCallBack = false; UserLog.WriteLogFile(UserCom.LOG_IOS, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SpcnIcReaderCardInfo_UnRegCallback.Success " + rc); return true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return false; } } }