public async Task <ProcessResponseV1Model> Process([FromBody] ProcessPaymentV1Model processPaymentModel) { using (Engine engine = new Engine()) { return(await engine.ProcessPayment(processPaymentModel)); } }
public async Task <ProcessResponseV1Model> ProcessPayment(ProcessPaymentV1Model processPaymentModel) { //Validate data from request var validation = processPaymentModel.Validate(); //return informational details to caller if (!validation.IsValid) { return(new ProcessResponseV1Model { Status = Statuses.Fail.ToString(), Message = validation.ErrorMessage }); } //build data to be sent to acquiring bank RequestModel requestModel = new RequestModel { MerchantAccountID = processPaymentModel.MerchantAccountID, Amount = processPaymentModel.Amount, CardNumber = processPaymentModel.CardNumber, CardVerificationValue = processPaymentModel.CardVerificationValue, Currency = processPaymentModel.Currency, ExpiryDate = processPaymentModel.ProcessedExpiryDate }; //send data to acquiring bank Money money = new Money(); var response = await money.Transfer(requestModel); //build transaction to be saved in DB Transaction transaction = new Transaction { Amount = requestModel.Amount, CardExpiryDate = requestModel.ExpiryDate, CardNumber = requestModel.CardNumber, ID = response.TransactionID, MerchantAccountID = requestModel.MerchantAccountID, PaymentCurrency = requestModel.Currency, TransactionDateTime = DateTime.Now, PaymentDescription = processPaymentModel.PurchaseDescription, TransactionStatus = (response.ResponseStatus == ResponseStatuses.Successful.ToString()) ? Statuses.successful.ToString() : Statuses.Fail.ToString(), TransactionMessage = response.ResponseMessage }; await repository.AddTransaction(transaction); //respond to caller return(new ProcessResponseV1Model { TransactionID = transaction.ID, Status = transaction.TransactionStatus, Message = transaction.TransactionMessage }); }
private static void ProcessPayment() { Console.WriteLine("Enter Merchant Account ID"); Guid merchantAccountID = new Guid(Console.ReadLine()); Console.WriteLine("Enter Card Number"); string cardNumber = Console.ReadLine(); Console.WriteLine("Enter cvv"); string cvv = Console.ReadLine(); Console.WriteLine("Enter Expiry Date (MM/YY)"); string expiryDate = Console.ReadLine(); Console.WriteLine("Enter Amount"); int amount = Int16.Parse(Console.ReadLine()); Console.WriteLine("Enter Currency"); string currency = Console.ReadLine(); Console.WriteLine("Enter purchase description"); string purchaseDescription = Console.ReadLine(); Console.WriteLine(); Console.WriteLine("Processing..."); Console.WriteLine(); ProcessPaymentV1Model processPaymentV1Model = new ProcessPaymentV1Model { MerchantAccountID = merchantAccountID, CardNumber = cardNumber, CardVerificationValue = cvv, ExpiryDate = expiryDate, Amount = amount, Currency = currency, PurchaseDescription = purchaseDescription }; TransactionV1 transactionV1 = new TransactionV1(); var result = JsonConvert.SerializeObject(transactionV1.Process(processPaymentV1Model).Result); Console.WriteLine(result); Console.WriteLine(); }
/// <summary> /// Process a payment through the payment gateway /// </summary> /// <param name="requestModel"></param> /// <returns></returns> public async Task <ProcessResponseV1Model> Process(ProcessPaymentV1Model requestModel) { //create body parameter Parameter parameter = new Parameter { Name = "RequestModel", Value = JsonConvert.SerializeObject(requestModel), Type = ParameterType.RequestBody }; //sends the request to payment gateway var task = Requestor.SendRequest("Process", Method.POST, parameters: parameter); string jsonResult = await task; return(JsonConvert.DeserializeObject <ProcessResponseV1Model>(jsonResult)); }