public async Task <ActionResult> ExecutePayment(PaymentExecuteVm model)
        {
            var accessToken = await GetAccessToken();

            var user = await RetrieveUser();

            //var currentUser = await _workContext.GetCurrentUser();
            Order order = _orderRepository.GetBy(user.Bills.Last().BillId);

            if (order == null)
            {
                return(NotFound());
            }

            //var order = orderCreateResult.Value;
            var payment = new Payment()
            {
                OrderId       = order.BillId,
                PaymentFee    = 1m,
                Amount        = order.BillTotal / 23000,
                PaymentMethod = "Paypal Express",
                CreatedOn     = DateTimeOffset.UtcNow,
            };

            var httpClient = _httpClientFactory.CreateClient();

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var paymentExecuteRequest = new PaymentExecuteRequest
            {
                payer_id = model.payerID
            };

            var response = await httpClient.PostAsJsonAsync($"https://api{PaypalExpressConfig.EnvironmentUrlPart}.paypal.com/v1/payments/payment/{model.paymentID}/execute", paymentExecuteRequest);

            var responseBody = await response.Content.ReadAsStringAsync();

            dynamic responseObject = JObject.Parse(responseBody);

            if (response.IsSuccessStatusCode)
            {
                // Has to explicitly declare the type to be able to get the propery
                string payPalPaymentId            = responseObject.id;
                ICollection <OrderItem> OrderItem = RetrieveOrderItem(order);
                OrderItem.ToList().ForEach(bl => bl.Validity = Validity.Valid);
                _userRepository.SaveChanges();
                //return RedirectToAction(nameof(CheckoutController.Thanks), "Checkout", new{ Id=order.BillId});
                return(Ok(new { Status = "success", OrderId = order.BillId }));
            }

            //payment.Status = PaymentStatus.Failed;
            //payment.FailureMessage = responseBody;
            //_paymentRepository.Add(payment);
            //order.OrderStatus = OrderStatus.PaymentFailed;
            //await _paymentRepository.SaveChangesAsync();

            string errorName        = responseObject.name;
            string errorDescription = responseObject.message;

            return(BadRequest($"{errorName} - {errorDescription}"));
        }
        public async Task <ActionResult> ExecutePayment(PaymentExecuteVm model)
        {
            var accessToken = await GetAccessToken();

            var currentUser = await _workContext.GetCurrentUser();

            var orderCreateResult = await _orderService.CreateOrder(currentUser, "PaypalExpress", OrderStatus.PendingPayment);

            if (!orderCreateResult.Success)
            {
                return(BadRequest(orderCreateResult.Error));
            }

            var order   = orderCreateResult.Value;
            var payment = new Payment()
            {
                OrderId       = order.Id,
                PaymentFee    = CalculatePaymentFee(order.OrderTotal),
                Amount        = order.OrderTotal + CalculatePaymentFee(order.OrderTotal),
                PaymentMethod = "Paypal Express",
                CreatedOn     = DateTimeOffset.UtcNow,
            };

            var httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var paymentExecuteRequest = new PaymentExecuteRequest
            {
                payer_id = model.payerID
            };

            var response = await httpClient.PostJsonAsync($"https://api{_setting.Value.EnvironmentUrlPart}.paypal.com/v1/payments/payment/{model.paymentID}/execute", paymentExecuteRequest);

            var responseBody = await response.Content.ReadAsStringAsync();

            dynamic responseObject = JObject.Parse(responseBody);

            if (response.IsSuccessStatusCode)
            {
                // Has to explicitly declare the type to be able to get the propery
                string payPalPaymentId = responseObject.id;
                payment.Status = PaymentStatus.Succeeded;
                payment.GatewayTransactionId = payPalPaymentId;
                _paymentRepository.Add(payment);
                await _paymentRepository.SaveChangesAsync();

                return(Ok(new { status = "success" }));
            }

            payment.Status         = PaymentStatus.Failed;
            payment.FailureMessage = responseBody;
            _paymentRepository.Add(payment);
            await _paymentRepository.SaveChangesAsync();

            string errorName        = responseObject.name;
            string errorDescription = responseObject.message;

            return(BadRequest($"{errorName} - {errorDescription}"));
        }
Пример #3
0
        /// <summary>
        /// Execute payment
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <IActionResult> ExecutePayment(PaymentExecuteVm model)
        {
            var response = await _paymentMethodManager.ExecutePaymentAsync(model);

            if (response.IsSuccess)
            {
                return(Ok(new { Status = "success", response.OrderId }));
            }

            return(BadRequest(response.Message));
        }
Пример #4
0
        public async Task <ActionResult> ExecutePayment(PaymentExecuteVm model)
        {
            var accessToken = await GetAccessToken();

            var httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var paymentExecuteRequest = new PaymentExecuteRequest
            {
                payer_id = model.payerID
            };

            var response = await httpClient.PostJsonAsync($"https://api.sandbox.paypal.com/v1/payments/payment/{model.paymentID}/execute", paymentExecuteRequest);

            var responseBody = await response.Content.ReadAsStringAsync();

            response.EnsureSuccessStatusCode();
            return(Ok(new { status = "success" }));
        }
        public async Task <ActionResult> ExecutePayment(PaymentExecuteVm model)
        {
            var accessToken = await GetAccessToken();

            var currentUser = await _workContext.GetCurrentUser();

            var order = await _orderService.CreateOrder(currentUser, "PaypalExpress");

            var httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var paymentExecuteRequest = new PaymentExecuteRequest
            {
                payer_id = model.payerID
            };

            var response = await httpClient.PostJsonAsync($"https://api{_setting.Value.EnvironmentUrlPart}.paypal.com/v1/payments/payment/{model.paymentID}/execute", paymentExecuteRequest);

            var responseBody = await response.Content.ReadAsStringAsync();

            response.EnsureSuccessStatusCode();
            dynamic payPalPayment = JObject.Parse(responseBody);
            // Has to explicitly declare the type to be able to get the propery
            string payPalPaymentId = payPalPayment.id;

            var payment = new Payment()
            {
                OrderId              = order.Id,
                Amount               = order.OrderTotal,
                PaymentMethod        = "Stripe",
                CreatedOn            = DateTimeOffset.UtcNow,
                GatewayTransactionId = payPalPaymentId
            };

            order.OrderStatus = Orders.Models.OrderStatus.Processing;
            _paymentRepository.Add(payment);
            await _paymentRepository.SaveChangesAsync();

            return(Ok(new { status = "success" }));
        }
Пример #6
0
        /// <summary>
        /// Execute payment
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <ResponsePaypal> ExecutePaymentAsync(PaymentExecuteVm model)
        {
            var userRequest = await _userManager.GetCurrentUserAsync();

            if (!userRequest.IsSuccess)
            {
                return(new ResponsePaypal {
                    Message = "User not Found", IsSuccess = false
                });
            }
            var orderRequest = await _orderProductService.GetOrderByIdAsync(model.OrderId);

            if (!orderRequest.IsSuccess)
            {
                return(new ResponsePaypal {
                    Message = "Order not Found", IsSuccess = false
                });
            }
            var order       = orderRequest.Result;
            var accessToken = await GetAccessTokenAsync();

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                var paymentExecuteRequest = new PaymentExecuteRequest {
                    PayerId = model.PayerId
                };

                var response = await httpClient.PostJsonAsync(
                    $"https://api{_payPalOptions.Value.EnvironmentUrlPart}.paypal.com/v1/payments/payment/{model.PaymentId}/execute",
                    paymentExecuteRequest);

                var responseBody = await response.Content.ReadAsStringAsync();

                dynamic responseObject = JObject.Parse(responseBody);
                var     payment        = new Payment
                {
                    PaymentMethodId      = "Paypal",
                    GatewayTransactionId = model.PaymentId,
                    PaymentStatus        = PaymentStatus.Failed,
                    Total          = order.Total,
                    UserId         = userRequest.Result.Id,
                    FailureMessage = responseBody
                };

                if (response.IsSuccessStatusCode)
                {
                    await _orderProductService.ChangeOrderStateAsync(model.OrderId, OrderState.PaymentReceived);

                    payment.PaymentStatus = PaymentStatus.Succeeded;
                    await _paymentService.AddPaymentAsync(model.OrderId, payment);

                    return(new ResponsePaypal
                    {
                        Message = "Payment received",
                        OrderId = model.OrderId,
                        IsSuccess = true
                    });
                }

                await _orderProductService.ChangeOrderStateAsync(model.OrderId, OrderState.PaymentFailed);

                payment.PaymentStatus = PaymentStatus.Failed;
                await _paymentService.AddPaymentAsync(model.OrderId, payment);

                string errorName        = responseObject.name;
                string errorDescription = responseObject.message;
                return(new ResponsePaypal {
                    Message = $"{errorName} - {errorDescription}", IsSuccess = false
                });
            }
        }