コード例 #1
0
        public async Task <Payment> Handle(SavePayment request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            using (var db = new PaymentGatewayDbContext())
            {
                // Implementing masking as suggested here: https://security.stackexchange.com/a/145079
                // CC numbers in the PaymentRequest are sanitised and should be just the numbers (no spaces)
                var maskedCardNumber = CardNumber.Replace(request.Request.CardNumber, @"$1******$3");

                var payment = new Payment(0,
                                          request.Request.MerchantId,
                                          request.Request.CardHolderName,
                                          maskedCardNumber,
                                          request.Request.ExpiryDate,
                                          request.Request.Money,
                                          request.Response.AcquiringBankPaymentId,
                                          request.Response.Status,
                                          request.Response.Timestamp);

                await db.AddAsync(payment);

                await db.SaveChangesAsync();

                return(payment);
            }
        }
コード例 #2
0
        private static async Task <Merchant> AddMerchant(SaveMerchant request)
        {
            using (var db = new PaymentGatewayDbContext())
            {
                var newMerchant = new Merchant(0, request.Merchant.Name);
                db.Add(newMerchant);
                await db.SaveChangesAsync();

                return(newMerchant);
            }
        }
コード例 #3
0
        public async Task <Merchant> Handle(FindMerchant request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            using (var db = new PaymentGatewayDbContext())
            {
                return(await db.Merchants.FindAsync(request.Id));
            }
        }
コード例 #4
0
        public Task <Payment> Handle(FindPayment request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            using (var db = new PaymentGatewayDbContext())
            {
                var payment = db.Payments
                              .Where(p => p.MerchantId == request.MerchantId && p.AcquiringBankPaymentId == request.AcquiringPaymentBankId)
                              .FirstOrDefault();

                return(Task.FromResult(payment));
            }
        }