예제 #1
0
        public async Task <ActionResult <MerchantCreationResponse> > CreateMerchant([FromBody] MerchantCreationRequest request)
        {
            var existingMerchant = await _paymentDb.Merchants.FirstOrDefaultAsync(m => m.Login == request.Login);

            if (existingMerchant != null)
            {
                return(BadRequest(new { message = "Merchant with this login already exists" }));
            }
            var salt     = _encryptionService.GenerateSalt();
            var merchant = new Merchant
            {
                Name           = request.Name,
                Login          = request.Login,
                Url            = request.Url,
                AcquirerType   = request.AcquirerType,
                Salt           = salt,
                HashedPassword = _encryptionService.GetHash(request.Password, salt),
                Active         = true,
            };

            _paymentDb.Merchants.Add(merchant);

            await _paymentDb.SaveChangesAsync();

            return(new MerchantCreationResponse {
                Id = merchant.Id
            });
        }
예제 #2
0
        public async Task <ActionResult <PaymentResponse> > PostPayment([FromBody] PaymentRequest request)
        {
            var merchantId = GetMerchantId();

            var merchant = await _paymentDb.Merchants.FindAsync(merchantId);

            if (merchant == null)
            {
                // TODO: log merchant absence
                return(BadRequest());
            }

            if (!merchant.Active)
            {
                // TODO: log inactive merchant
                return(BadRequest("This merchant is not active"));
            }
            var bank = _banksRegistry.GetAcquirer(merchant);

            var response = await bank.SubmitPayment(request);

            var payment = new Payment
            {
                Id               = response.AcquirerPaymentId,
                Amount           = request.Amount,
                Currency         = request.Currency,
                ExpiryMonth      = request.ExpiryMonth,
                ExpiryYear       = request.ExpiryYear,
                CardLastDigits   = request.CardNumber.Substring(Math.Max(0, request.CardNumber.Length - 4)),
                CardNumberHashed = _encryptionService.GetHash(request.CardNumber, merchant.Salt),
                CardNumberLength = (byte)request.CardNumber.Length,
                MerchantId       = merchantId,
                Status           = response.Status,
                CreatedUtc       = DateTime.UtcNow,
            };

            _paymentDb.Payments.Add(payment);
            await _paymentDb.SaveChangesAsync();

            return(GetPaymentResponse(payment));
        }
예제 #3
0
 public async Task <int> Complete()
 {
     return(await _context.SaveChangesAsync());
 }
 public async Task <int> SaveChangesAsync()
 {
     return(await Db.SaveChangesAsync());
 }