public async Task CreateCustomerAsync(string nativePaymentMethodId, TKey subscriptionId)
        {
            var subscription = await _subscriptionManager.FindByIdAsync(subscriptionId);

            var tenant = await _tenantManager.FindByIdAsync(subscription.TenantId);

            var addresses = await _addressProfileManager.FindByTenantIdAsync(tenant.Id);

            TAddressProfile address = null;

            foreach (var addr in addresses)
            {
                var userAddress = addr.UserAddresses.FirstOrDefault();

                if (userAddress.AddressType == DaAddressType.Billing)
                {
                    address = addr;
                    break;
                }
            }

            if (address == null)
            {
                address = addresses.FirstOrDefault();
            }

            if (address == null)
            {
                throw new InvalidOperationException("No address found.");
            }

            var country = await _countryManager.FindByIdAsync(tenant.CountryId);

            var addressOption = new AddressOptions()
            {
                Line1      = address.Address1,
                Line2      = address.Address2,
                Country    = country.Name,
                PostalCode = address.ZipCode,
                State      = address.State,
                City       = address.City
            };

            var options = new CustomerCreateOptions
            {
                PaymentMethod = nativePaymentMethodId,
                Email         = tenant.BillingEmail,
                Name          = tenant.Name,
                Address       = addressOption
            };

            var service  = new CustomerService();
            var customer = await service.CreateAsync(options);

            var tenantAttribute = tenant.Attributes.Where(m => m.AttributeName == "StripeCustomerId").SingleOrDefault();

            bool newAttribute = false;

            if (tenantAttribute == null)
            {
                tenantAttribute = new TTenantAttribute()
                {
                    Tenant         = tenant,
                    AttributeName  = "StripeCustomerId",
                    CreatedDateUtc = DateTime.UtcNow
                };

                newAttribute = true;
            }

            tenantAttribute.AttributeValue     = customer.Id;
            tenantAttribute.LastUpdatedDateUtc = DateTime.UtcNow;

            if (newAttribute)
            {
                if (tenant.Attributes == null)
                {
                    tenant.Attributes = new List <TTenantAttribute>();
                }

                tenant.Attributes.Add(tenantAttribute);
            }

            await _tenantManager.UpdateAsync(tenant);
        }