added transaction-information and void-transaction endpoints

This commit is contained in:
yurii 2025-12-17 12:59:43 +00:00
parent 3f559dfd45
commit df9d822465
2 changed files with 90 additions and 29 deletions

View File

@ -320,10 +320,10 @@ namespace Creditcall.ChipDna.Client
PerformConfirmTransaction("", out TransactionConfirmation confirmation); PerformConfirmTransaction("", out TransactionConfirmation confirmation);
break; break;
case "V": case "V":
PerformVoidTransaction(); PerformVoidTransaction("");
break; break;
case "I": case "I":
PerformGetTransactionInformation(); PerformGetTransactionInformation("");
break; break;
case "K": case "K":
PerformReleaseCard(); PerformReleaseCard();
@ -738,18 +738,13 @@ namespace Creditcall.ChipDna.Client
} }
} }
private void PerformVoidTransaction() public Dictionary<string, string> PerformVoidTransaction(string referenceValue)
{ {
var reference = GetReference(true, ""); var transactionResult = new Dictionary<string, string>();
var voidReason = GetUserInput("\r\nPlease Enter Void Reason (Optional)");
var parameters = new ParameterSet(); var parameters = new ParameterSet();
if (!string.IsNullOrEmpty(reference)) if (!string.IsNullOrEmpty(referenceValue))
{ {
parameters.Add(ParameterKeys.Reference, reference); parameters.Add(ParameterKeys.Reference, referenceValue);
}
if (!String.IsNullOrEmpty(voidReason))
{
parameters.Add(ParameterKeys.VoidReason, voidReason);
} }
parameters.Add(GetExtraParams("VoidTransaction")); parameters.Add(GetExtraParams("VoidTransaction"));
@ -777,12 +772,18 @@ namespace Creditcall.ChipDna.Client
{ {
Console.WriteLine("ErrorDescription: {0}", errorDescription); 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<string, string> PerformGetTransactionInformation(string referenceValue)
{ {
var referenceValue = GetReference(true, ""); var result = new Dictionary<string, string>();
var parameters = new ParameterSet(); var parameters = new ParameterSet();
if (!string.IsNullOrEmpty(referenceValue)) if (!string.IsNullOrEmpty(referenceValue))
{ {
@ -793,18 +794,11 @@ namespace Creditcall.ChipDna.Client
var response = chipDnaClientLib.GetTransactionInformation(parameters); var response = chipDnaClientLib.GetTransactionInformation(parameters);
var responseParameter = response.ToList(); var responseParameter = response.ToList();
responseParameter.ForEach(parameter => responseParameter.ForEach(parameter =>
{ {
if (parameter.Key == ParameterKeys.Errors) result.Add(parameter.Key, parameter.Value);
{
Console.WriteLine(ErrorsString("GetTransactionInformation Errors", parameter.Value));
}
else
{
Console.WriteLine("{0} {1}", parameter.Key, parameter.Value);
}
}); });
return result;
} }
private static string GetUserInput(string prompt) private static string GetUserInput(string prompt)

View File

@ -74,13 +74,15 @@ namespace Creditcall.ChipDna.Client
HttpListener listener = new HttpListener(); 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-transaction/");
listener.Prefixes.Add("http://127.0.0.1:18181/start-and-confirm-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.Prefixes.Add("http://127.0.0.1:18181/void-transaction/");
listener.Start(); listener.Start();
Console.WriteLine("Listening on:"); Console.WriteLine("Listening on:");
Console.WriteLine(" http://127.0.0.1:18181/start-transaction/"); 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/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) while (true)
{ {
@ -100,10 +102,19 @@ namespace Creditcall.ChipDna.Client
if (rawUrl.StartsWith("/start-transaction", StringComparison.OrdinalIgnoreCase)) if (rawUrl.StartsWith("/start-transaction", StringComparison.OrdinalIgnoreCase))
{ {
HandleStartTransaction(context); HandleStartTransaction(context);
} else if (rawUrl.StartsWith("/start-and-confirm-transaction", StringComparison.OrdinalIgnoreCase)) } else if (rawUrl.StartsWith("/start-and-confirm-transaction", StringComparison.OrdinalIgnoreCase))
{ {
HandleStartAndConfirmTransaction(context); HandleStartAndConfirmTransaction(context);
} }
else if (rawUrl.StartsWith("/transaction-information", StringComparison.OrdinalIgnoreCase))
{
HandleTransactionInformation(context);
}
else if (rawUrl.StartsWith("/void-transaction", StringComparison.OrdinalIgnoreCase))
{
HandleVoidTransaction(context);
}
else else
{ {
context.Response.StatusCode = 404; 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) private static void HandleStartAndConfirmTransaction(HttpListenerContext context)
{ {
try try
@ -388,9 +451,6 @@ namespace Creditcall.ChipDna.Client
{ {
public string amount { get; set; } public string amount { get; set; }
public string transactionType { get; set; } public string transactionType { get; set; }
// For confirm transaction
public string transactionReference { get; set; }
} }
[XmlRoot("TransactionConfirmation")] [XmlRoot("TransactionConfirmation")]
@ -400,6 +460,13 @@ namespace Creditcall.ChipDna.Client
public string Errors { get; set; } public string Errors { get; set; }
public string ErrorDescription { get; set; } public string ErrorDescription { get; set; }
public string ReceiptDataCardholder { get; set; } public string ReceiptDataCardholder { get; set; }
}
[XmlRoot("TransactionReferenceRequest")]
public class TransactionReferenceRequest
{
[XmlElement("TransactionReference")]
public string TransactionReference { get; set; }
}
} }
}