public static void Mask(ref PaymentProcessEntity entity)
        {
            var sb = new StringBuilder("XXXX-XXXX-XXXX-");

            sb.Append(entity.CardNumber.Substring(12));
            entity.CardNumber = sb.ToString();
        }
        public async Task <PaymentProcessResponse> ExecuteAsync(PaymentProcessRequest request)
        {
            _logger.LogInformation($"Validating payment on context {request.ContextId}");
            _ruleEngine.ProcessRules(request);

            _logger.LogInformation("Encrypting credit card data");
            var encryptedData = this._encryptionClient.Encrypt(request.CardStringRepresentation);

            _logger.LogInformation($"Creating request to bank entity");
            var clientResponse = await _bankClient.CreatePaymentAsync(new BankPayment
            {
                Amount            = request.Amount,
                Deny              = request.CardType == CardType.Other,
                CardEncryptedData = encryptedData
            });

            var entity = new PaymentProcessEntity
            {
                Amount             = request.Amount,
                CardNumber         = request.CardNumber,
                CardType           = request.CardType,
                CVV                = request.CVV,
                Currency           = request.Currency,
                RegistrationTime   = request.RegistrationTime,
                ContextId          = request.ContextId,
                BankResponse       = clientResponse.BankResponseId,
                BankResponseStatus = clientResponse.BankResponseId == Guid.Empty
                    ? PaymentStatus.NoAnswer
                    : (PaymentStatus)clientResponse.Status
            };

            _logger.LogInformation($"Storing payment process request on database");

            await _repository.WriteAsync(entity);

            return(new PaymentProcessResponse
            {
                ContextId = entity.ContextId,
                PaymentAcceptanceStatus = entity.BankResponseStatus,
                PaymentProcessId = entity.Id
            });
        }
Example #3
0
 public async Task WriteAsync(PaymentProcessEntity entity)
 {
     _context.ProcessPaymentEntities.Add(entity);
     await _context.SaveChangesAsync();
 }