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);
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<string, string> PerformVoidTransaction(string referenceValue)
{
var reference = GetReference(true, "");
var voidReason = GetUserInput("\r\nPlease Enter Void Reason (Optional)");
var transactionResult = new Dictionary<string, string>();
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<string, string> PerformGetTransactionInformation(string referenceValue)
{
var referenceValue = GetReference(true, "");
var result = new Dictionary<string, string>();
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)

View File

@ -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; }
}
}