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())); }
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); }
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())); }
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())); }