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