spc-kiosk-pb/Agent/OLEDevice/DeviceICReader.cs
2019-06-16 14:12:09 +09:00

2758 lines
133 KiB
C#

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
{
/// <summary>
/// IC 리더기 제어 CLASS
/// </summary>
public class DeviceICReader : IICReaderUs
{
#region SpcnPos.DLL IC리더기
/// <summary>
/// 배출 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderCardExhaust(int tranType, int mediaType, byte[] maintainType, byte[] backFeeding, byte[] etcData, byte[] output_msg);
/// <summary>
/// 승인 요청 함수
/// </summary>
[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);
/// <summary>
/// 망취소 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnReversal(byte[] req_msg, byte[] res_msg, byte[] authInfo, byte[] output_msg);
/// <summary>
/// [IC리더기] 초기화 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderInit();
/// <summary>
/// [IC리더기] 시간설정 요청 함수
/// </summary>
[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);
/// <summary>
/// [IC리더기] 상호인증 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderKeyDownload(byte[] inTrmlId, byte[] inAuthInfo);
/// <summary>
/// [IC리더기] 무결성검사 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderIntegrity(byte[] outResTime);
/// <summary>
/// [IC리더기] 상태확인 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderStatus(byte[] outHwStatus, byte[] outIntegrityStatus, byte[] outCardInStatus, byte[] outReaderName, byte[] outReaderVersion, byte[] outModuleId);
/// <summary>
/// [IC리더기] 카드 정보 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderCardInfo(int tranType, byte[] trmlId, int amount, byte[] output_msg);
/// <summary>
/// [IC리더기] 발급사 인증 요청 함수
/// IcChipData는 ARC / (FS) / Additional Response Data / (FS) / Issuer Authentication Data / (FS) / Issuer Script 형태를 맞춰야 함
/// 승인응답일 경우에는 정상적으로 데이터가 넘어오나 승인취소일 경우에는 ARC만 들어오므로 FS갯수만 맞추면 됨.
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderCardIssuer(byte[] inIcChipData, byte[] output_msg);
/// <summary>
/// [IC리더기] 카드번호 암호화 요청 함수
/// </summary>
[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);
/// <summary>
/// (RF) 후불 결제 거래 카드 정보 요청
/// </summary>
[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 충전 및 승인
/// <summary>
/// (RF) 해피기프트카드(코나머니) 정보 읽기 조회
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnRfEtcCardInfo(byte[] terminalNo, byte[] samType, byte[] amount, byte[] msg1, byte[] msg2, byte[] msg3, byte[] output_msg);
/// <summary>
/// RF 초기화 요청 함수
/// </summary>
[DllImport("SpcnPos.dll")]
public static extern int SpcnRfReaderInit();
/// <summary>
/// RF 시간 설정
/// </summary>
[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);
/// <summary>
/// IC 리더 콜백 호출 요청
/// </summary>
/// <param name="callback"></param>
[DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SpcnRegIcCallback(IntPtr callback);
/// <summary>
/// IC 리더 콜백 호출 해지
/// </summary>
[DllImport("SpcnPos.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SpcnUnRegIcCallback();
/// <summary>
/// IC 리더 설정
/// </summary>
/// <param name="type"></param>
/// <param name="value"></param>
/// <returns></returns>
[DllImport("SpcnPos.dll")]
public static extern int SpcnIcReaderSettingDevice(byte[] type, byte[] value);
/// <summary>
/// MSR 신용카드 요청 - 미인증 POS 사용
/// </summary>
/// <param name="input_msg"></param>
/// <param name="input_msg_len"></param>
/// <param name="output_msg"></param>
/// <returns></returns>
[DllImport("SpcnPos.dll")]
public static extern int SpcnPos(byte[] input_msg, int input_msg_len, byte[] output_msg);
/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[DllImport("SpcnPos.dll")]
public static extern int SpcnStopProcess(int type);
/// <summary>
/// IC 리더기 펌웨어 업데이트
/// </summary>
/// <param name="checkfwtout"></param>
/// <param name="downfwtout"></param>
/// <param name="nPort"></param>
/// <param name="DCheck"></param>
/// <returns></returns>
[DllImport("DeFWDownloadDll.dll")]
public static extern int DE_DownloadFW(int checkfwtout, int downfwtout, int nPort, byte[] DCheck);
/// <summary>
/// IC 리더기 펌웨어 이전 버전 업데이트
/// </summary>
/// <param name="checkfwtout"></param>
/// <param name="downfwtout"></param>
/// <param name="nPort"></param>
/// <returns></returns>
[DllImport("DeFWDownloadDll.dll")]
public static extern int DE_BacktoFW(int checkfwtout, int downfwtout, int nPort);
//#20171016 IC리더기 펌웨어 업데이트 Start, srlee
/// <summary>
/// IC 리더기 펌웨어 업데이트_NEW
/// </summary>
/// <param name="nPort"></param>
/// <param name="nBaud"></param>
/// <param name="cPW"></param>
/// <param name="filepath"></param>
/// <returns></returns>
[DllImport("VANDeDownloadDll.dll")]
public static extern int DE_FWDOWN(int nPort, int nBaud, byte[] cPW, byte[] filepath);
/// <summary>
/// IC 리더기 펌웨어 다운로드 상태 확인하는 callback 함수 등록
/// </summary>
/// <param name="callback"></param>
/// <returns></returns>
[DllImport("VANDeDownloadDll.dll")]
public static extern void DE_CallBackFunReg(IntPtr callback);
//#20171016 IC리더기 펌웨어 업데이트 End, srlee
#endregion
/// <summary>
/// 등록제 정보
/// (0~15 : IC리더기 정보, 16~31 : POS S/W명 과 Version)
/// </summary>
private StringBuilder m_sAuthInfo_IC = new StringBuilder();
public StringBuilder AuthInfo_IC { get { return m_sAuthInfo_IC; } }
/// <summary>
/// 등록제 정보
/// (0~15 : RF리더기 정보, 16~31 : POS S/W명 과 Version)
/// </summary>
private StringBuilder m_sAuthInfo_RF = new StringBuilder();
public StringBuilder AuthInfo_RF { get { return m_sAuthInfo_RF; } }
/// <summary>
/// StateServer Object (StateServer 객체)
/// </summary>
public StateServer StateObject = (StateServer)StateServer.GetInstance();
/// <summary>
/// Device 상태 정보 객체
/// </summary>
public DeviceStatus m_cDevStatus = null;
/// <summary>
/// Pos 상태 정보 객체
/// </summary>
public PosStatus m_cPosStatus = null;
// VAN IP, PORT Update 체크 여부
private static bool m_bUpdateIni = false;
/// <summary>
/// IC리더 콜백 처리 여부
/// </summary>
private bool m_bIcReaderCallBack = false;
//#20171024 START, PHJ
private string m_sPAY_WAY_CD;
/// <summary>
/// 결제수단코드
/// </summary>
public string PAY_WAY_CD { set { this.m_sPAY_WAY_CD = value; } }
private string m_sPAY_DTL_CD;
/// <summary>
/// 결제수단상세코드
/// </summary>
public string PAY_DTL_CD { set { this.m_sPAY_DTL_CD = value; } }
//#20171024 END, PHJ
/// <summary>
/// 생성자
/// </summary>
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);
}
}
/// <summary>
/// IC리더기 초기화 작업
/// </summary>
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);
}
}
/// <summary>
/// SpcnPos.dll 이 사용하는 SpcnPosCfg.ini 파일 update
/// </summary>
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);
}
}
/// <summary>
/// 설정 파일 읽기
/// </summary>
/// <param name="cCfgInfo"></param>
/// <param name="sGroup"></param>
/// <param name="sValueName"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Byte배열을 string으로 변환 (Byte배열의 null(0x00)값 제거)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// Byte배열을 string으로 변환 (Byte배열의 null(0x00)값 제거) - 카드번호 전용
/// </summary>
/// <param name="data"></param>
/// <param name="?"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 등록제 정보 설정
/// </summary>
/// <param name="sDeviceType"></param>
/// <returns></returns>
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
/// <summary>
/// [IC리더기] 상태확인 요청
/// </summary>
/// <param name="sDeviceType"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 카드번호 암호화
/// </summary>
//#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;
}
/// <summary>
/// [IC리더기] 배출 요청
/// </summary>
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;
}
/// <summary>
/// [IC리더기] 초기화 요청
/// </summary>
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;
}
/// <summary>
/// [IC리더기] 시간설정 요청
/// </summary>
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;
}
/// <summary>
/// [IC리더기] 상호인증 요청
/// </summary>
/// <param name="sDeviceType"></param>
/// <param name="sTerminerID"></param>
/// <returns></returns>
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;
}
/// <summary>
/// [IC리더기] 무결성검사 요청
/// </summary>
/// <param name="sDeviceType">장비구분:IC/ SignPad</param>
/// <param name="sRsltTime">응답 결과 시간</param>
/// <returns>true:정상처리, false:에러</returns>
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;
}
/// <summary>
/// [IC리더기] 카드 정보 요청
/// </summary>
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;
}
/// <summary>
/// [IC리더기] 발급사 인증 요청
/// </summary>
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;
}
/// <summary>
/// 승인 요청
/// </summary>
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;
}
/// <summary>
/// 망취소 요청
/// </summary>
/// <param name="sReqMsg">직전 승인 요청전문</param>
/// <param name="sResMsg">직전 승인 응답전문</param>
/// <param name="sRecvData">응답전문</param>
/// <returns></returns>
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;
}
/// <summary>
/// RF 카드 정보 요청
/// </summary>
/// <param name="sSamType"></param>
/// <param name="sAmount"></param>
/// <param name="sMsg1"></param>
/// <param name="sMsg2"></param>
/// <param name="sMsg3"></param>
/// <param name="sRsltMsg"></param>
/// <returns></returns>
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 충전 및 승인
/// <summary>
/// RF 코나머니카드 정보 요청
/// </summary>
/// <param name="sSamType"></param>
/// <param name="sAmount"></param>
/// <param name="sMsg1"></param>
/// <param name="sMsg2"></param>
/// <param name="sMsg3"></param>
/// <param name="sRsltMsg"></param>
/// <returns></returns>
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;
}
/// <summary>
/// SPC 사원 카드 정보 읽기
/// </summary>
/// <param name="sRsltMsg"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 선불카드 조회
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// IC 콜백 요청
/// </summary>
/// <param name="delegateReader"></param>
/// <returns></returns>
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;
}
/// <summary>
/// IC 콜백 해지
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// IC 콜백 설정
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 문자열을 바이트열로 변환
/// </summary>
/// <param name="src"></param>
/// <returns></returns>
private byte[] GetByteArrayFromString(string src)
{
return System.Text.Encoding.Default.GetBytes(src);
}
/// <summary>
/// 응답코드
/// </summary>
/// <param name="nErrCode"></param>
/// <returns></returns>
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
/// <summary>
/// 카드번호 첫자리와 끝자리 체크하여 문자인 경우 스페이스로 치환
/// </summary>
/// <param name="sCardNo"></param>
/// <returns></returns>
//#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리더기
/// <summary>
/// IC리더기 펌웨어 업데이트 요청
/// </summary>
/// <param name="checkfwtout"></param>
/// <param name="downfwtout"></param>
/// <param name="nPort"></param>
/// <param name="DllCheck"></param>
/// <param name="sMsg"></param>
/// <returns></returns>
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
/// <summary>
/// IC 리더기 펌웨어 업데이트_NEW
/// </summary>
/// <param name="nPort"></param>
/// <param name="nBaud"></param>
/// <param name="filepath"></param>
/// <param name="callBackFunc"></param>
/// <returns></returns>
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리더기
/// <summary>
/// IC리더기 펌웨어 업데이트 상태 응답값
/// </summary>
/// <param name="ret"></param>
/// <returns></returns>
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();
/// <summary>
/// IC 콜백 요청(CARD INFO)
/// </summary>
/// <param name="sTmrId"></param>
/// <param name="nCardAmt"></param>
/// <param name="delegateIcReader"></param>
/// <returns></returns>
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;
}
/// <summary>
/// IC 콜백 해지(CARD INFO)
/// </summary>
/// <returns></returns>
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;
}
}
}