Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }