Reputation: 52318
I use the following to create a new Stripe connect account:
account = Stripe::Account.create({
type: 'express',
requested_capabilities: ['card_payments', 'transfers']
})
When the user clicks 'Connect with Stripe', they start entering their details. They can enter an American phone number, but not an American address - the country is locked to Australia, and clicking on 'Australia' to try to change it doesn't do anything at all:
Also, the 'State' field only shows Australian states:
Why is stripe making this restriction? I'm quite sure I've configured stripe correctly when setting it up, I suspect it's a problem with my code (something I'm doing or failing to do during Stripe::Account.create()
)?
I tried with requested_capabilities: ['card_payments']
, but:
Accounts do not currently support `card_payments` without `transfers`.
Please visit
https://stripe.com/docs/connect/account-capabilities#card-payments
for more details.
I tried with requested_capabilities: ['transfers']
, there was no error, but I could still only enter an Australian address.
I checked the settings in the platform dashboard, cannot spot anything unusual in settings, and confirmed that connect is configured to accept connected users from Australia + 35 other countries
Upvotes: 3
Views: 3781
Reputation: 1
Go to this link and select all the countries:
https://dashboard.stripe.com/settings/connect/onboarding-options/countries
Upvotes: 0
Reputation: 71
Yea, so the issue is that when you override the default capabilities being requested you need to specify the country, or it defaults to your platform country Instead of overriding the capabilities, consider changing the defaults for the countries in your connect settings If there's a specific reason you need to override, then you need to also specify the country
from
const stripeAccount = await stripe.accounts.create({
type: 'express',
email: userData.email,
//country: country,
capabilities: {
card_payments: { requested: true },
transfers: { requested: true },
},
});
change to
const stripeAccount = await stripe.accounts.create({
type: 'express',
email: userData.email,
});
Upvotes: 0
Reputation: 5125
For me I found that I had to present the user with a form to fill in the country first - before creating the Stripe Connect account for them.
Not having this option for the user lets Stripe choose the US as the connect account country by default, which is weird.
They should specify this in the docs or let the user choose the country in the connect onboarding flow, which is more ideal.
Upvotes: 2
Reputation: 89
In our case, the issue was the presence of the suggested_capabilities[]=transfers
URL parameter. Setting that caused only the US, Brazil, and Japan to be options. Even countries supporting transfers weren't showing up. That's unfortunate because that URL param is in the official onboarding docs for Stripe Connect Express.
So what worked was giving customers a URL like
https://connect.stripe.com/express/oauth/authorize?redirect_uri=https://our-site.com/stripe/connect&client_id=our_client_id&state=our_state
instead of
https://connect.stripe.com/express/oauth/authorize?redirect_uri=https://our-site.com/stripe/connect&client_id=our_client_id&state=our_state&suggested_capabilities[]=transfers
Upvotes: 2
Reputation: 52318
I heard back from Stripe support, but what they replied with contradicts @Afolabi's answer, and also contradicts what happens when the code is run in the rails console. So I have replied with extra info and will update this when I hear back.
Stripe say:
If you have a Standard and Express account then users will indicate the country their Stripe account is base from and for custom accounts, it is the platform who needs to indicate the country because custom accounts doesn't have a dashboard unlike Standard and Express Stripe accounts.
But all my attempts to generate an express
account without supplying a country result in the country defaulting to the 'US'
and the user cannot change it (so the best I can do at this stage is ensure the platform (i.e. my app) provides the country argument)
Here's a complete MRE of the problem:
require 'stripe'
Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
new_account = Stripe::Account.create({
type: 'express',
email: '[email protected]',
capabilities: {
card_payments: {requested: true},
transfers: {requested: true},
},
})
account_links = Stripe::AccountLink.create({
account: new_account.id,
refresh_url: 'http://localhost:3000/reauth',
return_url: 'http://localhost:3000/return',
type: 'account_onboarding',
})
# Visit url provided and see that country is locked to 'US',
# and it cannot be input by the user being onboarded like stripe
# support suggests should happen
Upvotes: 1
Reputation: 1948
I think v1 of Stripe API, should allow you to specify country. From what I saw in the Documentation, I think you should specify what you want.
POST /v1/accounts of StripeAPI Docs looks like this
require 'stripe'
Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Account.create({
type: 'custom',
country: 'US',
email: '[email protected]',
capabilities: {
card_payments: {requested: true},
transfers: {requested: true},
},
})
You may want to configure further. Let me know if specifying country doesn't fixed the issue. Read up from here. By virtue of what is in the API, country
is optional. Since you didn't specify, it defaults to your location.
As of today, Stripe Express supports Australia, Austria, Belgium, Bulgaria, Canada, Cyprus, the Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hong Kong, Hungary, Ireland, Italy, Japan, Latvia, Lithuania, Luxembourg, Malta, Mexico, the Netherlands, New Zealand, Norway, Poland, Portugal, Romania, Singapore, Slovakia, Slovenia, Spain, Sweden, Switzerland, the United Kingdom, or the United States. So you may decide which country you want to specify and put the ISO 3166-1 alpha-2 country code.
Upvotes: 3