From df9d82246512aa958b47a96eb2e9dce9d733add5 Mon Sep 17 00:00:00 2001 From: yurii Date: Wed, 17 Dec 2025 12:59:43 +0000 Subject: [PATCH] added transaction-information and void-transaction endpoints --- Client.cs | 42 ++++++++++++---------------- ClientApp.cs | 77 ++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 29 deletions(-) diff --git a/Client.cs b/Client.cs index e610b7b..858d7c7 100644 --- a/Client.cs +++ b/Client.cs @@ -320,10 +320,10 @@ namespace Creditcall.ChipDna.Client PerformConfirmTransaction("", out TransactionConfirmation confirmation); break; case "V": - PerformVoidTransaction(); + PerformVoidTransaction(""); break; case "I": - PerformGetTransactionInformation(); + PerformGetTransactionInformation(""); break; case "K": PerformReleaseCard(); @@ -738,18 +738,13 @@ namespace Creditcall.ChipDna.Client } } - private void PerformVoidTransaction() + public Dictionary PerformVoidTransaction(string referenceValue) { - var reference = GetReference(true, ""); - var voidReason = GetUserInput("\r\nPlease Enter Void Reason (Optional)"); + var transactionResult = new Dictionary(); var parameters = new ParameterSet(); - if (!string.IsNullOrEmpty(reference)) + if (!string.IsNullOrEmpty(referenceValue)) { - parameters.Add(ParameterKeys.Reference, reference); - } - if (!String.IsNullOrEmpty(voidReason)) - { - parameters.Add(ParameterKeys.VoidReason, voidReason); + parameters.Add(ParameterKeys.Reference, referenceValue); } parameters.Add(GetExtraParams("VoidTransaction")); @@ -777,12 +772,18 @@ namespace Creditcall.ChipDna.Client { Console.WriteLine("ErrorDescription: {0}", errorDescription); } + + var responseParameter = response.ToList(); + responseParameter.ForEach(parameter => + { + transactionResult.Add(parameter.Key, parameter.Value); + }); + return transactionResult; } - private void PerformGetTransactionInformation() + public Dictionary PerformGetTransactionInformation(string referenceValue) { - var referenceValue = GetReference(true, ""); - + var result = new Dictionary(); var parameters = new ParameterSet(); if (!string.IsNullOrEmpty(referenceValue)) { @@ -793,18 +794,11 @@ namespace Creditcall.ChipDna.Client var response = chipDnaClientLib.GetTransactionInformation(parameters); var responseParameter = response.ToList(); - responseParameter.ForEach(parameter => { - if (parameter.Key == ParameterKeys.Errors) - { - Console.WriteLine(ErrorsString("GetTransactionInformation Errors", parameter.Value)); - } - else - { - Console.WriteLine("{0} {1}", parameter.Key, parameter.Value); - } - }); + result.Add(parameter.Key, parameter.Value); + }); + return result; } private static string GetUserInput(string prompt) diff --git a/ClientApp.cs b/ClientApp.cs index 2e84270..e095926 100644 --- a/ClientApp.cs +++ b/ClientApp.cs @@ -74,13 +74,15 @@ namespace Creditcall.ChipDna.Client HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://127.0.0.1:18181/start-transaction/"); listener.Prefixes.Add("http://127.0.0.1:18181/start-and-confirm-transaction/"); + listener.Prefixes.Add("http://127.0.0.1:18181/transaction-information/"); listener.Prefixes.Add("http://127.0.0.1:18181/void-transaction/"); listener.Start(); Console.WriteLine("Listening on:"); Console.WriteLine(" http://127.0.0.1:18181/start-transaction/"); Console.WriteLine(" http://127.0.0.1:18181/start-and-confirm-transaction/"); - //Console.WriteLine(" http://127.0.0.1:18181/void-transaction/"); + Console.WriteLine(" http://127.0.0.1:18181/transaction-information/"); + Console.WriteLine(" http://127.0.0.1:18181/void-transaction/"); while (true) { @@ -100,10 +102,19 @@ namespace Creditcall.ChipDna.Client if (rawUrl.StartsWith("/start-transaction", StringComparison.OrdinalIgnoreCase)) { HandleStartTransaction(context); + } else if (rawUrl.StartsWith("/start-and-confirm-transaction", StringComparison.OrdinalIgnoreCase)) { HandleStartAndConfirmTransaction(context); } + else if (rawUrl.StartsWith("/transaction-information", StringComparison.OrdinalIgnoreCase)) + { + HandleTransactionInformation(context); + } + else if (rawUrl.StartsWith("/void-transaction", StringComparison.OrdinalIgnoreCase)) + { + HandleVoidTransaction(context); + } else { context.Response.StatusCode = 404; @@ -123,6 +134,58 @@ namespace Creditcall.ChipDna.Client } } + private static void HandleTransactionInformation(HttpListenerContext context) + { + try + { + var serializer = new XmlSerializer(typeof(TransactionReferenceRequest)); + TransactionReferenceRequest req = (TransactionReferenceRequest)serializer.Deserialize(context.Request.InputStream); + + var transactionResult = client.PerformGetTransactionInformation(req.TransactionReference); + + // Return the final key/value list + var responseSerializer = new XmlSerializer(typeof(SerializableKeyValueList)); + context.Response.ContentType = "application/xml"; + var wrappedResult = new SerializableKeyValueList(transactionResult); + responseSerializer.Serialize(context.Response.OutputStream, wrappedResult); + } + catch (Exception ex) + { + Console.WriteLine("Error in transaction-information: " + ex.Message); + context.Response.StatusCode = 500; + } + finally + { + context.Response.OutputStream.Close(); + } + } + + private static void HandleVoidTransaction(HttpListenerContext context) + { + try + { + var serializer = new XmlSerializer(typeof(TransactionReferenceRequest)); + TransactionReferenceRequest req = (TransactionReferenceRequest)serializer.Deserialize(context.Request.InputStream); + + var transactionResult = client.PerformVoidTransaction(req.TransactionReference); + + // Return the final key/value list + var responseSerializer = new XmlSerializer(typeof(SerializableKeyValueList)); + context.Response.ContentType = "application/xml"; + var wrappedResult = new SerializableKeyValueList(transactionResult); + responseSerializer.Serialize(context.Response.OutputStream, wrappedResult); + } + catch (Exception ex) + { + Console.WriteLine("Error in transaction-information: " + ex.Message); + context.Response.StatusCode = 500; + } + finally + { + context.Response.OutputStream.Close(); + } + } + private static void HandleStartAndConfirmTransaction(HttpListenerContext context) { try @@ -388,9 +451,6 @@ namespace Creditcall.ChipDna.Client { public string amount { get; set; } public string transactionType { get; set; } - - // For confirm transaction - public string transactionReference { get; set; } } [XmlRoot("TransactionConfirmation")] @@ -400,6 +460,13 @@ namespace Creditcall.ChipDna.Client public string Errors { get; set; } public string ErrorDescription { get; set; } public string ReceiptDataCardholder { get; set; } - } + + [XmlRoot("TransactionReferenceRequest")] + public class TransactionReferenceRequest + { + [XmlElement("TransactionReference")] + public string TransactionReference { get; set; } + } + }