예제 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CancelSubscriptionResponse"/> class.
 /// </summary>
 /// <param name="errors">errors.</param>
 /// <param name="subscription">subscription.</param>
 public CancelSubscriptionResponse(
     IList <Models.Error> errors      = null,
     Models.Subscription subscription = null)
 {
     this.Errors       = errors;
     this.Subscription = subscription;
 }
예제 #2
0
 public ActionResult Create([Bind(Include = "CustomerName")] CustomerViewModel customer)
 {
     if (ModelState.IsValid)
     {
         // Instantiate class
         var csp = new Helpers.PartnerCenter();
         // Creat new customer
         string customerId  = csp.CreateCspCustomer(customer.CustomerName, CreateSubscription: true);
         var    newCustomer = new Models.Customer();
         newCustomer.OwnerId      = User.Identity.GetUserId();
         newCustomer.CustomerId   = customerId;
         newCustomer.CustomerName = customer.CustomerName;
         db.Customers.Add(newCustomer);
         // Create new subscription
         string subscriptionId  = csp.CreateCspSubscription(customerId);
         var    newSubscription = new Models.Subscription();
         newSubscription.CustomerId     = customerId;
         newSubscription.SubscriptionId = subscriptionId.ToLower();
         db.Subscriptions.Add(newSubscription);
         // Exit
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(Index());
 }
예제 #3
0
 public Models.Subscription CreatCorporateSubs(CorporApplicant a, int n, SubDuration s)
 {
     Models.Subscription subcorp = new Models.Subscription {
         App2 = a, NumberOfCopies = n, SubDuration = s
     };
     subsList.Add(subcorp);
     return(subcorp);
 }
예제 #4
0
 public Models.Subscription CreatIndividualSubs(IndApplicant a, int n, SubDuration s)
 {
     Models.Subscription subind = new Models.Subscription {
         App1 = a, NumberOfCopies = n, SubDuration = s
     };
     subsList.Add(subind);
     return(subind);
 }
예제 #5
0
        public void UpdateSubscription(SubscriptionDto pSubscriptionDto)
        {
            Models.Subscription subscriptionToModify = _paraContext.Subscriptions.Where(s => s.Year == pSubscriptionDto.Id).FirstOrDefault();

            subscriptionToModify.SubscriptionAmount = pSubscriptionDto.Amount;

            _paraContext.Subscriptions.Update(subscriptionToModify);
            _paraContext.SaveChanges();
        }
예제 #6
0
        public void DeleteSubscription(int id)
        {
            Models.Subscription subscriptionToSoftDelete = _paraContext.Subscriptions.Where(s => s.Year == id).FirstOrDefault();

            subscriptionToSoftDelete.IsActive = false;

            _paraContext.Subscriptions.Update(subscriptionToSoftDelete);
            _paraContext.SaveChanges();
        }
예제 #7
0
        public async Task <Uri> Create(Models.Subscription subscription)
        {
            HttpResponseMessage response = await client.PostAsJsonAsync(
                $"/Subscription/addsub", subscription);

            response.EnsureSuccessStatusCode();

            // return URI of the created resource.
            return(response.Headers.Location);
        }
예제 #8
0
        public IActionResult Subscribe(string cardEmail, string plan, string stripeToken)
        {
            var customerOptions = new CustomerCreateOptions
            {
                Email  = cardEmail,
                Source = stripeToken,
            };

            var customerService = new CustomerService();
            var customer        = customerService.Create(customerOptions);

            Models.Customer custToDb = new Models.Customer();
            custToDb.CustomerID    = customer.Id;
            custToDb.CustomerEmail = cardEmail;
            _database.Customers.Add(custToDb);
            _database.SaveChanges();

            var planId = _configuration["Stripe:Daily5"];

            if (plan == "Daily10")
            {
                planId = _configuration["Stripe:Daily10"];
            }

            var subscriptionOptions = new SubscriptionCreateOptions
            {
                Customer = customer.Id,
                Items    = new List <SubscriptionItemOptions>
                {
                    new SubscriptionItemOptions
                    {
                        Plan = planId
                    },
                },
            };

            subscriptionOptions.AddExpand("latest_invoice.payment_intent");

            var subscriptionService = new SubscriptionService();
            var subscription        = subscriptionService.Create(subscriptionOptions);

            Models.Subscription subs = new Models.Subscription();
            subs.SubID      = subscription.Id;
            subs.CustomerID = customer.Id;
            subs.PlanID     = planId;
            _database.Subscriptions.Add(subs);
            _database.SaveChanges();
            ViewBag.stripeKey    = _configuration["Stripe:PublishableKey"];
            ViewBag.subscription = subscription.ToJson();

            return(View("SubscribeResult"));
        }
예제 #9
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    // Create immediately a customer ID and a subscription for the new user
                    string customerName = user.Email;
                    string userId       = user.Id;
                    // Instantiate class
                    var csp = new Helpers.PartnerCenter();
                    // Create new customer
                    string customerId = await csp.CreateCspCustomerAsync(customerName, CreateSubscription : false);

                    var newCustomer = new Models.Customer();
                    newCustomer.OwnerId      = userId;
                    newCustomer.CustomerId   = customerId;
                    newCustomer.CustomerName = customerName;
                    db.Customers.Add(newCustomer);
                    // Create new subscription
                    string subscriptionId = await csp.CreateCspSubscriptionAsync(customerId);

                    var newSubscription = new Models.Subscription();
                    newSubscription.CustomerId     = customerId;
                    newSubscription.SubscriptionId = subscriptionId.ToLower();
                    db.Subscriptions.Add(newSubscription);

                    // Exit
                    db.SaveChanges();

                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
예제 #10
0
        public async Task <IActionResult> GetIntent(string subscriptionName)
        {
            string userId = "";

            try
            {
                // Il faut utiliser le Claim pour retrouver l'identifiant de l'utilisateur
                userId = User.Claims.Where(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").SingleOrDefault().Value;
            }
            catch (Exception)
            {
                return(BadRequest("No user found"));
            }

            AspNetUser user = _LoveMirroringcontext.AspNetUsers.Where(u => u.Id == userId).SingleOrDefault();

            Models.Subscription subscription = await _LoveMirroringcontext.Subscriptions.
                                               Where(s => s.SubscriptionName == subscriptionName).
                                               SingleOrDefaultAsync();

            if (subscription != null)
            {
                StripeConfiguration.ApiKey = Configuration["Stripe:ApiKey"];

                PaymentIntentCreateOptions options = new PaymentIntentCreateOptions
                {
                    // 10 chf = 1000 dans Stripe
                    Amount       = (long?)(subscription.SubscriptionPrice * 100),
                    Currency     = "chf",
                    ReceiptEmail = user.Email,
                    // Verify your integration in this guide by including this parameter
                    Metadata = new Dictionary <string, string>
                    {
                        { "integration_check", "accept_a_payment" },
                    },
                };
                options.Metadata.Add("SubscriptionName", subscription.SubscriptionName);
                options.Metadata.Add("UserName", user.Firstname + " " + user.LastName);
                options.Metadata.Add("UserId", userId);

                PaymentIntentService service       = new PaymentIntentService();
                PaymentIntent        paymentIntent = service.Create(options);

                return(Ok(paymentIntent));
            }
            else
            {
                return(BadRequest("No subscription price available"));
            }
        }
예제 #11
0
        public ActionResult ActivateSub(Models.Subscription subscription)
        {
            var postTask = httpClient.PostAsJsonAsync <Models.Subscription>(baseAddress + "ActivateSubscription/21", subscription);

            postTask.Wait();

            var result = postTask.Result;


            if (result.IsSuccessStatusCode)
            {
                return(RedirectToAction("GestionSubscription"));
            }
            return(View());
        }
예제 #12
0
        private void MakeNewSubscription(object obj)
        {
            string          name   = Name;
            string          add    = Address;
            string          email  = Email;
            string          phone  = Phone;
            string          title  = Title;
            string          mstop  = MailStop;
            string          cd     = CompanyDepartment;
            int             nocopy = NumberOfCopies;
            SubDuration     subdur = SubDuration;
            CorporApplicant app    = appcatalog.CreateCorpApplicant(name, add, email, phone, title, mstop, cd);

            Models.Subscription sub = subcatalog.CreatCorporateSubs(app, nocopy, subdur);
            List.Add(sub);
        }
예제 #13
0
        private void MakeNewSubscription(object obj)
        {
            string       name       = Name;
            string       add        = Address;
            string       email      = Email;
            string       phone      = Phone;
            string       cardholder = CardHolder;
            string       cardno     = CardNo;
            DateTime     expdate    = ExpDate;
            int          cvv        = Cvv;
            int          nocopy     = NumberOfCopies;
            SubDuration  subdur     = SubDuration;
            IndApplicant appind     = appcatalog.CreateIndApplicant(name, add, email, phone, cardholder, cardno, expdate, cvv);

            Models.Subscription sub = subcatalog.CreatIndividualSubs(appind, nocopy, subdur);
            List.Add(sub);
        }
예제 #14
0
        public async Task <ActionResult> CreateVMsConfirmed(Models.Subscription sub)
        {
            if (sub == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "No subscription passed on to the function to create vault"));
            }
            string       subscriptionId = sub.SubscriptionId;
            Subscription subscription   = db.Subscriptions.Find(subscriptionId);

            if (subscription == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "A valid Azure subscription could not be found"));
            }
            // Test auth is working
            string token = await Helpers.REST.getArmTokenAsync(subscription.CustomerId, UserAuth : true);

            if (token == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "ARM token could not be retrieved for customer " + subscription.CustomerId));
            }
            // Create ARM Resource Group and Recovery Services Vault
            string RgName = ModelTools.GetOfferingRGName("20ApacheVms") + ARM.RandomString(5);
            await ARM.createResourceGroupAsync(subscription.CustomerId, subscription.SubscriptionId, RgName, "westeurope");

            string VMId = await ARM.createVMsAsync(subscription.CustomerId, subscription.SubscriptionId, RgName, "testVM", "westeurope");

            int newServiceId = ModelTools.NextServiceId();

            Models.Service newService = new Models.Service()
            {
                //Id = newServiceId,
                SubscriptionId = subscription.SubscriptionId,
                OfferingId     = "20ApacheVms",
                Description    = "20 Apache VMs",
                ResourceId     = RgName
            };
            db.Services.Add(newService);
            db.SaveChanges();
            return(RedirectToAction("../Services/Index"));
        }
예제 #15
0
        public HttpResponseMessage Get(int id)
        {
            using (var client = new SubscriptionServiceClient())
            {
                var subscription = client.GetById(id);

                if (subscription == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Subscription id is not found"));
                }

                var result = new Models.Subscription
                {
                    Id                = subscription.Identifier,
                    Name              = subscription.Name,
                    Price             = subscription.Price,
                    Priceincvatamount = subscription.PriceIncVatAmount,
                    Callminutes       = subscription.CallMinutes
                };

                return(Request.CreateResponse(result));
            }
        }
 public RetrieveSubscriptionResponse(IList <Models.Error> errors      = null,
                                     Models.Subscription subscription = null)
 {
     Errors       = errors;
     Subscription = subscription;
 }
 public Builder Subscription(Models.Subscription subscription)
 {
     this.subscription = subscription;
     return(this);
 }
예제 #18
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());
            }
        }
 public UpdateSubscriptionRequest(Models.Subscription subscription = null)
 {
     Subscription = subscription;
 }
예제 #20
0
 public ActionResult ActivateSubs(Models.Subscription subscription)
 {
     ViewBag.StripePublishKey = ConfigurationManager.AppSettings["stripePublishableKey"];
     return(View());
 }
예제 #21
0
 public Builder Subscription(Models.Subscription value)
 {
     subscription = value;
     return(this);
 }