public subscription_item_fixture() { SubscriptionItemCreateOptions = new StripeSubscriptionItemCreateOptions { SubscriptionId = Cache.GetSubscription().Id, // GetPlan() in the cache is used to create the original subscription // you cannot have a subscription item with the same plan as the original sub plan PlanId = Cache.GetPlan("bronze").Id, Quantity = 1, Metadata = new Dictionary <string, string>() { { "key", "value1" } } }; SubscriptionItemUpdateOptions = new StripeSubscriptionItemUpdateOptions { Quantity = 2, Metadata = new Dictionary <string, string>() { { "key", "value2" } } }; var service = new StripeSubscriptionItemService(Cache.ApiKey); SubscriptionItem = service.Create(SubscriptionItemCreateOptions); SubscriptionItemUpdated = service.Update(SubscriptionItem.Id, SubscriptionItemUpdateOptions); SubscriptionItemRetrieved = service.Get(SubscriptionItem.Id); SubscriptionItemList = service.List(new StripeSubscriptionItemListOptions { SubscriptionId = Cache.GetSubscription().Id }); }
public subscription_item_fixture() { SubscriptionItemCreateOptions = new StripeSubscriptionItemCreateOptions { SubscriptionId = Cache.GetSubscription().Id, // GetPlan() in the cache is used to create the original subscription // you cannot have a subscription item with the same plan as the original sub plan PlanId = Cache.GetPlan2().Id, Quantity = 1 }; SubscriptionItemUpdateOptions = new StripeSubscriptionItemUpdateOptions { Quantity = 2 }; var service = new StripeSubscriptionItemService(Cache.ApiKey); SubscriptionItem = service.Create(SubscriptionItemCreateOptions); SubscriptionItemUpdated = service.Update(SubscriptionItem.Id, SubscriptionItemUpdateOptions); SubscriptionItemRetrieved = service.Get(SubscriptionItem.Id); SubscriptionItemList = service.List(new StripeSubscriptionItemListOptions { SubscriptionId = Cache.GetSubscription().Id }); }
public StripeSubscriptionItemServiceTest() { this.service = new StripeSubscriptionItemService(); this.createOptions = new StripeSubscriptionItemCreateOptions() { PlanId = "plan_123", Quantity = 1, SubscriptionId = "sub_123", }; this.updateOptions = new StripeSubscriptionItemUpdateOptions() { Metadata = new Dictionary <string, string>() { { "key", "value" }, }, }; this.listOptions = new StripeSubscriptionItemListOptions() { Limit = 1, SubscriptionId = "sub_123", }; }
public async Task AdjustStorageAsync(IStorableSubscriber storableSubscriber, int additionalStorage, string storagePlanId) { var subscriptionItemService = new StripeSubscriptionItemService(); var subscriptionService = new StripeSubscriptionService(); var sub = await subscriptionService.GetAsync(storableSubscriber.GatewaySubscriptionId); if (sub == null) { throw new GatewayException("Subscription not found."); } var storageItem = sub.Items?.Data?.FirstOrDefault(i => i.Plan.Id == storagePlanId); if (additionalStorage > 0 && storageItem == null) { await subscriptionItemService.CreateAsync(new StripeSubscriptionItemCreateOptions { PlanId = storagePlanId, Quantity = additionalStorage, Prorate = true, SubscriptionId = sub.Id }); } else if (additionalStorage > 0 && storageItem != null) { await subscriptionItemService.UpdateAsync(storageItem.Id, new StripeSubscriptionItemUpdateOptions { PlanId = storagePlanId, Quantity = additionalStorage, Prorate = true }); } else if (additionalStorage == 0 && storageItem != null) { await subscriptionItemService.DeleteAsync(storageItem.Id); } if (additionalStorage > 0) { await PreviewUpcomingInvoiceAndPayAsync(storableSubscriber, storagePlanId, 400); } }
public void RetreiveSubscriptionItem(string Api_key, string Subscription_Item_Id, ref string Response, ref string Errors, ref int ErrorCode) { try { StripeConfiguration.SetApiKey(Api_key); var stripeSubscriptionItemService = new StripeSubscriptionItemService(); var stripeSubscriptionItem = stripeSubscriptionItemService.Get(Subscription_Item_Id); Response = stripeSubscriptionItem.StripeResponse.ResponseJson; ErrorCode = 0; } catch (StripeException e) { ErrorCode = 1; Serializer serializer = new Serializer(); StripeError stripeError = e.StripeError; Errors = serializer.Serialize <StripeError>(stripeError); } }
public void UpdateSubscriptionItem(string Api_Key, string Subscription_Item_Id, string stripeSubscriptionItemUpdateOptionsJSON, ref string Response, ref string Errors, ref int ErrorCode) { try { StripeConfiguration.SetApiKey(Api_Key); Serializer serializer = new Serializer(); var stripeSubscriptionItemUpdateOptions = serializer.Deserialize <StripeSubscriptionItemUpdateOptions>(stripeSubscriptionItemUpdateOptionsJSON); var stripeSubscriptionItemService = new StripeSubscriptionItemService(); var stripeSubscriptionItem = stripeSubscriptionItemService.Update(Subscription_Item_Id, stripeSubscriptionItemUpdateOptions); Response = stripeSubscriptionItem.StripeResponse.ResponseJson; ErrorCode = 0; } catch (StripeException e) { ErrorCode = 1; Serializer serializer = new Serializer(); StripeError stripeError = e.StripeError; Errors = serializer.Serialize <StripeError>(stripeError); } }
public async Task AdjustSeatsAsync(Guid organizationId, int seatAdjustment) { var organization = await _organizationRepository.GetByIdAsync(organizationId); if (organization == null) { throw new NotFoundException(); } if (string.IsNullOrWhiteSpace(organization.StripeCustomerId)) { throw new BadRequestException("No payment method found."); } if (string.IsNullOrWhiteSpace(organization.StripeSubscriptionId)) { throw new BadRequestException("No subscription found."); } var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == organization.PlanType); if (plan == null) { throw new BadRequestException("Existing plan not found."); } if (!plan.CanBuyAdditionalSeats) { throw new BadRequestException("Plan does not allow additional seats."); } var newSeatTotal = organization.Seats + seatAdjustment; if (plan.BaseSeats > newSeatTotal) { throw new BadRequestException($"Plan has a minimum of {plan.BaseSeats} seats."); } var additionalSeats = newSeatTotal - plan.BaseSeats; if (plan.MaxAdditionalSeats.HasValue && additionalSeats > plan.MaxAdditionalSeats.Value) { throw new BadRequestException($"Organization plan allows a maximum of " + $"{plan.MaxAdditionalSeats.Value} additional seats."); } if (!organization.Seats.HasValue || organization.Seats.Value > newSeatTotal) { var userCount = await _organizationUserRepository.GetCountByOrganizationIdAsync(organization.Id); if (userCount > newSeatTotal) { throw new BadRequestException($"Your organization currently has {userCount} seats filled. Your new plan " + $"only has ({newSeatTotal}) seats. Remove some users."); } } var invoiceService = new StripeInvoiceService(); var subscriptionItemService = new StripeSubscriptionItemService(); var subscriptionService = new StripeSubscriptionService(); var sub = await subscriptionService.GetAsync(organization.StripeSubscriptionId); if (sub == null) { throw new BadRequestException("Subscription not found."); } var seatItem = sub.Items?.Data?.FirstOrDefault(i => i.Plan.Id == plan.StripeSeatPlanId); if (seatItem == null) { await subscriptionItemService.CreateAsync(new StripeSubscriptionItemCreateOptions { PlanId = plan.StripeSeatPlanId, Quantity = additionalSeats, Prorate = true, SubscriptionId = sub.Id }); await PreviewUpcomingAndPayAsync(invoiceService, organization, plan); } else if (additionalSeats > 0) { await subscriptionItemService.UpdateAsync(seatItem.Id, new StripeSubscriptionItemUpdateOptions { PlanId = plan.StripeSeatPlanId, Quantity = additionalSeats, Prorate = true }); await PreviewUpcomingAndPayAsync(invoiceService, organization, plan); } else if (additionalSeats == 0) { await subscriptionItemService.DeleteAsync(seatItem.Id); } organization.Seats = (short?)newSeatTotal; await _organizationRepository.ReplaceAsync(organization); }