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); }