public async Task <BankResponse> ExecuteAsync(BankCardRequest bankCardRequest) { var response = new BankResponse() { Id = Guid.NewGuid().ToString() }; switch (bankCardRequest.Amount) { case 100: response.Status = BankResponseStatus.Failed; response.Details = "invalid amount"; break; case 200: response.Status = BankResponseStatus.Failed; response.Details = "insufficient funds"; break; case 300: response.Status = BankResponseStatus.Failed; response.Details = "card blocked"; break; default: response.Status = BankResponseStatus.Success; response.Details = "authorised"; break; } return(await Task.Run(() => response)); }
/// <summary> /// Processes a card payment /// </summary> /// <param name="cardPaymentRequest">payment request from merchant</param> /// <param name="merchant">Merchant details</param> /// <returns></returns> public async Task <CardPaymentResponse> ProcessAsync(CardPaymentRequest cardPaymentRequest, Merchant merchant) { var cardPaymentContext = _modelConverter.CreateCardPaymentContext(cardPaymentRequest, merchant); _logger.LogInformation($"Initiating transaction for {cardPaymentContext.MerchantId} {cardPaymentContext.MerchantReference}"); //Generate transaction with unique id in pending state var transaction = await _transactionService.InitialiseTransactionAsync(cardPaymentContext); _logger.LogInformation($"Transaction {transaction.TransactionId} created for {cardPaymentContext.MerchantId} {cardPaymentContext.MerchantReference}"); var bankCardRequest = new BankCardRequest() { CardDetail = cardPaymentContext.CardDetail, Amount = cardPaymentContext.Amount, Cvv = cardPaymentRequest.Cvv, Reference = cardPaymentContext.MerchantReference, GatewayId = transaction.TransactionId }; // go to bank and get the response var response = await _bankService.ExecuteAsync(bankCardRequest); _logger.LogInformation($"Bank response for TId={transaction.TransactionId} Bank [{response.Id} {response.Status}]"); // Update the transaction with bank response var finalTransaction = await _transactionService.UpdateTransactionAsync(transaction.TransactionId, response); _logger.LogInformation($"TId={transaction.TransactionId} updated with bank response [{response.Id} {response.Status}]"); return(_modelConverter.MapToCardPaymentResponse(finalTransaction)); }
public ActionResult ProcessPayment([FromBody] BankCardRequest request) { return(Ok(new BankResponse() { PaymentResponseId = Guid.NewGuid(), Message = "SUCCESS" })); }