using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using Cosmos.CommonManager; using System.Threading; using SPC.Kiosk.Popup.Model; using SPC.Kiosk.Common; using System.Collections; namespace SPC.Kiosk.Payments { /// /// 통신사 할인 승인 /// public class posLastPayments : IDisposable { //UserLog.WriteLogFile(UserCom.LOG_ERROR, "SPC.Kiosk.Payments", "posLastPayments.?", "Exception." + ex.Message); #region [ Members ] public enum ErrorCode { LastPaymentsCardNumberError, LastPaymentsEncrtipError, LastPaymentsNotInitailzedError, LastPaymentsProcessingTimeOut, LastPaymentsUnknownError, LastPaymentsCardReadingError } /// /// ErrorMessage Event /// /// 반환 로그 public delegate void ErrorMessageEventHandler(string ErrorString); /// /// 로그메세지 이벤트 반환용 /// public event ErrorMessageEventHandler ErrorMessageEvent; /// /// Error 반환 Event /// /// 반환 Error Code public delegate void LogErrorHandler(ErrorCode errorCode); /// /// Error Code 이벤트 반환용 /// public event LogErrorHandler ErrorEvent; /// /// IcReadStart Event /// /// public delegate void IcReadStart(object sender); /// /// IcReadStart Event 반환용 /// public event IcReadStart ReadStart; /// /// IcReadStart Event /// /// public delegate void IcReadEnd(object sender); /// /// IcReadStart Event 반환용 /// public event IcReadEnd ReadEnd; /// /// NeedSign Event /// /// public delegate void NeedSignStart(object sender); /// /// NeedSign Event 반환용 /// public event NeedSignStart SignStartEvent; /// /// NeedSignEnd Event /// /// public delegate void NeedSignEnd(object sender); /// /// NeedSignEnd Event 반환용 /// public event NeedSignEnd SignEndEvent; private SManager sManager = null; // 이 객체를 통해 업무 Service 호출 private StateServer StateObject = null; // StateObject : StateServer Object (객체) private PosStatus m_cPosStatus = null; // 기본정보 참조 private TranStatus m_cTrnStatus = null; // 거래정보 참조 private DeviceStatus m_cDevStatus = null; // 디바이스 관리 private PosOLEDevice.CallbackIc delegateReaderCardInfo; // IC리더 콜백(CardInfo) private IDataProcessUs m_cDataService = null; private IICReaderUs m_cDeviceICReader = null; private IPaymentUs m_cSmilePay = null; private IPaymentExpUs m_cHappyPoint = null; // 해피포인트 적립 private ICampaignUs m_cCampaingMain = null; // 캠페인 관리 private string m_sPosMenuKey = string.Empty; private string m_sFallDiv; //FallBack구분 private string m_sIcChip; //IC CHIP DATA(EMV) private string m_sSign; //사인 데이터 private string m_sTax; //세금 private double m_dCreditCardDcAtm = 0d; //카드할인금액 private string m_sCreditCardDcTy=string.Empty; //카드할인타입 //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 start,phj private string m_sMobileCode = ""; //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 end,phj /// /// 입력구분 /// private string m_InputType = string.Empty; /// /// 입력데이터 /// private string m_sInPutData = string.Empty; /// /// 마스킹데이터 /// private string m_sInMaskData = string.Empty; /// /// 카드데이터(암호화) /// private string m_sCardNo = string.Empty; /// /// 서비스코드 /// private string m_sService = string.Empty; /// /// 처리 성공 여부 /// private bool m_bProcessSuccess = false; /// /// POS 초기화 필요 유무 /// public bool NeedInitModule { get; set; } /// /// 승인 수단 /// public string CertifyKey { get; set; } = string.Empty; public LastPaymentsType PaymentsType { get; set; } public double Payment { get; set; } = 0d; private bool ReadProcessEnd { get; set; } = false; private bool icCallBack = false; /// /// Ic Reader CallBack Switch /// public bool IcCallBack { get { return icCallBack; } set { if (value) { //m_cDeviceICReader.RegIcCallback(delegateReader); try { string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID); bool icR = m_cDeviceICReader.RegIcCallbackCardInfo(sApprID, m_cDataService.IntParse(Payment.ToString()), delegateReaderCardInfo); icCallBack = value; CommonLog.DebugLogWrite(this,"IcCallBack","RegIcCallbackCardInfo Success !!"); } catch (Exception ex) { CommonLog.ErrorLogWrite(this,"IcCallBack","RegIcCallbackCardInfo Fail !!", string.Format("{0}\n{1}",ex.Message,ex.StackTrace)); } } } } public double PaymentsValue { get; protected set; } = 0d; /// /// Point 사용시 비번 필요 유무 /// public bool NeedPassword { get; protected set; } public long PaySEQ { get; protected set; } /// /// 인증 처리 성공 유무 /// public bool ProcessOK { get { return m_bProcessSuccess; } } public bool IsTimeout { set { if (value) { ErrorEvent(ErrorCode.LastPaymentsProcessingTimeOut); } } } public bool SignEndStatus { get; set; } public string SignData { get { return m_sSign; } set { m_sSign = value; } } public double NoSignLimitAmount { get; set; } = 0d; public string ReadBarcordNumber { get; set; } = string.Empty; public bool SelfCashBill { get; protected set; } = false; #endregion #region [ Ctor && Dispose ] /// /// Ctor /// public posLastPayments() { try { sManager = new SManager(); StateObject = (StateServer)StateServer.GetInstance(); NeedInitModule = StateObject.POS == null || StateObject.TRAN == null || StateObject.DEVICE == null; if (!NeedInitModule) { m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보 m_cDevStatus = (DeviceStatus)StateObject.DEVICE; m_cDeviceICReader = (IICReaderUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_ICREADER); delegateReaderCardInfo = new PosOLEDevice.CallbackIc(OnIcReaderCallBackCardInfo); // IC리더 콜백(CardInfo) m_cDataService = (IDataProcessUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_SERVICE); m_cCampaingMain = (ICampaignUs)sManager.InitServiceInstance(ServiceLists.ASV_CAMPAIGN.DLL, ServiceLists.ASV_CAMPAIGN.CAMPAIGN_MAIN); m_cSmilePay = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.SMAILPAY); m_cHappyPoint = (IPaymentExpUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.POINTHAPPYPOINT); } } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "Ctor" ,"Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// /// public void Dispose() { try { ReadProcessEnd = true; if (IcCallBack ) { //m_cDeviceICReader.UnRegIcCallback(); m_cDeviceICReader.UnRegIcCallbackCardInfo(); IcCallBack = false; } InDataToZeroFill(); sManager = null; StateObject = null; m_cPosStatus = null; // POS 기본정보 m_cTrnStatus = null; // POS 거래정보 m_cDevStatus = null; m_cDeviceICReader = null; delegateReaderCardInfo = null; m_cDataService = null; } catch (Exception ex) { CommonLog.ErrorLogWrite(this,"Dispose", "Fail", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } #endregion #region [ Methods ] public void StartCashBill(string _inputString, string _divType, double _cashAmount, double _taxAmount) { CommonLog.InfoLogWrite(this, "StartCashBill()", "Start"); try { m_bProcessSuccess = false; SendReadStart(); //사업자인 경우 길10자리가 아니면 자진 발급을 위해 입력번호 삭제 if (_divType.Equals("1") && !_inputString.Length.Equals(10)) _inputString = string.Empty; //개인(소극공제) 인 경우 6자리 이하면 자진 발급처리 if (_divType.Equals("0") && _inputString.Length < 6) _inputString = string.Empty; if (string.IsNullOrEmpty(_inputString)) { SelfCashBill = true; _divType = "0"; //자진 발급은 개인(소득공제용만) _inputString = CommonValue.CashReceiptDefaultNo; } m_sInPutData = EncryptedCashInputNo(_inputString, _divType); if (string.IsNullOrEmpty(m_sInPutData)) { SelfCashBill = true; _divType = "0"; //자진 발급은 개인(소득공제용만) _inputString = CommonValue.CashReceiptDefaultNo; m_sInPutData = EncryptedCashInputNo(_inputString, _divType); } if (!string.IsNullOrEmpty(m_sInPutData)) { int retry = 0; do { CompleteTxtCashBilll(_inputString, _divType, _cashAmount, _taxAmount); retry++; if (!SelfCashBill) { if (retry.Equals(1)) { //승인 실패시 자진 발급 재승인 SelfCashBill = true; _divType = "0"; //자진 발급은 개인(소득공제용만) _inputString = CommonValue.CashReceiptDefaultNo; m_sInPutData = EncryptedCashInputNo(_inputString, _divType); if (string.IsNullOrEmpty(m_sInPutData)) break; } else { break; } } else { break; } } while (!m_bProcessSuccess && retry < 2);//1회만 재승인 } SendReadEnd(); } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "StartCashBill()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } CommonLog.InfoLogWrite(this, "StartCashBill()", string.Format("End : Result={0}", ProcessOK ? "OK" : "Fail")); } private void CompleteTxtCashBilll(string inputString, string divType, double cashAmount, double taxAmount) { CommonLog.DebugLogWrite(this, "StartCashBill()", "Start"); var m_cCashBill = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.CASHBILL); try { double dNetAmt = CmUtil.DoubleSubtraction(cashAmount, taxAmount); string sIssueType = "0"; var sRet = m_cCashBill.SetPayment(new string[] { PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN, m_sInPutData, dNetAmt.ToString(), taxAmount.ToString(), "0", cashAmount.ToString(), divType, sIssueType, "", "", "", "", "", "", m_sInMaskData, SelfCashBill ? "1" : "0" }); if (sRet != UserCom.RST_OK) { InDataToZeroFill(); m_bProcessSuccess = false; if (sRet == null || sRet.Equals(UserCom.RST_ERR)) { SendErrLogEvent(ErrorCode.LastPaymentsUnknownError); } else { SendErrorMessageEvent(sRet); } } else { m_bProcessSuccess = true; } } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "CompleteTxtCashBilll()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } finally { m_cCashBill = null; } CommonLog.DebugLogWrite(this, "StartCashBill()", "End"); } private string EncryptedCashInputNo(string sIndata,string divType) { string tmpEnc = ""; try { if (sIndata.Length == 18 && sIndata.StartsWith("15442020") == true) { sIndata = sIndata + "="; } //#20171024 START, PHJ //DeviceICReader.cs로 결제코드,상세코드를 넘기기 위해서. //해피포인트로 현금영수증 승인하는지 구분하기 위해서. m_cDeviceICReader.PAY_WAY_CD = ItemConst.TR_ITEM_ID.ETC_INFO_ITEM; m_cDeviceICReader.PAY_DTL_CD = ItemConst.TR_ITEM_ID.ETC_INFO.CASHBILL; //#20171024 END, PHJ //카드번호 처리 부분 임시 주석 2016-06-15 //#20170913 현금영수증, 포인트카드 마스킹 미적용 start // "0"인 경우 마스킹 미처리 //기존 //tmpEnc = m_cDeviceICReader.GetEncryptedCardNo(sIndata).Trim(); //변경 tmpEnc = m_cDeviceICReader.GetEncryptedCardNo(sIndata, "0").Trim(); //#20170913 현금영수증, 포인트카드 마스킹 미적용 end if (CmUtil.MidH(tmpEnc, 0, 2) == "00") { //#20170913 현금영수증, 포인트카드 마스킹 미적용 start //기존 /* // Mod, 2017.09.05, 전화번호 마스킹 변경 처리 //m_sMaskingCardNo = CmUtil.MidH(tmpEnc, 514, 37).Trim(); if (sIndata.Length == 10 || sIndata.Length == 11) { m_sMaskingCardNo = CmUtil.LeftH(sIndata, sIndata.Length - 4) + new string('*', 4); } else { m_sMaskingCardNo = CmUtil.MidH(tmpEnc, 514, 37).Trim(); } */ //변경 m_sInMaskData = CmUtil.MidH(tmpEnc, 514, 37).Trim(); //#20170913 현금영수증, 포인트카드 마스킹 미적용 end m_sInPutData = m_sInMaskData; //#20180426 현금영수증 마스킹 변경 및 영수증 문구 변경 start //기존 /* //#20170913 현금영수증, 포인트카드 마스킹 미적용 start if (sIndata.Length == 10 || sIndata.Length == 11) { //#20171121 전화번호 길이와 마스킹 된 값의 길이와 다름. start, phj //기존 //m_sMaskingCardNo = CmUtil.LeftH(m_sMaskingCardNo, m_sMaskingCardNo.Length - 4) + new string('*', 4); //변경 m_sMaskingCardNo = CmUtil.LeftH(sIndata, 6) + new string('*', sIndata.Length - 6); //#20171121 전화번호 길이와 마스킹 된 값의 길이와 다름. end, phj } else { m_sMaskingCardNo = CmUtil.MidH(m_sMaskingCardNo, 0, 6) + "********"; } //#20170913 현금영수증, 포인트카드 마스킹 미적용 end */ //#20180426 현금영수증 마스킹 변경 및 영수증 문구 변경 end //#20171024 지출증빙으로 발행시 입력한 자리수까지만 영수증상에 표시 되도록 수정 start //10자리 입력시 spcnpos.dll로 암호화 처리시 6자리+'******' 로 변환이 되어 11자리 입력 한 것으로 보임 if (divType == "1") { m_sInMaskData = CmUtil.MidH(m_sInMaskData, 0, sIndata.Length); } //#20171024 지출증빙으로 발행시 입력한 자리수까지만 영수증상에 표시 되도록 수정 end tmpEnc = CmUtil.MidH(tmpEnc, 2, 512).Trim(); } else { tmpEnc = ""; //암호화 처리 실패! CommonLog.ErrorLogWrite(this, "EncryptedCashInputNo()", "Fail !!"); } } catch (Exception ex) { tmpEnc = ""; CommonLog.ErrorLogWrite(this, "EncryptedCashInputNo()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } return tmpEnc; } /// /// 최종 결제 처리 /// /// public void StartCertifyProcessing(LastPaymentsType _paymentsType, string _inputString, double _payments) { try { CommonLog.InfoLogWrite(this,"StartCertifyProcessing()","Start"); m_bProcessSuccess = false; ReadBarcordNumber = string.Empty; if (NeedInitModule) { SendReadStart(); Thread.Sleep(1000); //진행창 보이기 위한 딜레이 ErrorEvent(ErrorCode.LastPaymentsNotInitailzedError); } else { PaymentsType = _paymentsType; Payment = _payments; m_cTrnStatus.Head.TradeDiv = ItemConst.TRAN_DIV.NORMAL; switch(PaymentsType) { case LastPaymentsType.IcCard: case LastPaymentsType.SsLgPay: ReadProcessEnd = false; IcCallBack = true; while (!ReadProcessEnd) ; if (!string.IsNullOrEmpty(m_sInPutData)) { CompleteTxtInPut(); } else { SendErrLogEvent(ErrorCode.LastPaymentsCardReadingError); } break; case LastPaymentsType.HappyGift: ReadProcessEnd = false; IcCallBack = true; while (!ReadProcessEnd && string.IsNullOrEmpty(ReadBarcordNumber)) ; if (!ReadProcessEnd) { if (IcCallBack) { m_cDeviceICReader.UnRegIcCallbackCardInfo(); IcCallBack = false; } ReadProcessEnd = true; } else { ReadBarcordNumber = string.Empty; } if (!string.IsNullOrEmpty(ReadBarcordNumber)) { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; m_sInMaskData = _inputString; m_sInPutData = _inputString + "="; if (EncryptedCardNo(m_sInPutData, ref m_sInMaskData, ref m_sCardNo)) { CompleteTxtInPut(); } else { SendErrLogEvent(ErrorCode.LastPaymentsEncrtipError); } } else { if (!string.IsNullOrEmpty(m_sInPutData)) { CompleteTxtInPut(); } else { SendErrLogEvent(ErrorCode.LastPaymentsCardReadingError); } } break; case LastPaymentsType.CashBee: case LastPaymentsType.Tmoney: case LastPaymentsType.SpcEmployee: SendReadStart(); SendErrLogEvent(ErrorCode.LastPaymentsUnknownError); break; case LastPaymentsType.SmilePay: case LastPaymentsType.AliPay: case LastPaymentsType.ZeroPay: //SendReadStart(); if (_inputString.Replace("=", "").Replace("@", "").Length.Equals(16)) { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; m_sInMaskData = _inputString; m_sInPutData = _inputString + "="; if (EncryptedCardNo(m_sInPutData, ref m_sInMaskData, ref m_sCardNo)) { CompleteTxtInPut(); } else { SendErrLogEvent(ErrorCode.LastPaymentsEncrtipError); } } else { SendErrLogEvent(ErrorCode.LastPaymentsCardNumberError); } break; } } CommonLog.DebugLogWrite(this,"StartCertifyProcessing()","m_cDeviceICReader.Init_ICReader Before"); m_cDeviceICReader.Init_ICReader(" "); CommonLog.DebugLogWrite(this, "StartCertifyProcessing()", "m_cDeviceICReader.Init_ICReader After"); SendReadEnd(); CommonLog.InfoLogWrite(this, "StartCertifyProcessing()", string.Format("End : Result={0}", ProcessOK ? "OK" : "Fail")); } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "StartCertifyProcessing()","Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// 휴대폰 번호 형식 확인 /// /// /// private bool IsCellularPhoneNumber(string sInputData) { bool bRet = false; try { if (sInputData.Length == 10 || sInputData.Length == 11) { if (sInputData.StartsWith("010") == true || sInputData.StartsWith("011") == true || sInputData.StartsWith("017") == true || sInputData.StartsWith("016") == true || sInputData.StartsWith("018") == true || sInputData.StartsWith("019") == true) { bRet = true; } } } catch { bRet = false; } return bRet; } /// /// 승인 전문 처리 /// private void CompleteTxtInPut() { CommonLog.DebugLogWrite(this, "CompleteTxtInPut()", "Start"); string sRet = UserCom.RST_ERR; object m_cPayments = null; object m_cPaymentsGift = null; try { m_bProcessSuccess = false; switch (PaymentsType) { case LastPaymentsType.IcCard: case LastPaymentsType.SsLgPay: //0:마스킹 카드번호 1:입력구분 2:카드번호 3:할부개월 4:총금액 5:봉사료 //6:세금 7:비밀번호 8:신용카드종류 9:칩데이터 10:사인 //11:Fallback구분 12:제휴할인금액(캠페인) 13:원승인번호 14:원승인일자 15:아이템코드 //16:매입사코드 17:매입사명 18:할인카드구분 19:할인금액 //20:승인구분 21:매체구분 22:서비스코드 // 캠페인 처리 => 키값(취소시사용),카드번호,캠페인대상,지불구분,지불금액 ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); double nDisAmt = m_cCampaingMain.ExecuteCampaignPayment(alPayItem.Count.ToString(), m_sCardNo + "0", ItemConst.CPI_CUST_PAY_TYPE.CREDTCARD, Payment); var lastPayment = CmUtil.DoubleSubtraction(Payment, nDisAmt); m_sSign = string.Empty; if (NoSignLimitAmount > 0 && lastPayment > NoSignLimitAmount) { SignEndStatus = false; SignStart(); while (!SignEndStatus) ; SignEnd(); } m_sTax = m_cDataService.GetPaymentAmtVAT(lastPayment).ToString(); m_cPayments = sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.CREDITCARD); m_cPaymentsGift = sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.HPGIFTCARD); if (m_cPayments is IPaymentUs paymentUs) { // 해피기프트카드 체크 2019.04.25 //string[] aRet = new string[4]; //string m_sCardDiv = ""; //sRet = paymentUs.SearchPayment(new string[] { PosConst.CREDITCARD_SEARCH_TYPE.PREFIX, CmUtil.MidH(m_sInMaskData, 0, 6).ToString() }, ref aRet); //if (sRet == UserCom.RST_OK) //{ // m_sCardDiv = aRet[0].Trim(); //} //else //{ // InDataToZeroFill(); // m_bProcessSuccess = false; // if (!sRet.Equals(UserCom.RST_ERR)) SendErrorMessageEvent(sRet); //} ////해피기프트카드 체크 끝 //sRet = UserCom.RST_ERR; //if (aRet[0].Trim() == "C" )//&& aRet[2] == "98") //{ // // 해피기프트(신) // if (m_cPaymentsGift is IPaymentUs paymentUsGift) // { // sRet = paymentUsGift.SetPayment(new string[] { // /*0*/m_sInMaskData, /*1*/m_InputType, /*2*/m_sCardNo, /*3*/"00", /*4*/Payment.ToString(), /*5*/"0" // , /*6*/m_sTax, /*7*/"", /*8*/"", /*9*/m_sIcChip, /*10*/"" // , /*11*/m_sFallDiv, /*12*/"0",/*13*/"",/*14*/"",/*15*/"" // , /*16*/"",/*17*/"",/*18*/"", /*19*/m_dCreditCardDcAtm.ToString() // , /*20*/ItemConst.PAY_APP_DIV.NORMAL, /*21*/"", /*22*/m_sService }); // } //} //else //{ sRet = paymentUs.SetPayment(new string[] { /*0*/m_sInMaskData, /*1*/m_InputType, /*2*/m_sCardNo, /*3*/"00", /*4*/lastPayment.ToString(), /*5*/"0" , /*6*/m_sTax, /*7*/"", /*8*/"", /*9*/m_sIcChip, /*10*/m_sSign , /*11*/m_sFallDiv, /*12*/"0",/*13*/"",/*14*/"",/*15*/"" , /*16*/"",/*17*/"",/*18*/"", /*19*/m_dCreditCardDcAtm.ToString() , /*20*/ItemConst.PAY_APP_DIV.NORMAL, /*21*/"", /*22*/m_sService }); //} if (sRet != UserCom.RST_OK) { InDataToZeroFill(); m_bProcessSuccess = false; if (sRet == null || sRet.Equals(UserCom.RST_ERR)) { SendErrLogEvent(ErrorCode.LastPaymentsUnknownError); } else { SendErrorMessageEvent(sRet); } } else { PaymentsValue = lastPayment; m_bProcessSuccess = true; } } break; case LastPaymentsType.SmilePay: #region :: Smile Pay 결제로직 // 승인금액 또는 결제 금액을 확인 하세요. //if (m_cDataService.DoubleParse(txtPayAmt.Text) <= 0) //{ // MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0597); // return false; //} string sInPutType = m_InputType; string sInPutData = m_sInPutData; string sInEncData = m_sCardNo; string sInOrgData = m_sInPutData; //if (m_sInEncData == "") //{ // if (m_sInPutData == "") // { // ///sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_KEYIN; // sInPutType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_MOBILE_SWIP; // sInOrgData = txtCardNo.Value; // //sInPutData = txtCardNo.Value; // } // EncryptedCardNo(sInOrgData, ref sInPutData, ref sInEncData); //} //#17169 스마일페이 변경요청 건 start, 20181113 //기존소스 /* //#17169 스마일페이 변경요청 건 start string sSmilepayCampaingCode = ""; string sSmilepayPromotionCode = ""; double dSmileCashTargetAmt = 0; if (m_cDataService.DoubleParse(txtDCAmt.Text) > 0) { m_cCampaingMain.GetSmilepayPromotionCode(out sSmilepayCampaingCode, out sSmilepayPromotionCode); if (sSmilepayCampaingCode != "" && sSmilepayPromotionCode != "") { dSmileCashTargetAmt = m_cCampaingMain.GetSmileCashTargetAmt(sSmilepayCampaingCode); } } //#17169 스마일페이 변경요청 건 end */ //변경소스 string sSmilepayPromotionCode = ""; //스마일페이로모션코드 double dSmileCashTargetAmt = 0; //스마일캐시금액 bool bApplyCampaign = false; // 적용된캠페인유무 m_cCampaingMain.GetSmailePayCampaignCheck(Payment, out sSmilepayPromotionCode, out dSmileCashTargetAmt, out bApplyCampaign); //#17169 스마일페이 변경요청 건 end, 20181113 //#17169 스마일페이 변경요청 건 start //기존 //포인트 사용 승인 처리 //sRet = m_cSmilePay.SetPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInEncData, m_cDataService.DoubleParse(txtPayAmt.Text).ToString(), "", sInOrgData }); //변경 //포인트 사용 승인 처리 m_sPosMenuKey = PosKey.MENU_KEY.SMILE_PAY; sRet = m_cSmilePay.SetPayment(new string[] { m_sPosMenuKey, sInPutType, sInPutData, sInEncData, Payment.ToString(), "", sInOrgData, sSmilepayPromotionCode, m_cPosStatus.Global.NumericTOCurrency(dSmileCashTargetAmt) }); //#17169 스마일페이 변경요청 건 end if (sRet != UserCom.RST_OK) { m_bProcessSuccess = false; SendErrLogEvent(ErrorCode.LastPaymentsUnknownError); return; } else { // 자동적립사용이면 스마일페이 자동적립 처리 if (PosMstManager.GetPosOption(POS_OPTION.OPT030) == "1") { sRet = m_cHappyPoint.SetSmilePayment(new string[] { sInPutType, sInPutData, sInEncData, "0", "", sInOrgData }); } if (!sRet.Equals(UserCom.RST_OK)) { } } // 캠페인 처리 => 키값(취소시사용),카드번호,캠페인대상,지불구분,지불금액 ArrayList alPayItem2 = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM); m_cCampaingMain.CompleteCampaignPayment((alPayItem2.Count - 1).ToString()); //#14538 스마일페이 캠페인 확인창 중복 팝업 확인요청 start,phj //double nDisAmt2 = m_cCampaingMain.ExecuteCampaignPayment(alPayItem2.Count.ToString(), m_sCardNo, ItemConst.CPI_CUST_PAY_TYPE.SMILEPAY, Payment, false); PaymentsValue = Payment; m_bProcessSuccess = true; #endregion break; } } catch (Exception ex) { CommonLog.ErrorLogWrite(this,"CompleteTxtInPut()","Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } finally { if (m_cPayments != null) m_cPayments = null; } CommonLog.DebugLogWrite(this, "CompleteTxtInPut()", "End"); } /// /// 카드 번호 암호화 /// /// /// /// /// private bool EncryptedCardNo(string sInData, ref string sInMaskData, ref string sInEncData) { string sEncData = sInData; bool bRet = false; try { //#20170913 현금영수증, 포인트카드 마스킹 미적용 start // "0"인 경우 마스킹 미처리 //기존 //sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData).Trim(); //변경 sEncData = m_cDeviceICReader.GetEncryptedCardNo(sInData, "0").Trim(); //#20170913 현금영수증, 포인트카드 마스킹 미적용 end if (CmUtil.MidH(sEncData, 0, 2) == "00") { sInEncData = CmUtil.MidH(sEncData, 2, 512).Trim(); // 암호화 데이터 sInMaskData = CmUtil.MidH(sEncData, 514, sEncData.Length - 514).Trim(); // 마스킹 데이터 //#20170913 현금영수증, 포인트카드 마스킹 미적용 start sInMaskData = CmUtil.MidH(sInMaskData, 0, 6) + "********"; //#20170913 현금영수증, 포인트카드 마스킹 미적용 end bRet = true; } else { CommonLog.ErrorLogWrite(this,"EncryptedCardNo()","Fail !!"); } } catch (Exception ex) { CommonLog.ErrorLogWrite(this,"EncryptedCardNo()","Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } return bRet; } #region 여전법 대응 /// /// ZeroFill 초기화 /// private void InDataToZeroFill() { try { //여전법 대응! ////////////////////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref m_sInPutData); CmUtil.ZeroFillClear(ref m_sCardNo); CmUtil.ZeroFillClear(ref m_sInMaskData); ////////////////////////////////////////////////////////////////////////////////// } catch { } } #endregion 여전법 대응 #region IC리더 콜백 /// /// IC리더 콜백 함수(CardInfo) /// /// /// public void OnIcReaderCallBackCardInfo(int num, StringBuilder str) { try { IcCallBack = false; switch (PaymentsType) { case LastPaymentsType.IcCard: case LastPaymentsType.SsLgPay: case LastPaymentsType.HappyGift: SendReadStart(); break; } ClearCardInfo(); // 카드 입력 정보 클리어 if (num > 0) { string sRsvStr = str.ToString(); if (CmUtil.MidH(sRsvStr, 0, 2) == "00") { m_sCardNo = CmUtil.MidH(sRsvStr, 6, 512).Trim(); m_sInMaskData = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sService = CmUtil.MidH(sRsvStr, 1067, 5).Trim(); m_sFallDiv = CmUtil.MidH(sRsvStr, 3, 1).Trim(); m_sIcChip = CmUtil.MidH(sRsvStr, 518, 512).Trim(); //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 start,phj m_sMobileCode = CmUtil.MidH(sRsvStr, 1072, 7).Trim(); //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 end,phj if (CmUtil.MidH(sRsvStr, 4, 2).Trim() == "02") //if (CmUtil.MidH(sRsvStr, 6, 2).Trim() == "EN") //모터드리븐 처리 (2019.04.23) { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; m_sIcChip = m_sFallDiv.Equals("3") ? m_sIcChip : string.Empty; } else { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_IC; } m_sInPutData = m_sInMaskData; } } } catch (Exception ex) { CommonLog.ErrorLogWrite(this,"OnIcReaderCallBackCardInfo()","Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } ReadProcessEnd = true; } private bool GetIcCardData() { string sRsvStr = ""; try { //IcCallBack = false; // IC리더 콜백 해지 if (m_cDeviceICReader.GetCardInfo_ICReader(PosConst.IC_READER_TRAN_TYPE.CREDIT, CmUtil.IntParse(Payment.ToString()), ref sRsvStr) == true) { if (CmUtil.MidH(sRsvStr, 0, 2) == "00") { m_sCardNo = CmUtil.MidH(sRsvStr, 6, 512).Trim(); m_sInMaskData = CmUtil.MidH(sRsvStr, 1030, 37).Trim(); m_sIcChip = CmUtil.MidH(sRsvStr, 518, 512).Trim(); if (CmUtil.MidH(sRsvStr, 4, 2).Trim() == "02") { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_SWIP; } else { m_InputType = PosConst.POS_VAN_MASTER.INPUT_TYPE.VAN_IC; } m_sService = CmUtil.MidH(sRsvStr, 1067, 5).Trim(); m_sFallDiv = CmUtil.MidH(sRsvStr, 3, 1); // == "3" ? "0" : "1"; m_sInPutData = m_sInMaskData; //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 start,phj m_sMobileCode = CmUtil.MidH(sRsvStr, 1072, 7).Trim(); //#15183 보안리더기 삼성페이 해피포인트 자동적립 기능 수정 end,phj return true; } } } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "GetIcCardData()","Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } finally { // 여전법 대응//////////////////////////////////////////////////////////////////// CmUtil.ZeroFillClear(ref sRsvStr); ////////////////////////////////////////////////////////////////////////////////// } return false; } #endregion private void SendErrorMessageEvent(string _errorMessageString) { try { CommonLog.ErrorLogWrite(this, "SendErrorMessageEvent()", _errorMessageString); ErrorMessageEvent(_errorMessageString); } catch { } } private void SendErrLogEvent(ErrorCode _errorCode) { try { CommonLog.DebugLogWrite(this, "SendErrLogEvent()", _errorCode.ToString()); ErrorEvent(_errorCode); } catch { } } private void SendReadStart() { try { CommonLog.DebugLogWrite(this, "SendReadStart()"); ReadStart(this); } catch { } } private void SendReadEnd() { try { CommonLog.DebugLogWrite(this, "SendReadEnd()"); ReadEnd(this); } catch { } } private void SignStart() { try { CommonLog.DebugLogWrite(this, "SignStart()"); SignStartEvent(this); } catch { } } private void SignEnd() { try { CommonLog.DebugLogWrite(this, "SignEnd()"); SignEndEvent(this); } catch { } } private void ClearCardInfo() { try { m_sSign = ""; m_InputType = ""; // 입력구분 m_sInPutData = ""; // 입력데이터 m_sInMaskData = ""; // 마스킹 m_sCardNo = ""; // 카드데이터인카드번호 m_bProcessSuccess = false; } catch { } } #endregion } }