Ejemplo n.º 1
0
 public PaymentOptionDTO CreatePaymentOption(Models.PaymentMethod paymentMethod, SubmitOrderRequest request)
 {
     return(new PaymentOptionDTO()
     {
         PaymentOptionName = paymentMethod.ShortClassName,
         PONumber = request?.PaymentMethod?.Invoice
     });
 }
Ejemplo n.º 2
0
        public async Task <IActionResult> Index()
        {
            //using (Stream iStream = Request.InputStream)
            //{
            //    using (StreamReader reader = new StreamReader(iStream, Encoding.UTF8))   //you should use   Request.ContentEncoding
            //    {
            //        json = await reader.ReadToEndAsync();
            //    }
            //}
            var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();

            try
            {
                var stripeEvent = EventUtility.ParseEvent(json);
                if (stripeEvent.Type == Events.CustomerCreated)
                {
                    Customer cus = stripeEvent.Data.Object as Customer;

                    Models.Customer customer = new Models.Customer();
                    customer.CustomerID = cus.Id;
                    customer.Name       = cus.Name;
                    customer.Email      = cus.Email;
                    customer.Balance    = (int)cus.Balance;
                    customer.CreatedAt  = DateTime.Now;
                    customer.UpdatedAt  = DateTime.Now;
                    try
                    {
                        Database.Add(customer);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.CustomerSubscriptionCreated)
                {
                    Subscription sub            = stripeEvent.Data.Object as Subscription;
                    Price        price          = sub.Items.Data[0].Price;
                    int          amount         = (int)price.UnitAmount;
                    string       subscriptionId = sub.Items.Data[0].Subscription;


                    //Models.Customer customer = Database.Customers.SingleOrDefault(x => x.CustomerID == "cus_IhyVFRJRWlxfwh");
                    //customer.Balance = customer.Balance - amount;
                    //customer.UpdatedAt = DateTime.Now;

                    Models.Subscription subscription = new Models.Subscription();
                    subscription.SubscriptionID = subscriptionId;
                    subscription.CustomerID     = "cus_IhyVFRJRWlxfwh";
                    subscription.UnitAmount     = amount;
                    subscription.CreatedAt      = DateTime.Now;
                    subscription.UpdatedAt      = DateTime.Now;

                    //Models.Transaction transaction = new Models.Transaction();
                    //transaction.CustomerID = "cus_IhyVFRJRWlxfwh";
                    //transaction.Description = Events.CustomerSubscriptionCreated;
                    //transaction.Amount = amount;
                    //transaction.CreatedAt = DateTime.Now;

                    try
                    {
                        //Database.Customers.Update(customer);
                        Database.Add(subscription);
                        //Database.Add(transaction);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.CustomerSubscriptionUpdated)
                {
                    Subscription        sub            = stripeEvent.Data.Object as Subscription;
                    Price               price          = sub.Items.Data[0].Price;
                    int                 amount         = (int)price.UnitAmount;
                    string              subscriptionId = sub.Items.Data[0].Subscription;
                    Models.Subscription subscription   = Database.Subscriptions.SingleOrDefault(x => x.SubscriptionID == subscriptionId);

                    subscription.UnitAmount = amount;
                    subscription.UpdatedAt  = DateTime.Now;


                    try
                    {
                        Database.Subscriptions.Update(subscription);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.CustomerSubscriptionDeleted)
                {
                    Subscription        sub            = stripeEvent.Data.Object as Subscription;
                    string              subscriptionId = sub.Items.Data[0].Subscription;
                    Models.Subscription subscription   = Database.Subscriptions.SingleOrDefault(x => x.SubscriptionID == subscriptionId);
                    try
                    {
                        Database.Remove(subscription);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.PaymentMethodAttached)
                {
                    Models.PaymentMethod paymentMethod = new Models.PaymentMethod();
                    PaymentMethod        method        = stripeEvent.Data.Object as PaymentMethod;
                    paymentMethod.PaymentMethodID = method.Id;
                    paymentMethod.Brand           = method.Card.Brand;
                    paymentMethod.Last4           = Int32.Parse(method.Card.Last4);
                    paymentMethod.CreatedAt       = DateTime.Now;
                    paymentMethod.UpdatedAt       = DateTime.Now;
                    paymentMethod.CustomerID      = "cus_IhyVFRJRWlxfwh";
                    try
                    {
                        Database.Add(paymentMethod);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.PaymentMethodDetached)
                {
                    PaymentMethod        method          = stripeEvent.Data.Object as PaymentMethod;
                    string               paymentMethodID = method.Id;
                    Models.PaymentMethod paymentMethod   = Database.PaymentMethods.SingleOrDefault(x => x.PaymentMethodID == paymentMethodID);

                    try
                    {
                        Database.Remove(paymentMethod);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.PaymentMethodUpdated)
                {
                    PaymentMethod        method          = stripeEvent.Data.Object as PaymentMethod;
                    string               paymentMethodID = method.Id;
                    Models.PaymentMethod paymentMethod   = Database.PaymentMethods.SingleOrDefault(x => x.PaymentMethodID == paymentMethodID);

                    paymentMethod.Last4     = Int32.Parse(method.Card.Last4);
                    paymentMethod.Brand     = method.Card.Brand;
                    paymentMethod.UpdatedAt = DateTime.Now;

                    try
                    {
                        Database.PaymentMethods.Update(paymentMethod);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.ChargeSucceeded)
                {
                    Charge charge = stripeEvent.Data.Object as Charge;
                    int    amount = (int)charge.Amount;

                    Models.Customer customer = Database.Customers.SingleOrDefault(x => x.CustomerID == "cus_IhyVFRJRWlxfwh");
                    customer.Balance   = customer.Balance - amount;
                    customer.UpdatedAt = DateTime.Now;

                    Models.Transaction transaction = new Models.Transaction();
                    transaction.CustomerID  = "cus_IhyVFRJRWlxfwh";
                    transaction.Description = Events.ChargeSucceeded;
                    transaction.Amount      = amount;
                    transaction.CreatedAt   = DateTime.Now;

                    try
                    {
                        Database.Customers.Update(customer);
                        Database.Add(transaction);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else if (stripeEvent.Type == Events.ChargeFailed)
                {
                    Charge             charge      = stripeEvent.Data.Object as Charge;
                    int                amount      = 0;
                    Models.Transaction transaction = new Models.Transaction();
                    transaction.CustomerID  = "cus_IhyVFRJRWlxfwh";
                    transaction.Description = Events.ChargeFailed;
                    transaction.Amount      = amount;
                    transaction.CreatedAt   = DateTime.Now;
                    try
                    {
                        Database.Add(transaction);
                        Database.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        return(BadRequest());
                    }
                }
                else
                {
                    Console.WriteLine("Unhandled event type: {0}", stripeEvent.Type);
                }
                return(Ok());
            }
            catch (Exception e)
            {
                return(BadRequest());
            }
        }