Пример #1
0
        internal IDeviceMessage BuildReportTransaction(TerminalReportBuilder builder)
        {
            var requestId = builder.SearchBuilder.ReferenceNumber;

            if (requestId == default(string) && RequestIdProvider != null)
            {
                requestId = RequestIdProvider.GetRequestId().ToString();
            }

            var doc = new JsonDoc();

            doc.Set("message", "MSG");

            var baseRequest = doc.SubElement("data");

            baseRequest.Set("command", MapReportType(builder.ReportType));
            if (!(builder.SearchBuilder.EcrId == null))
            {
                baseRequest.Set("EcrId", builder.SearchBuilder.EcrId);
            }
            baseRequest.Set("requestId", requestId.ToString());

            if (builder.ReportType == TerminalReportType.GetOpenTabDetails)
            {
                return(TerminalUtilities.BuildUpaRequest(doc.ToString()));
            }

            var txnData   = baseRequest.SubElement("data");
            var txnParams = txnData.SubElement("params");

            txnParams.Set("reportOutput", builder.SearchBuilder.ReportOutput);
            txnParams.Set("batch", builder.SearchBuilder.Batch);

            return(TerminalUtilities.BuildUpaRequest(doc.ToString()));
        }
Пример #2
0
        private void SendAckMessageToDevice()
        {
            var doc = new JsonDoc();

            doc.Set("message", UpaMessageType.Ack);

            var message   = TerminalUtilities.BuildUpaRequest(doc.ToString());
            var ackBuffer = message.GetSendBuffer();

            _stream.Write(ackBuffer, 0, ackBuffer.Length);
        }
Пример #3
0
        internal IDeviceMessage BuildManageTransaction(TerminalManageBuilder builder)
        {
            var transType     = builder.TransactionType;
            var transModifier = builder.TransactionModifier;
            int requestId     = builder.ReferenceNumber;

            if (requestId == default(int) && RequestIdProvider != null)
            {
                requestId = RequestIdProvider.GetRequestId();
            }

            var doc = new JsonDoc();

            doc.Set("message", "MSG");

            var baseRequest = doc.SubElement("data");

            // Possibly update the requestToken parameter in the future if necessary
            baseRequest.Set("command", MapTransactionType(transType, transModifier, false, builder.Gratuity));
            baseRequest.Set("EcrId", builder.EcrId.ToString());
            baseRequest.Set("requestId", requestId.ToString());

            var txnData = baseRequest.SubElement("data");

            var transaction = txnData.SubElement("transaction");

            transaction.Set("referenceNumber", builder.TransactionId ?? StringUtils.PadLeft(builder.TerminalRefNumber, 4, '0'));
            transaction.Set("amount", ToCurrencyString(builder.Amount));
            transaction.Set("taxAmount", ToCurrencyString(builder.TaxAmount));
            transaction.Set("tipAmount", ToCurrencyString(builder.Gratuity));
            transaction.Set("taxIndicator", builder.TaxExempt);
            transaction.Set("invoiceNbr", builder.InvoiceNumber);
            transaction.Set("processCPC", builder.ProcessCPC);

            return(TerminalUtilities.BuildUpaRequest(doc.ToString()));
        }
Пример #4
0
        internal IDeviceMessage BuildProcessTransaction(TerminalAuthBuilder builder)
        {
            var  pmt           = builder.PaymentMethodType;
            var  transType     = builder.TransactionType;
            var  transModifier = builder.TransactionModifier;
            bool isTipAdjust   = IsTipAdjust(transType, builder.Gratuity);
            bool isCardHSAFSA  = IsCardHSAFSA(builder.AutoSubstantiation);

            if (pmt != PaymentMethodType.Credit && pmt != PaymentMethodType.Debit && pmt != PaymentMethodType.EBT)
            {
                throw new UnsupportedTransactionException("The supplied payment method type is not supported");
            }

            int requestId = builder.ReferenceNumber;

            if (requestId == default(int) && RequestIdProvider != null)
            {
                requestId = RequestIdProvider.GetRequestId();
            }

            var doc = new JsonDoc();

            doc.Set("message", "MSG");

            var baseRequest = doc.SubElement("data");

            baseRequest.Set("command", MapTransactionType(transType, transModifier, builder.RequestMultiUseToken, builder.Gratuity));
            baseRequest.Set("EcrId", builder.EcrId.ToString());
            baseRequest.Set("requestId", requestId.ToString());

            if (transType != TransactionType.Balance)
            {
                var txnData = baseRequest.SubElement("data");

                var txnParams = txnData.SubElement("params");
                txnParams.Set("clerkId", builder.ClerkId);
                if (transType == TransactionType.Tokenize || transType == TransactionType.Verify)
                {
                    txnParams.Set("cardIsHSAFSA", isCardHSAFSA ? "1" : "0");
                }
                if (!IsTokenRequestApplicable(isTipAdjust, transType))
                {
                    txnParams.Set("tokenRequest", builder.RequestMultiUseToken ? "1" : "0");
                }
                if (builder.PaymentMethod is CreditCardData)
                {
                    txnParams.Set("tokenValue", ((CreditCardData)builder.PaymentMethod).Token);
                }
                if (builder.RequestMultiUseToken && (transType == TransactionType.Sale || transType == TransactionType.Refund || transType == TransactionType.Verify ||
                                                     transType == TransactionType.Auth))
                {
                    if (builder.CardOnFileIndicator != null)
                    {
                        txnParams.Set("cardOnFileIndicator", EnumConverter.GetMapping(Target.UPA, builder.CardOnFileIndicator));
                    }
                    txnParams.Set("cardBrandTransId", builder.CardBrandTransId);
                }
                txnParams.Set("lineItemLeft", builder.LineItemLeft);
                txnParams.Set("lineItemRight", builder.LineItemRight);
                txnParams.Set("directMktInvoiceNbr", builder.InvoiceNumber);

                if (builder.ShippingDate != DateTime.MinValue)
                {
                    txnParams.Set("directMktShipMonth", builder.ShippingDate.Month.ToString("00"));
                    txnParams.Set("directMktShipDay", builder.ShippingDate.Day.ToString("00"));
                }

                if (transType != TransactionType.Verify && transType != TransactionType.Refund && !isTipAdjust && transType != TransactionType.Tokenize)
                {
                    var transaction = txnData.SubElement("transaction");
                    if (transType == TransactionType.Auth)
                    {
                        transaction.Set("amount", ToCurrencyString(builder.Amount));
                    }
                    else
                    {
                        transaction.Set("baseAmount", ToCurrencyString(builder.Amount));
                        transaction.Set("cashBackAmount", ToCurrencyString(builder.CashBackAmount));
                        transaction.Set("tipAmount", ToCurrencyString(builder.Gratuity));
                        transaction.Set("taxIndicator", builder.TaxExempt);
                        transaction.Set("invoiceNbr", builder.InvoiceNumber);
                        transaction.Set("processCPC", builder.ProcessCPC);
                        transaction.Set("taxAmount", ToCurrencyString(builder.TaxAmount));
                    }

                    transaction.Set("referenceNumber", builder.TerminalRefNumber);
                    transaction.Set("cardIsHSAFSA", isCardHSAFSA ? "1" : "0");


                    transaction.Set("prescriptionAmount", ToCurrencyString(builder.PrescriptionAmount));
                    transaction.Set("clinicAmount", ToCurrencyString(builder.ClinicAmount));
                    transaction.Set("dentalAmount", ToCurrencyString(builder.DentalAmount));
                    transaction.Set("visionOpticalAmount", ToCurrencyString(builder.VisionOpticalAmount));
                }

                if (transType == TransactionType.Refund)
                {
                    var transaction = txnData.SubElement("transaction");
                    transaction.Set("totalAmount", ToCurrencyString(builder.Amount));
                }

                if (isTipAdjust)
                {
                    var transaction = txnData.SubElement("transaction");
                    transaction.Set("tranNo", builder.TerminalRefNumber);
                    transaction.Set("tipAmount", ToCurrencyString(builder.Gratuity));
                }
            }

            return(TerminalUtilities.BuildUpaRequest(doc.ToString()));
        }