Esempio n. 1
0
        public void SetSafParams()
        {
            DeviceMessage message = TerminalUtilities.BuildRequest(
                "A54",
                "1",
                ControlCodes.FS,
                // start date,
                ControlCodes.FS,
                // end date,
                ControlCodes.FS,
                // duration in days,
                ControlCodes.FS,
                // max number,
                ControlCodes.FS,
                "500", // total ceiling,
                ControlCodes.FS,
                // ceiling per card brand,
                ControlCodes.FS,
                "100", // halo per card type,
                ControlCodes.FS,
                // upload mode,
                ControlCodes.FS,
                // auto upload interval time,
                ControlCodes.FS
                // delete SAF confirmation
                );

            var response = device.SendCustomMessage(message);

            Assert.IsNotNull(response);
        }
Esempio n. 2
0
        public void UpdateResourceFile()
        {
            using (var stream = File.OpenRead(@"C:\temp\idle-screen.zip")) {
                int    count, offset = 0;
                byte[] buffer = new byte[3000];
                while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    string data = Convert.ToBase64String(buffer).Trim();

                    DeviceMessage message = TerminalUtilities.BuildRequest(
                        "A18",
                        offset,
                        ControlCodes.FS,
                        data,
                        ControlCodes.FS,
                        ((offset + count) == stream.Length) ? "0" : "1"
                        );
                    var response = device.SendCustomMessage(message);
                    Assert.IsNotNull(response);
                    Assert.IsTrue(response.Contains("OK"));

                    offset += count;
                }
            }
        }
Esempio n. 3
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()));
        }
Esempio n. 4
0
        public byte[] Send(IDeviceMessage message)
        {
            byte[] buffer = message.GetSendBuffer();

            Connect();
            try {
                for (int i = 0; i < 3; i++)
                {
                    _stream.WriteAsync(buffer, 0, buffer.Length).Wait();

                    var rvalue = _stream.GetTerminalResponseAsync();
                    if (rvalue != null)
                    {
                        byte lrc = rvalue[rvalue.Length - 1]; // Should be the LRC
                        if (lrc != TerminalUtilities.CalculateLRC(rvalue))
                        {
                            SendControlCode(ControlCodes.NAK);
                        }
                        else
                        {
                            SendControlCode(ControlCodes.ACK);
                            return(rvalue);
                        }
                    }
                }
                throw new MessageException("Terminal did not respond in the given timeout.");
            }
            catch (Exception exc) {
                throw new MessageException(exc.Message, exc);
            }
            finally {
                OnMessageSent?.Invoke(message.ToString());
                Disconnect();
            }
        }
        // A08 - GET SIGNATURE
        public ISignatureResponse GetSignatureFile()
        {
            var response = controller.Send(TerminalUtilities.BuildRequest(PAX_MSG_ID.A08_GET_SIGNATURE,
                                                                          0, ControlCodes.FS
                                                                          ));

            return(new SignatureResponse(response));
        }
Esempio n. 6
0
        public void SendCustomResetMessage()
        {
            DeviceMessage message = TerminalUtilities.BuildRequest("A16");

            var response = device.SendCustomMessage(message);

            Assert.IsNotNull(response);
        }
        public void SendCustomResetMessage()
        {
            DeviceMessage message = TerminalUtilities.BuildRequest("<SIP><Version>1.0</Version><ECRId>1004</ECRId><Request>Reset</Request></SIP>", MessageFormat.HeartSIP);

            var response = device.SendCustomMessage(message);

            Assert.IsNotNull(response);
        }
Esempio n. 8
0
        public override IDeviceResponse LineItem(string leftText, string rightText = null, string runningLeftText = null, string runningRightText = null)
        {
            var    requestId  = _controller.GetRequestId();
            var    response   = _controller.Send(TerminalUtilities.BuildUpaAdminRequest(requestId, EcrId, UpaTransType.LineItemDisplay, leftText, rightText));
            string jsonObject = Encoding.UTF8.GetString(response);
            var    jsonParse  = JsonDoc.Parse(jsonObject);

            return(new TransactionResponse(jsonParse));
        }
Esempio n. 9
0
        public override IDeviceResponse Reboot()
        {
            var    requestId  = _controller.GetRequestId();
            var    response   = _controller.Send(TerminalUtilities.BuildUpaAdminRequest(requestId, EcrId, UpaTransType.Reboot));
            string jsonObject = Encoding.UTF8.GetString(response);
            var    jsonParse  = JsonDoc.Parse(jsonObject);

            return(new TransactionResponse(jsonParse));
        }
Esempio n. 10
0
        public override IEODResponse EndOfDay()
        {
            var    requestId  = _controller.GetRequestId();
            var    response   = _controller.Send(TerminalUtilities.BuildUpaAdminRequest(requestId, EcrId, UpaTransType.EodProcessing));
            string jsonObject = Encoding.UTF8.GetString(response);
            var    jsonParse  = JsonDoc.Parse(jsonObject);

            return(new UpaEODResponse(jsonParse));
        }
Esempio n. 11
0
        // A14 - CANCEL
        public void Cancel()
        {
            if (_settings.ConnectionMode == ConnectionModes.HTTP)
            {
                throw new HpsMessageException("The cancel command is not available in HTTP mode");
            }

            _interface.Send(TerminalUtilities.BuildRequest(PAX_MSG_ID.A14_CANCEL));
        }
        // A14 - CANCEL
        public void Cancel()
        {
            if (controller.ConnectionMode == ConnectionModes.HTTP)
            {
                throw new MessageException("The cancel command is not available in HTTP mode");
            }

            controller.Send(TerminalUtilities.BuildRequest(PAX_MSG_ID.A14_CANCEL));
        }
Esempio n. 13
0
        public override ISAFResponse SendStoreAndForward()
        {
            var     requestId  = _controller.GetRequestId();
            var     response   = _controller.Send(TerminalUtilities.BuildUpaAdminRequest(requestId, EcrId, UpaTransType.SendSAF));
            string  jsonObject = Encoding.UTF8.GetString(response);
            JsonDoc doc        = JsonDoc.Parse(jsonObject);

            return(new UpaSAFResponse(doc));
        }
Esempio n. 14
0
        public override ISignatureResponse GetSignatureFile()
        {
            var response = _controller.Send(TerminalUtilities.BuildRequest(
                                                PAX_MSG_ID.A08_GET_SIGNATURE,
                                                0,
                                                ControlCodes.FS
                                                ));

            return(new SignatureResponse(response, _controller.DeviceType.Value));
        }
Esempio n. 15
0
        public override IDeviceResponse Reboot()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(INGENICO_REQ_CMD.REQUEST_MESSAGE);
            sb.Append(INGENICO_REQ_CMD.RESET);

            byte[] response = _controller.Send(TerminalUtilities.BuildRequest(sb.ToString(), settings: _controller.ConnectionMode.Value));

            return(new IngenicoTerminalResponse(response));
        }
Esempio n. 16
0
        public override IInitializeResponse Initialize()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(INGENICO_REQ_CMD.REQUEST_MESSAGE);
            sb.Append(INGENICO_REQ_CMD.PID);

            byte[] response = _controller.Send(TerminalUtilities.BuildRequest(sb.ToString(), settings: _controller.ConnectionMode.Value));

            return(new POSIdentifierResponse(response));
        }
Esempio n. 17
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);
        }
        public IDeviceResponse DisableHostResponseBeep()
        {
            var response = controller.Send(TerminalUtilities.BuildRequest(PAX_MSG_ID.A04_SET_VARIABLE,
                                                                          "00",
                                                                          ControlCodes.FS,
                                                                          "hostRspBeep",
                                                                          ControlCodes.FS,
                                                                          "N"
                                                                          ));

            return(new PaxDeviceResponse(response, PAX_MSG_ID.A05_RSP_SET_VARIABLE));
        }
 internal IDeviceMessage BuildReportTransaction(TerminalReportBuilder builder)
 {
     if (!IsObjectNullOrEmpty(builder.Type))
     {
         string message = INGENICO_REQ_CMD.REPORT.FormatWith(builder.Type);
         return(TerminalUtilities.BuildRequest(message, settings: _settings.ConnectionMode));
     }
     else
     {
         throw new BuilderException("Type of report is missing in request.");
     }
 }
Esempio n. 20
0
        protected override void ParseResponse(BinaryReader br)
        {
            base.ParseResponse(br);

            if (DeviceResponseCode == "000000" && Command == PAX_MSG_ID.A09_RSP_GET_SIGNATURE)
            {
                TotalLength   = int.Parse(br.ReadToCode(ControlCodes.FS));
                ResponseLegth = int.Parse(br.ReadToCode(ControlCodes.FS));

                var signatureData = br.ReadToCode(ControlCodes.ETX);
                SignatureData = TerminalUtilities.BuildSignatureImage(signatureData);
            }
        }
        private bool ValidateResponseLRC(string calculate, string actual)
        {
            bool response = false;

            string calculateLRC = BitConverter.ToString(TerminalUtilities.CalculateLRC(calculate));
            string actualLRC    = BitConverter.ToString(TerminalUtilities.CalculateLRC(actual));

            if (actualLRC == calculateLRC)
            {
                response = true;
            }

            return(response);
        }
Esempio n. 22
0
        internal IDeviceMessage BuildReportTransaction(TerminalReportBuilder builder)
        {
            string messageId = MapReportType(builder.ReportType);

            IDeviceMessage request = null;

            switch (builder.ReportType)
            {
            case TerminalReportType.LocalDetailReport: {
                var criteria = builder.SearchBuilder;

                // additional data
                var additionalData = new ExtDataSubGroup();
                if (criteria.MerchantId.HasValue)
                {
                    additionalData[EXT_DATA.MERCHANT_ID] = criteria.MerchantId.ToString();
                }
                if (!string.IsNullOrEmpty(criteria.MerchantName))
                {
                    additionalData[EXT_DATA.MERCHANT_NAME] = criteria.MerchantName;
                }

                request = TerminalUtilities.BuildRequest(
                    messageId,
                    "00",          // EDC TYPE SET TO ALL
                    ControlCodes.FS,
                    criteria.TransactionType.HasValue ? ((int)criteria.TransactionType.Value).ToString().PadLeft(2, '0') : string.Empty,
                    ControlCodes.FS,
                    criteria.CardType.HasValue ? ((int)criteria.CardType.Value).ToString().PadLeft(2, '0') : string.Empty,
                    ControlCodes.FS,
                    criteria.RecordNumber.HasValue ? criteria.RecordNumber.ToString() : string.Empty,
                    ControlCodes.FS,
                    criteria.TerminalReferenceNumber.HasValue ? criteria.TerminalReferenceNumber.ToString() : string.Empty,
                    ControlCodes.FS,
                    criteria.AuthCode ?? string.Empty,
                    ControlCodes.FS,
                    criteria.ReferenceNumber ?? string.Empty,
                    ControlCodes.FS,
                    additionalData
                    );
            }
            break;

            default: {
                throw new UnsupportedTransactionException(string.Format("Unsupported report type: {0}", builder.ReportType.ToString()));
            };
            }

            return(request);
        }
        internal override ITerminalReport ProcessReport(TerminalReportBuilder builder)
        {
            IDeviceMessage request;

            if (builder.Type != null)
            {
                request = BuildReportTransaction(builder);
                return(ReportRequest(request));
            }
            else
            {
                request = TerminalUtilities.BuildRequest(INGENICO_REQ_CMD.RECEIPT.FormatWith(builder.ReceiptType), settings: _settings.ConnectionMode);
                return(XmlRequest(request));
            }
        }
Esempio n. 24
0
        public void SendCustomComplexMessage()
        {
            DeviceMessage message = TerminalUtilities.BuildRequest(
                "A04", // FOR PAX THE FIRST ELEMENT SHOULD ALWAYS BE THE MESSAGE ID
                "02",
                ControlCodes.FS,
                "cashBack",
                ControlCodes.FS,
                "1000,2000,3000,4000"
                );

            var response = device.SendCustomMessage(message);

            Assert.IsNotNull(response);
        }
        private byte[] KeepAliveResponse(byte[] buffer)
        {
            if (buffer.Length > 0)
            {
                var tIdIndex = Encoding.ASCII.GetString(buffer, 0, buffer.Length).IndexOf(INGENICO_GLOBALS.TID_CODE);
                var tId      = Encoding.ASCII.GetString(buffer, tIdIndex + 10, 8);

                var respData = INGENICO_GLOBALS.KEEP_ALIVE_RESPONSE.FormatWith(tId);
                respData = TerminalUtilities.CalculateHeader(Encoding.ASCII.GetBytes(respData)) + respData;
                return(Encoding.ASCII.GetBytes(respData));
            }
            else
            {
                return(null);
            }
        }
Esempio n. 26
0
 public static string Sale(string refNumber, string amount)
 {
     return(Convert.ToBase64String(TerminalUtilities.BuildRequest(
                                       "T00",
                                       "01",   // SALE_REDEEM
                                       ControlCodes.FS,
                                       amount, // $1.00
                                       ControlCodes.FS,
                                       ControlCodes.FS,
                                       refNumber, // reference number. needs to increment to prevent device-level duplicate checks
                                       ControlCodes.FS,
                                       ControlCodes.FS,
                                       ControlCodes.FS,
                                       ControlCodes.FS,
                                       ControlCodes.FS
                                       ).GetSendBuffer()));
 }
Esempio n. 27
0
        // A14 - CANCEL
        public void Cancel()
        {
            if (controller.ConnectionMode == ConnectionModes.HTTP)
            {
                throw new MessageException("The cancel command is not available in HTTP mode");
            }

            try {
                controller.Send(TerminalUtilities.BuildRequest(PAX_MSG_ID.A14_CANCEL));
            }
            catch (MessageException exc) {
                if (!exc.Message.Equals("Terminal returned EOT for the current message."))
                {
                    throw;
                }
            }
        }
Esempio n. 28
0
        internal T SendMessage <T>(string message, bool keepAlive, bool awaitResponse, params string[] messageIds)
        {
            IDeviceMessage deviceMessage = TerminalUtilities.BuildRequest(message, Format);

            deviceMessage.KeepAlive     = keepAlive;
            deviceMessage.AwaitResponse = awaitResponse;

            var response = _connector.Send(deviceMessage);

            if (awaitResponse)
            {
                return((T)Activator.CreateInstance(typeof(T), response, messageIds));
            }
            else
            {
                return(default(T));
            }
        }
Esempio n. 29
0
        internal IDeviceMessage BuildRequest(string messageId, string txnType, params IRequestSubGroup[] subGroups)
        {
            var commands = new List <object> {
                txnType, ControlCodes.FS
            };

            if (subGroups.Length > 0)
            {
                commands.Add(subGroups[0]);
                for (int i = 1; i < subGroups.Length; i++)
                {
                    commands.Add(ControlCodes.FS);
                    commands.Add(subGroups[i]);
                }
            }

            return(TerminalUtilities.BuildRequest(messageId, commands.ToArray()));
        }
        internal IDeviceMessage BuildManageTransaction(TerminalManageBuilder builder)
        {
            int     refNumber    = builder.ReferenceNumber;
            decimal?amount       = ValidateAmount(builder.Amount);
            int     returnRep    = 1;
            int     paymentMode  = ValidatePaymentMode(builder.PaymentMode);
            int?    paymentType  = (int?)((IngenicoInterface)_interface).paymentMethod ?? 0;
            string  currencyCode = (string.IsNullOrEmpty(builder.CurrencyCode) ? "826" : builder.CurrencyCode);
            string  privData     = "EXT0100000";
            int     immediateAns = 0;
            int     forceOnline  = 0;
            string  extendedData = "0000000000";

            // Validation for Authcode
            if (!string.IsNullOrEmpty(builder.AuthCode))
            {
                extendedData = INGENICO_REQ_CMD.AUTHCODE.FormatWith(builder.AuthCode);
            }
            // Validation for Reversal with Transaction Id value in Extended data
            else if (builder.TransactionId != null && builder.TransactionType == TransactionType.Reversal)
            {
                extendedData = INGENICO_REQ_CMD.REVERSE_WITH_ID.FormatWith(builder.TransactionId);
            }
            else if (builder.TransactionType == TransactionType.Reversal)
            {
                extendedData = INGENICO_REQ_CMD.REVERSE;
            }

            // Concat all data to create a request string.
            var sb = new StringBuilder();

            sb.Append(builder.ReferenceNumber.ToString("00"));
            sb.Append(amount?.ToString("00000000"));
            sb.Append(returnRep);
            sb.Append(paymentMode);
            sb.Append(paymentType);
            sb.Append(currencyCode);
            sb.Append(privData);
            sb.Append("A01" + immediateAns);
            sb.Append("B01" + forceOnline);
            sb.Append(extendedData);

            return(TerminalUtilities.BuildRequest(sb.ToString(), _settings.ConnectionMode));
        }