public async Task <ProcessPaymentResult> HandleAsync(ProcessPaymentCommand command)
        {
            var bankPayemntResult = await _acuquiryBank.ProcessPayment(new BankPaymentRequest
            {
                Amount          = command.Amount,
                Currency        = command.Currency,
                CardExpiryYear  = command.CardExpiryYear,
                CardExpiryMonth = command.CardExpiryMonth,
                CardNumber      = command.CardNumber,
                CVV             = command.CVV,
                MerchantId      = Guid.NewGuid().ToString()
            });

            var encriptionKey       = Guid.NewGuid().ToString("N");
            var encriptedCardNumber = _cryptoService.Encrypt(command.CardNumber, encriptionKey);
            var encriptedCardMonth  = _cryptoService.Encrypt(command.CardExpiryMonth, encriptionKey);
            var encriptedCardDay    = _cryptoService.Encrypt(command.CardExpiryYear, encriptionKey);
            var encriptedCardCVV    = _cryptoService.Encrypt(command.CVV, encriptionKey);

            var payment = new Payment
            {
                Id              = Guid.NewGuid().ToString(),
                EncriptionKey   = encriptionKey,
                CardNumber      = encriptedCardNumber,
                CardExpiryMonth = encriptedCardMonth,
                CardExpiryYear  = encriptedCardDay,
                CVV             = encriptedCardCVV,
                Amount          = command.Amount,
                Currency        = command.Currency,
                MerchantId      = command.MerchantId,
            };

            payment.BankPaymentIdentifier = bankPayemntResult.PaymentIdentifier;
            payment.PaymentStatus         = bankPayemntResult.PaymentStatus;

            await _paymentRepository.Save(payment);

            if (bankPayemntResult.PaymentStatus == PaymentStatus.Success)
            {
                return(new SuccessResult(payment.Id));
            }
            else
            {
                return(new ErrorResult("The Bank was unable to process the payment"));
            }
        }
Exemple #2
0
        public async Task <ProcessPaymentResult> Handle(ProcessPaymentCommand command, CancellationToken cancellationToken)
        {
            _logger.Information("starting acquring bank payment request");
            var bankPayemntResult = await _acuquiryBank.ProcessPayment(new BankPaymentRequest
            {
                Amount          = command.Amount,
                Currency        = command.Currency,
                CardExpiryYear  = command.CardExpiryYear,
                CardExpiryMonth = command.CardExpiryMonth,
                CardNumber      = command.CardNumber,
                CVV             = command.CVV,
                MerchantId      = Guid.NewGuid().ToString()
            });

            var encriptionKey       = Guid.NewGuid().ToString("N");
            var encriptedCardNumber = _cryptoService.Encrypt(command.CardNumber, encriptionKey);
            var encriptedCardMonth  = _cryptoService.Encrypt(command.CardExpiryMonth, encriptionKey);
            var encriptedCardYear   = _cryptoService.Encrypt(command.CardExpiryYear, encriptionKey);
            var encriptedCardCVV    = _cryptoService.Encrypt(command.CVV, encriptionKey);

            var payment = new Payment(encriptedCardNumber,
                                      encriptedCardMonth,
                                      encriptedCardYear,
                                      command.Amount,
                                      command.Currency,
                                      encriptedCardCVV,
                                      encriptionKey,
                                      bankPayemntResult.PaymentIdentifier,
                                      bankPayemntResult.PaymentStatus);


            await _paymentRepository.AppendChanges(payment);


            if (bankPayemntResult.PaymentStatus == PaymentStatus.Success)
            {
                _logger.Information("bank payment successful");
                return(new SuccessResult(payment.Id.ToString()));
            }
            else
            {
                _logger.Error("The Bank was unable to process the payment");
                return(new ErrorResult("The Bank was unable to process the payment"));
            }
        }