/// <summary> /// Creates a payment by first processing payment through the acquiring bank and then storing the /// output result for the payment in the payments database. /// </summary> /// <param name="payment">The payment.</param> /// <returns></returns> public async Task <Payment> CreatePayment(Payment payment) { //get bank to process payment PaymentProcessResult bankProcessedResult = await bankRepository.ProcessPayment(payment); //we should store succesfull and failed payments in the database for auditing purposes Payment paymentResult = await paymentRepository.AddPaymentToDatabase(bankProcessedResult.Payment); //if successful bank process store all details for payment in database if (bankProcessedResult.PaymentStatus == PaymentStatus.Success) { //can manipulate result here if we want before sending back to the controller return(paymentResult); } //if we could not process the payment we return null return(null); }