Пример #1
0
        public async Task <IEnumerable <TransactionDTO> > Execute(PaymentModel payment)
        {
            var customer = await _paymentRepository.GetLastTransaction(payment.OrderId);

            var service = new RefundService();

            var options = new RefundCreateOptions
            {
                Charge = customer.ExternalId,
            };

            var orderInfo = new PaymentModel {
                UserId = customer.UserId, VendorId = customer.VendorId, OrderId = customer.OrderId, Amount = customer.Amount
            };

            var transaction = await _retryHelper.RetryIfThrown(async() =>
            {
                var result = await service.CreateAsync(options);
                var test   = _mappingProvider.GetMappingOperation(PaymentServiceConstants.PaymentMappingType.Stripe_Refund)
                             .Map(PaymentServiceConstants.PaymentType.Refund, orderInfo, result, result.Created);
                return(test);
            }, PaymentServiceConstants.PaymentType.Refund, orderInfo, PaymentServiceConstants.isSucceeded.Succeeded);

            return(await _paymentRepository.CreateTransactions(transaction));
        }
Пример #2
0
        private async Task <TransactionDTO> CallPayment(Func <Task <TransactionDTO> > action, PaymentServiceConstants.PaymentType type, PaymentModel payment)
        {
            DateTime time = DateTime.UtcNow;

            try
            {
                return(await action());
            }
            catch (Exception e)
            {
                return(_mappingProvider.GetMappingOperation(PaymentServiceConstants.PaymentMappingType.Failed).Map(type, payment,
                                                                                                                   e.Message, time));
            }
        }
Пример #3
0
        public async Task <IEnumerable <TransactionDTO> > Execute(PaymentModel payment)
        {
            var options = new ChargeCreateOptions
            {
                Amount   = payment.Amount,
                Currency = payment.Currency,
                Source   = payment.CardToken
            };
            var service = new ChargeService();

            var transaction = await _retryHelper.RetryIfThrown(async() =>
            {
                var result = await service.CreateAsync(options);
                return(_mappingProvider.GetMappingOperation(PaymentServiceConstants.PaymentMappingType.Stripe_Succeeded)
                       .Map(PaymentServiceConstants.PaymentType.Charge, payment, result, result.Created));
            }, PaymentServiceConstants.PaymentType.Charge, payment, PaymentServiceConstants.isSucceeded.Succeeded);

            return(await _paymentRepository.CreateTransactions(transaction));;
        }
Пример #4
0
        public async Task <IEnumerable <TransactionDTO> > Execute(PaymentModel payment)
        {
            var customer = await _paymentRepository.GetLastTransaction(payment.OrderId);

            var service = new ChargeService();

            var orderInfo = new PaymentModel {
                UserId = customer.UserId, VendorId = customer.VendorId, OrderId = customer.OrderId, Amount = customer.Amount
            };

            if (!customer.TransactionType.ToUpper().Equals(PaymentServiceConstants.PaymentType.Auth.ToString().ToUpper()))
            {
                throw new Exception("Server can not find auth transaction");//TODO: треба ще ексепшин хендлінг
            }
            var transaction = await _retryHelper.RetryIfThrown(async() =>
            {
                var result = await service.CaptureAsync(customer.ExternalId, null);
                return(_mappingProvider.GetMappingOperation(PaymentServiceConstants.PaymentMappingType.Stripe_Succeeded)
                       .Map(PaymentServiceConstants.PaymentType.Capture, orderInfo, result, result.Created));
            }, PaymentServiceConstants.PaymentType.Capture, orderInfo, PaymentServiceConstants.isSucceeded.Succeeded);

            return(await _paymentRepository.CreateTransactions(transaction));
        }