public static async Task <PaymentStatusOutput> CheckPaypal(string paymentOrderId) { PaymentStatusOutput output = new PaymentStatusOutput(); Uri uri = new Uri(paypalOrderCheck + "/" + paymentOrderId); HttpClientHandler handler = new HttpClientHandler(); HttpResponseMessage response = null; HttpClient client = new HttpClient(handler); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + await GenerateToken()); response = await client.GetAsync(uri).ConfigureAwait(false); string fullResponse = await response.Content.ReadAsStringAsync(); dynamic responseJson = JsonConvert.DeserializeObject(fullResponse); output.Id = responseJson.id; output.Status = responseJson.status; if (output.Status.Equals("APPROVED")) { output.PayerEmail = responseJson.payer.email_address; output.PayerGivenName = responseJson.payer.name.given_name; output.PayerSurname = responseJson.payer.name.surname; output.PayerId = responseJson.payer.payer_id; } return(output); }
public async Task <PaymentStatusOutput> CheckPaypalOrder([FromBody] PaymentStatusInput input) { PaymentStatusOutput output = new PaymentStatusOutput(); if (input == null) { output.Status = "INPUT_IS_NULL"; } else { Payment payment = _db.Payments.Where(e => e.Deleted == false && e.Id.Equals(input.PaymentId)).FirstOrDefault(); if (payment == null) { output.Status = "PAYMENT_DONE_OR_EXPIRED"; } else { output = await PaymentService.CheckPaypal(payment.MethodId); if (output.Status == "APPROVED") { List <PaymentItem> paymentItems = payment.PaymentItems.Where(e => e.Deleted == false).ToList(); List <OrderItem> orderItems = _db.Orders.Where(e => e.Id.Equals(payment.Order.Id) && e.Deleted == false).FirstOrDefault().OrderItems.Where(e => e.Deleted == false).ToList(); bool paidAll = true; if (payment.Status != 2) { foreach (PaymentItem item in paymentItems) { OrderItem tmpItem = orderItems.Where(e => e.Id.Equals(item.OrderItem.Id) && e.Deleted == false).FirstOrDefault(); double unpaidQuantity = tmpItem.Quantity - tmpItem.QuantityPaid; if (item.Quantity >= unpaidQuantity) { item.OrderItem.Status = 2; item.OrderItem.QuantityPaid += item.Quantity; } else { item.OrderItem.QuantityPaid += item.Quantity; } } payment.Status = 2; _db.SaveChanges(); } foreach (OrderItem item in payment.Order.OrderItems.Where(e => e.Deleted == false)) { if (item.Status == 1) { paidAll = false; } } if (paidAll) { payment.Order.Status = 2; _db.SaveChanges(); output.PaidAll = true; } else { output.PaidAll = false; } } } } return(output); }