Ejemplo n.º 1
0
        public IActionResult Create(int orderId)
        {
            var provider = _orderPaymentProviderFactory.GetProvider(PaymentProviders.Refah);
            var order    = _dbContext.Orders.Find(orderId);

            return(View((RefahPaymentRequestResult)provider.CreatePayment(orderId, order.TotalPriceSofre,
                                                                          GetDomain() + Url.Action("PostConfirm"))));
        }
Ejemplo n.º 2
0
        public async Task <OrderPayRequestResponse> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
        {
            var cartItems = GetCartItems(request.UserId);

            if (cartItems is null || !cartItems.Any())
            {
                return(UnKnownBecauseNoCartItemAvailableForThisUser());
            }
            var orderItems = CreateOrderItems(cartItems);

            try
            {
                _unitOfWork.Begin();

                var order = CreateOrder(request.UserId, orderItems);
                await _orderRepository.AddAsync(order);

                _unitOfWork.Commit();
                return(_paymentProviderFactory.GetProvider(request.PaymentStrategy).CreatePayment(order, request.ReturnUrl));
            }
            catch (Exception e)
            {
                _unitOfWork.RollBack();
                return(new OrderPayRequestResponse
                {
                    Status = ResponseStatus.Fail
                });
            }
        }
        public async Task <Response> Handle(ConfirmOrderPaymentCommand request, CancellationToken cancellationToken)
        {
            var order = await GetOrder(request);

            var res = _paymentProviderFactory.GetProvider(request.PaymentStrategy).Confirm(request.context, order);

            if (res.Status == ResponseStatus.Fail)
            {
                await UpdateOrderStatusAborted(order);

                return(Response.Failed("پرداخت ناموفق"));
            }
            await ClearUserCart(order.UserId);
            await ActivateOrderItemsForUser(order);
            await UpdateOrderStatusPaid(order);

            return(Response.Success());
        }