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}")); }
/// <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)); }
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" })); }
/// <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 }); } }