Beispiel #1
0
 private MDOM_POS SetInitialParams()
 {
     Request = new MDOM_POS();
     Request.ResponseReq.TerminalId = StaticMain.Settings.Terminal_MdomPOS.TerminalID;
     Request.ResponseReq.Version    = StaticMain.Settings.Terminal_MdomPOS.version;
     return(Request);
 }
Beispiel #2
0
 public static PS_ERIP SetPosError(this PS_ERIP eripArg, MDOM_POS arg)
 {
     try
     {
         if (arg.EnumType == PosQAType.PURResponse)
         {
             eripArg.EnumType = EripQAType.POSPayResponse;
         }
         if (arg.EnumType == PosQAType.VOIResponse)
         {
             eripArg.EnumType = EripQAType.POSCancelResponse;
         }
         if (arg.EnumType == PosQAType.UnknownResponse)
         {
             eripArg.EnumType = EripQAType.UnknownResponse;
         }
         eripArg.ResponseReq.ErrorCode = arg.ResponseReq.ErrorCode ?? 0;
         eripArg.ResponseReq.ErrorText = arg.ResponseReq.ErrorText;
         if (arg.ResponseReq.ErrorCode == 16)
         {
             eripArg.ResponseReq.KioskError = arg.ResponseReq.ResponseCode ?? eripArg.ResponseReq.KioskError;
             eripArg.ResponseReq.ErrorText  = arg.ResponseReq.VisualHostResponse ?? eripArg.ResponseReq.ErrorText;
         }
     }
     catch (Exception ex) { ex.Log(); }
     return(eripArg);
 }
        private async Task <string> Serialize(MDOM_POS PosArg)
        {
            XDocument reqXml = await SerializationUtil.Serialize(PosArg);

            //string request = $"xml={reqXml?.ToString()}";
            string request = reqXml?.ToString();

            return(request);
        }
        private async Task <MDOM_POS> GetPosResponse(string argReq)
        {
            Ex.Log($"{nameof(XmlTransactionsManager)}.{nameof(GetPosResponse)}()");
            XDocument respXml = await PostGetHTTP.PostStringGetXML(StaticMain.Settings.Terminal_MdomPOS.url, argReq);

            MDOM_POS respPos = await SerializationUtil.Deserialize <MDOM_POS>(respXml);

            return(respPos);
        }
 private void HandleCancelPOSResponse(MDOM_POS arg)
 {
     Ex.Log($"{nameof(XmlTransactionsManager)}.{nameof(HandleCancelPOSResponse)}()");
     if (arg?.ResponseReq?.ErrorCode == null)
     {
         string str = $"Error: {nameof(HandleCancelPOSResponse)}(): MDOM_POS response = null";
         Ex.Throw(str);
     }
     if (arg?.ResponseReq?.ErrorCode != null && arg?.ResponseReq?.ErrorCode != 0)
     {
         string str = $"Error: {nameof(HandleCancelPOSResponse)}(): ErrorCode={arg.ResponseReq.ErrorCode}; ErrorText={arg.ResponseReq.ErrorText}";
         Ex.Throw(str);
     }
 }
Beispiel #6
0
 public static PS_ERIP Accept(this PS_ERIP eripArg, MDOM_POS arg)
 {
     try
     {
         eripArg.ResponseReq.PayDate      = arg?.ResponseReq?.PayDate;
         eripArg.ResponseReq.KioskReceipt = arg?.ResponseReq?.KioskReceipt;
         eripArg.ResponseReq.PAN          = arg?.ResponseReq?.PAN;
         eripArg.ResponseReq.TypePAN      = arg?.ResponseReq?.TypePAN;
         eripArg.ResponseReq.KioskReceipt = arg?.ResponseReq?.KioskReceipt;
         var payrec = eripArg.ResponseReq?.PayRecord?.FirstOrDefault();
         payrec.PC_ID = arg.ResponseReq?.PC_ID;
     }
     catch (Exception ex) { ex.Log(); }
     return(eripArg);
 }
        private async Task CancelPayPOS()
        {
            Ex.Log($"{nameof(XmlTransactionsManager)}.{nameof(CancelPayPOS)}()");
            var      RunOpReq     = Request; //list.Page.Request
            MDOM_POS CancelPOSReq = null;

            if (RunOpReq.EnumType != EripQAType.RunOperationRequest)
            {
                Ex.Log($"Error: {nameof(CancelPayPOS)} RunOpReq.EnumType != RunOperationRequest");
                CancelPOSReq = lastPOSTransaction.GetCancelVOIRequest(lastPCID, lastKioskReceipt);
            }
            else
            {
                CancelPOSReq = lastPOSTransaction.GetCancelVOIRequest(RunOpReq);
            }
            string request = await Serialize(CancelPOSReq);

            lastPOSTransaction.Response = await GetPosResponse(request);

            Ex.Catch(() => HandleCancelPOSResponse(lastPOSTransaction.Response));
        }
        private async Task <PS_ERIP> HandlePayRecordParam(PayRecord payrecArg, PS_ERIP requestArg = null)
        {
            PS_ERIP @return = null;

            if (payrecArg == null)
            {
                Ex.Throw <ArgumentNullException>($"{nameof(HandlePayRecordParam)}(): PayRecord argument = null");
            }
            PS_ERIP requestCopy = requestArg ?? list.Current.Request.Copy();

            if (payrecArg.GetPayListType == "1" || payrecArg.GetPayListType == "2")
            {
                Ex.Log($"{nameof(HandlePayRecordParam)}(): GetPayListType=1/2; SessionID={payrecArg.SessionId}");
                requestCopy.ResponseReq.SessionId  = payrecArg.SessionId;
                requestCopy.ResponseReq.AttrRecord = new List <AttrRecordRequest>();
                payrecArg.AttrRecord.ForEach(attr =>
                {
                    var newAttr    = new AttrRecordRequest(attr);
                    newAttr.Change = 1;
                    requestCopy.ResponseReq.AttrRecord.Add(newAttr);
                });
                return(requestCopy);
            }
            if (payrecArg.GetPayListType == "0")
            {
                Ex.Log($"GetPayListType=0; SessionID={payrecArg.SessionId}");
                Ex.Try(false, () => payrecArg.Summa = payrecArg.Summa.Replace(",", "."));
                lastPOSTransaction.CreatePayPosRequest(payrecArg);
                string request = await Serialize(lastPOSTransaction.Request);

                MDOM_POS PosRespon = await GetPosResponse(request);

                lastPOSTransaction.Response = PosRespon;
                string fakeRespon = @"      <MDOM_POS>
        <PURResponse>
          <ErrorCode>0</ErrorCode>
          <PayDate>04/11/2019 15:54:18</PayDate>
          <KioskReceipt>0002</KioskReceipt>
          <PC_ID>000000000000</PC_ID>
          <PAN>522208******0693</PAN>
          <TypePAN>MS</TypePAN>
          <Receipt>
            *****************************
            DEMO MODE
            ONLY FOR TEST
            ДЕМОНСТРАЦИОННЫЙ РЕЖИМ
            ТОЛЬКО ДЛЯ ТЕСТИРОВАНИЯ
            *****************************
            **** TRAINING MODE ****
            ТЕРМИНАЛ: PTS01001
            Торговец: 0000001
            Тестовый терминал
            Расвиком


            КАРТ-ЧЕК: 990003/000001
            ERN: 2
            * ДЛЯ КЛИЕНТА *
            ОПЛАТА
            04.11.2019
            КАРТА: 522208******0693
            Ввод данных - (CL)
            Сумма                           1.00 BYN
            КОД: 00
            ЗАВЕРШЕНО УСПЕШНО
            КОД АВТ.: XXXXXX
            AID: A0000000041010
            APP: Mastercard
          </Receipt>
        </PURResponse>
      </MDOM_POS>";                                       //FAKE RESPONSE
                    //Ex.Log($"TEST ПОДСТАВА ответа от POS вместо реального");
                if (PosRespon.ResponseReq.ErrorCode == 0) //УСПЕХ POS
                {
                    this.lastPCID         = PosRespon?.ResponseReq?.PC_ID;
                    this.lastKioskReceipt = PosRespon?.ResponseReq?.KioskReceipt;
                    var responCopy = list.Current.Response.Copy();
                    responCopy.EnumType = EripQAType.RunOperationRequest;
                    responCopy.Accept(requestCopy);
                    responCopy.Accept(PosRespon).RunOpRequestClear();;
                    responCopy.ResponseReq.SessionId = payrecArg.SessionId;
                    var payrec = responCopy.ResponseReq.PayRecord.FirstOrDefault();
                    payrec.SessionId = payrecArg.SessionId;
                    Ex.Try(false, () => payrec.Summa = payrec.Summa.Replace(",", "."));
                    responCopy.ClearAttrRecords();
                    return(responCopy);
                }
                if ((PosRespon.ResponseReq.ErrorCode != null && PosRespon.ResponseReq.ErrorCode != 0) || PosRespon.ResponseReq.ErrorCode == null) //ОШИБКА POS
                {
                    var eripResponPosError = Factory.PsEripCreate().SetPosError(PosRespon);
                    if (PosRespon.ResponseReq.ErrorCode == 16)
                    {
                        Task.Run(() =>
                        {
                            try
                            {
                                Font font      = SetFont();
                                var posReceipt = PosRespon.ResponseReq.Receipt;
                                Print(posReceipt, font);
                            }
                            catch (Exception ex)
                            {
                                ex.Show("Print if ErroCode=16");
                            }
                        }).RunAsync();
                    }
                    return(eripResponPosError);
                }
            }
            return(@return);
        }