示例#1
0
        public SubscriptionItemServiceTest()
        {
            this.service = new SubscriptionItemService();

            this.createOptions = new SubscriptionItemCreateOptions
            {
                PlanId         = "plan_123",
                Quantity       = 1,
                SubscriptionId = "sub_123",
            };

            this.updateOptions = new SubscriptionItemUpdateOptions
            {
                Metadata = new Dictionary <string, string>
                {
                    { "key", "value" },
                },
            };

            this.listOptions = new SubscriptionItemListOptions
            {
                Limit          = 1,
                SubscriptionId = "sub_123",
            };
        }
示例#2
0
        public SubscriptionItemServiceTest(
            StripeMockFixture stripeMockFixture,
            MockHttpClientFixture mockHttpClientFixture)
            : base(stripeMockFixture, mockHttpClientFixture)
        {
            this.service = new SubscriptionItemService(this.StripeClient);

            this.createOptions = new SubscriptionItemCreateOptions
            {
                Plan         = "plan_123",
                Quantity     = 1,
                Subscription = "sub_123",
            };

            this.deleteOptions = new SubscriptionItemDeleteOptions
            {
                ClearUsage = true,
            };

            this.updateOptions = new SubscriptionItemUpdateOptions
            {
                Metadata = new Dictionary <string, string>
                {
                    { "key", "value" },
                },
            };

            this.listOptions = new SubscriptionItemListOptions
            {
                Limit        = 1,
                Subscription = "sub_123",
            };
        }
示例#3
0
        public async Task <SubscriptionItem> UpdateSubscriptionItemMetaData(string subscriptionItemId, Dictionary <string, string> metadata)
        {
            var service  = new SubscriptionItemService();
            var response = await service.UpdateAsync(subscriptionItemId, new SubscriptionItemUpdateOptions
            {
                Metadata = metadata
            });

            return(response);
        }
 public StripePaymentProcessor(StripeSettings settings, Plans plans, ILogger <StripePaymentProcessor> logger)
 {
     RequestOptions = new RequestOptions()
     {
         ApiKey = settings.SecretKey
     };
     Customers         = new CustomerService();
     Subscriptions     = new SubscriptionService();
     SubscriptionItems = new SubscriptionItemService();
     Sources           = new SourceService();
     this.plans        = plans;
     this.logger       = logger;
 }
 public SubscriptionService(
     StripeSubscriptionItemService stripeSubscriptionItemService,
     StripeSubscriptionService subscriptionService,
     IStripeService stripeService,
     IServiceProvider serviceProvider,
     ILogger <SubscriptionService> logger) : base(serviceProvider)
 {
     _stripeSubscriptionItemService = stripeSubscriptionItemService;
     _subscriptionService           = subscriptionService;
     _stripeService          = stripeService;
     _logger                 = logger;
     _organizationRepository = UnitOfWork.RepositoryAsync <Organization>();
     _plans          = UnitOfWork.RepositoryAsync <StripePlan>();
     _itemRepository = UnitOfWork.RepositoryAsync <StripeSubscriptionItem>();
 }
        public SubscriptionItemServiceTest(
            StripeMockFixture stripeMockFixture,
            MockHttpClientFixture mockHttpClientFixture)
            : base(stripeMockFixture, mockHttpClientFixture)
        {
            this.service = new SubscriptionItemService(this.StripeClient);

            this.createOptions = new SubscriptionItemCreateOptions
            {
                PriceData = new SubscriptionItemPriceDataOptions
                {
                    Currency  = "usd",
                    Product   = "prod_123",
                    Recurring = new SubscriptionItemPriceDataRecurringOptions
                    {
                        Interval      = "day",
                        IntervalCount = 15,
                    },
                    UnitAmountDecimal = 0.01234567890m, // Ensure decimals work
                },
                Quantity     = 1,
                Subscription = "sub_123",
            };

            this.deleteOptions = new SubscriptionItemDeleteOptions
            {
                ClearUsage = true,
            };

            this.updateOptions = new SubscriptionItemUpdateOptions
            {
                Metadata = new Dictionary <string, string>
                {
                    { "key", "value" },
                },
            };

            this.listOptions = new SubscriptionItemListOptions
            {
                Limit        = 1,
                Subscription = "sub_123",
            };
        }
示例#7
0
        public async Task AdjustStorageAsync(IStorableSubscriber storableSubscriber, int additionalStorage,
                                             string storagePlanId)
        {
            var subscriptionItemService = new SubscriptionItemService();
            var subscriptionService     = new SubscriptionService();
            var sub = await subscriptionService.GetAsync(storableSubscriber.GatewaySubscriptionId);

            if (sub == null)
            {
                throw new GatewayException("Subscription not found.");
            }

            Func <bool, Task <SubscriptionItem> > subUpdateAction = null;
            var storageItem    = sub.Items?.FirstOrDefault(i => i.Plan.Id == storagePlanId);
            var subItemOptions = sub.Items.Where(i => i.Plan.Id != storagePlanId)
                                 .Select(i => new InvoiceSubscriptionItemOptions
            {
                Id       = i.Id,
                PlanId   = i.Plan.Id,
                Quantity = i.Quantity,
            }).ToList();

            if (additionalStorage > 0 && storageItem == null)
            {
                subItemOptions.Add(new InvoiceSubscriptionItemOptions
                {
                    PlanId   = storagePlanId,
                    Quantity = additionalStorage,
                });
                subUpdateAction = (prorate) => subscriptionItemService.CreateAsync(
                    new SubscriptionItemCreateOptions
                {
                    PlanId         = storagePlanId,
                    Quantity       = additionalStorage,
                    SubscriptionId = sub.Id,
                    Prorate        = prorate
                });
            }
            else if (additionalStorage > 0 && storageItem != null)
            {
                subItemOptions.Add(new InvoiceSubscriptionItemOptions
                {
                    Id       = storageItem.Id,
                    PlanId   = storagePlanId,
                    Quantity = additionalStorage,
                });
                subUpdateAction = (prorate) => subscriptionItemService.UpdateAsync(storageItem.Id,
                                                                                   new SubscriptionItemUpdateOptions
                {
                    PlanId   = storagePlanId,
                    Quantity = additionalStorage,
                    Prorate  = prorate
                });
            }
            else if (additionalStorage == 0 && storageItem != null)
            {
                subItemOptions.Add(new InvoiceSubscriptionItemOptions
                {
                    Id      = storageItem.Id,
                    Deleted = true
                });
                subUpdateAction = (prorate) => subscriptionItemService.DeleteAsync(storageItem.Id);
            }

            var invoicedNow = false;

            if (additionalStorage > 0)
            {
                invoicedNow = await PreviewUpcomingInvoiceAndPayAsync(
                    storableSubscriber, storagePlanId, subItemOptions, 400);
            }

            await subUpdateAction(!invoicedNow);
        }