public async Task <OrderSuspendViewModel> SuspendOrder(CheckoutInfoInput checkoutInfoInput) { var basket = await _basketService.Get(); var orderCreateInput = new OrderCreateInput() { BuyerId = _sharedIdentityService.GetUserId, Address = new AddressCreateInput() { Province = checkoutInfoInput.Province, District = checkoutInfoInput.District, Street = checkoutInfoInput.Street, ZipCode = checkoutInfoInput.ZipCode, Line = checkoutInfoInput.Line } }; basket.BasketItems.ForEach(x => { orderCreateInput.OrderItems.Add(new OrderItemCreateInput() { ProductId = x.CourseId, Price = x.GetCurrentPrice, PictureUrl = "", ProductName = x.CourseName }); }); var paymentInfoInput = new PaymentInfoInput() { CardName = checkoutInfoInput.CardName, CardNumber = checkoutInfoInput.CardNumber, Expiration = checkoutInfoInput.Expiration, CVV = checkoutInfoInput.CVV, TotalPrice = basket.TotalPrice, Order = orderCreateInput }; var responsePayment = await _paymentService.ReveivePayment(paymentInfoInput); if (!responsePayment) { return(new OrderSuspendViewModel() { Error = "Ödeme alınamadı", IsSuccessful = false }); } await _basketService.Delete(); return(new OrderSuspendViewModel() { IsSuccessful = true }); }
public async Task <OrderCreatedViewModel> CreateOrder(CheckOutInfoInput checkOutInfoInput) { var basket = await _basketService.Get(); var paymentInfoInput = new PaymentInfoInput() { CardName = checkOutInfoInput.CardName, CardNumber = checkOutInfoInput.CardNumber, Expiration = checkOutInfoInput.Expiration, CVV = checkOutInfoInput.CVV, TotalPrice = basket.TotalPrice }; var responsePayment = await _paymentService.ReceivePayment(paymentInfoInput); if (!responsePayment) { return(new OrderCreatedViewModel() { Error = "Ödeme alınamadı.", IsSuccessful = false }); } var orderCreateInput = new OrderCreateInput() { BuyerId = _sharedIdentityService.GetUserId, Address = new AddressCreateInput { Province = checkOutInfoInput.Province, District = checkOutInfoInput.District, Street = checkOutInfoInput.Street, Line = checkOutInfoInput.Line, ZipCode = checkOutInfoInput.ZipCode }, }; basket.BasketItems.ForEach(x => { var orderItem = new OrderItemCreateInput { ProductId = x.CourseId, Price = x.GetCurrentPrice, PictureUrl = "", ProductName = x.CourseName }; orderCreateInput.OrderItems.Add(orderItem); }); var response = await _httpClient.PostAsJsonAsync <OrderCreateInput>("orders", orderCreateInput); if (!response.IsSuccessStatusCode) { return(new OrderCreatedViewModel() { Error = "Sipariş oluşturulamadı", IsSuccessful = false }); } var orderCreatedViewModel = await response.Content.ReadFromJsonAsync <Response <OrderCreatedViewModel> >(); orderCreatedViewModel.Data.IsSuccessful = true; await _basketService.Delete(); return(orderCreatedViewModel.Data); }
public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input) { var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId()); if (tenant.EditionId == null) { throw new UserFriendlyException(L("TenantEditionIsNotAssigned")); } var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value); var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value); decimal additionalPrice = 0; if (input.UpgradeEditionId.HasValue) { var remainingHoursCount = tenant.CalculateRemainingHoursCount(); if (remainingHoursCount > 0) { var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync(tenant.Id, null, null); if (lastPayment == null || !lastPayment.PaymentPeriodType.HasValue) { throw new ApplicationException("There is no completed payment record !"); } additionalPrice = TenantManager .GetUpgradePrice( currentEdition, targetEdition, remainingHoursCount, lastPayment.PaymentPeriodType.Value ); } } var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition); return(new PaymentInfoDto { Edition = edition, AdditionalPrice = additionalPrice }); }
public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input) { var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId()); if (tenant.EditionId == null) { throw new UserFriendlyException(L("TenantEditionIsNotAssigned")); } var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value); var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value); decimal additionalPrice = 0; if (input.UpgradeEditionId.HasValue) { var remainingDaysCount = tenant.CalculateRemainingDayCount(); if (remainingDaysCount > 0) { additionalPrice = TenantManager .GetUpgradePrice( currentEdition, targetEdition, remainingDaysCount ); } } var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition); await SetAdditionalDataForPaymentGateways(edition); return(new PaymentInfoDto { Edition = edition, AdditionalPrice = additionalPrice }); }
public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input) { var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId()); if (tenant.EditionId == null) { throw new UserFriendlyException(L("TenantEditionIsNotAssigned")); } var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value); var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value); decimal additionalPrice = 0; if (input.UpgradeEditionId.HasValue) { var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync( tenantId : AbpSession.GetTenantId(), gateway : null, isRecurring : null); using (UnitOfWorkManager.Current.SetTenantId(null)) { additionalPrice = await CalculateAmountForPaymentAsync(targetEdition, lastPayment.PaymentPeriodType, EditionPaymentType.Upgrade, tenant); } } var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition); return(new PaymentInfoDto { Edition = edition, AdditionalPrice = additionalPrice }); }
public async Task <bool> ReceivePayment(PaymentInfoInput paymentInfoInput) { var response = await _httpClient.PostAsJsonAsync <PaymentInfoInput>("fakepayment", paymentInfoInput); return(response.IsSuccessStatusCode); }
public async Task <PaymentInfoOutput> PayRestByOrderId([FromBody] PaymentInfoInput input) { PaymentInfoOutput output = new PaymentInfoOutput(); if (input == null) { output.Result = "INPUT_IS_NULL"; } else { if (string.IsNullOrEmpty(input.OrderId)) { output.Result = "INPUT_IS_NULL"; } else { Order order = _db.Orders.Where(e => e.Id.Equals(input.OrderId) && e.Deleted == false).FirstOrDefault(); if (order == null) { output.Result = "ORDER_DOES_NOT_EXIST"; } else { if (order.Status == 1) { List <OrderItem> orderItems = order.OrderItems.Where(e => e.Deleted == false).ToList(); List <PaymentItem> paymentItems = new List <PaymentItem>(); decimal sum = 0; foreach (OrderItem item in orderItems.Where(e => e.Status == 1)) { PaymentItem pItem = new PaymentItem() { OrderItem = orderItems.Where(e => e.Id.Equals(item.Id)).FirstOrDefault(), Quantity = item.Quantity - item.QuantityPaid }; sum += item.UnitPrice * (decimal)(item.Quantity - item.QuantityPaid); paymentItems.Add(pItem); _db.PaymentItems.Add(pItem); } if (sum > 0) { PaymentServiceOutput paymentService = await PaymentService.InitPaypalAsync(sum); Payment newPayment = new Payment() { Amount = sum, Status = 1, Order = order, Method = "PAYPAL", MethodId = paymentService.PaymentId }; newPayment.PaymentItems = paymentItems; _db.Payments.Add(newPayment); _db.SaveChanges(); output.Amount = sum; output.Result = "OK"; output.PaymentId = newPayment.Id; output.PaymentLink = paymentService.PaymentLink; string[] urlFrag = Request.GetDisplayUrl().Split('/'); output.PaymentLinkQR = urlFrag[0] + "//" + urlFrag[2] + "/qrcode/" + QRCodeService.GenerateQRCode(_hostingEnvironment, output.PaymentLink); } else { order.Status = 2; _db.SaveChanges(); output.Amount = sum; output.Result = "PAID"; } } else { output.Result = "PAID_OR_EXPIRED"; } } } } return(output); }