public async Task <ProcessPaymentResult> ProcessAsync(IPaymentRequest paymentRequest) { var unprocessedPayment = _paymentsService.CreateUnprocessedPayment(paymentRequest); var acquiringBankRequest = await _acquiringBank.CreateRequestAsync(paymentRequest); _logger.LogInformation("Begun processing payment {PaymentId}.", unprocessedPayment.Id); IAcquiringBankResponse acquiringBankResponse = null; try { acquiringBankResponse = await _acquiringBank.ProcessPaymentAsync(acquiringBankRequest); _logger.LogInformation("The acquiring bank has processed the payment {PaymentId} without error.", unprocessedPayment.Id); } catch (Exception exception) { _logger.LogError( "Exception occured whilst the acquiring bank was processing payment {PaymentId}. {Exception}", unprocessedPayment.Id, exception); } var processedPayment = _paymentsService.CreateProcessedPayment(unprocessedPayment, acquiringBankResponse); var payment = CreatePayment(processedPayment); await _paymentsRepository.SavePaymentAsync(payment); _logger.LogInformation("Payment {PaymentId} has successfully been processed.", processedPayment.Id); return(new ProcessPaymentResult { Payment = processedPayment }); }
public void CreateProcessedPayment_WithNullAcquiringBankResponse_ReturnsUnsuccessfulResponse() { var unprocessedPayment = new UnprocessedPayment(); IAcquiringBankResponse acquiringBankResponse = null; var result = _paymentsService.CreateProcessedPayment(unprocessedPayment, acquiringBankResponse); Assert.False(result.Success); Assert.Null(result.AcquiringBankPaymentId); }
public IProcessedPayment CreateProcessedPayment(IUnprocessedPayment unprocessedPayment, IAcquiringBankResponse acquiringBankResponse) { if (unprocessedPayment == null) { throw new ArgumentNullException(nameof(unprocessedPayment)); } var processedPayment = new ProcessedPayment { Id = unprocessedPayment.Id, CardNumber = unprocessedPayment.CardNumber, CardCvv = unprocessedPayment.CardCvv, CardExpiryMonth = unprocessedPayment.CardExpiryMonth, CardExpiryYear = unprocessedPayment.CardExpiryYear, Amount = unprocessedPayment.Amount, Currency = unprocessedPayment.Currency, UserId = unprocessedPayment.UserId, User = unprocessedPayment.User, CreatedAt = unprocessedPayment.CreatedAt }; if (acquiringBankResponse == null) { return(processedPayment); } processedPayment.Success = acquiringBankResponse.Success; processedPayment.AcquiringBankPaymentId = acquiringBankResponse.PaymentId; return(processedPayment); }