Пример #1
0
        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);
        }
Пример #2
0
        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);
        }