#mesudev-authorizations
1 messages ยท Page 1 of 1 (latest)
hi there, can you share more about why you need authorizations to last more than 7 days?
Hi, cheers!
It's not that I need it. But it would make the booking of the service of my platform more user-friendly. Services of my platform are always authorized only at the moment of the booking, and captured after the service has been provided. The consequence of this is that the system currently only allows the clients to book a service a little less than 7 days in advance.
And well for the service the platform users provide, it's quite usual to book up to sth like 2 weeks in advance
hmmm, are you in the travel industry?
nope
but my previous psp was for travel agencies indeed
my previous payment service provider = the previous API that I integrated in my platform
as I know that travel platforms are a problem at Stripe, so no worries
what's the max interval that your customers will book in advance?
oh sorry interval
or timing ๐
I would say 3 weeks in advance max, if I could provide that possibility, that would be perfect
imagine a gaussian distribution with max at 1.5 weeks
in advance
pretty much my scenario
hmmm, i would say there's two options here :
- create a new authorization before releasing the old one. This ensures that you have a guaranteed auth (assuming it succeeds) before releasing the previous one. If it does not succeed you can decide between taking the risk or charging anyway.
- use separate charges and transfers like you mentioned before
gotcha, for 1); wouldn't you need the client to re-authenticate`
?
If not, then 1) is definitely the preferrable solution, as I've setup the entire system using destination charges ๐
It pretty much depends on the issuing bank. If you do 1) then remember to pass off_session=true
https://stripe.com/docs/api/payment_intents/create#create_payment_intent-off_session
Hmm can you elaborate that a little further?
Like, when a client's credit card requires 3D secure upon every payment authorization. Can I re-authorize a payment that has already been authorized by that client, without triggering 3D - secure? Hence, only via backend? What's the risk here, in how many cases would you estimate that this woudl fail?
whether the client needs to re-authenticate is up to the issuing bank, it's not within Stripe's control. But what you can do is to include the off_session=true when creating the PaymentIntent to indicate that the Customer is off session and to reduce the chances of needing the bring the Customer back on session to authenticate
i don't have any percentages to share here and it's a risk when using 1)
aaah but I actually checked now that confirm => true
must be used in the payment intent call when using off_session => true
So this breaks the entire auth logic I've built using js stripe.confirmCardPayment()
to clarify, when i say use off_session=true - this is when you create a new (subsequent) authorization
not for the first time
yes I understand. But I mean if you can't tell me how big / small the risk is, the risk is too big for me ^^
so your original logic is still fine
I understand that it's up to the bank, as you said
Do you see any particular drawbacks / things that I should pay attention to when switching to separate charges and transfer from destination charges?
Cause that will probably be the next move
hrm, are all of your connected accounts in the same region?
no, that's the problem
are you a US platform?
even different countries
a to-be-international-platform
so it can occur that the customer vs platform vs connected account are all in a different country
mostly customer and connected account will be in the same
are you the platform, based in US?
no switzerland
hrm, this is a problem then, separate charges and transfers won't work at all
so because you're not a US platform, and will have international connected accounts - you would want to implement destination charges with on_behalf_of
you would control the connected account payout schedule, to only payout when you want to
in that sense, it's kinda like separate charges and transfers
does this make sense?
uuuhm
by "payout" here you mean transfer the service provider's amount from the platform's stripe balance to the concerned connected account's balance?
payout : transfer (a.k.a movement of funds) from the connected account's balance to their bank account/debit card
so what you're aiming at is making the funds stay as long as possible within stripe in case of eventual refunds, to not need to account for payout fees in case of reverse transfers. Is that what you're saying?
to kind of reach the same as with authorize and capture, do I get ya correctly?
yep, that's pretty much it. Because your customer books up to only 3 weeks in advance, you can totally leave that amount in the connected account's Stripe balance till the service/goods is fulfilled
then when it's done/fulfilled, you can create a payout for the connected account
But how can I control the payout moment ? AFAIK, you can only specify payout moments at an account-basis when creating connected accounts. Not when creating payment intents, no?
https://stripe.com/docs/api/payouts/create and use the Stripe-Account header (https://stripe.com/docs/connect/authentication)
you should set https://stripe.com/docs/api/accounts/object#account_object-settings-payouts-schedule-interval to manual too
ok that means that funds are kicked directly from the platforms' stripe balance into the connected accounts bank account??
with destination charges - the funds are automatically transferred from the platform balance to the connected account's balance i.e. platform balance -> connected account balance
that's why you specify the transfer_data.destination in the PaymentIntent when creating a destination charge
for a payout on the connected account, what you're doing is ensuring that funds move from the **connected account's Stripe balance -> their bank account/debit card **
yup got that
How can I then get the ID that I need to specify for the payout? I can't find that in the docs; is that somehow tied to a connected account object?
I mean the destination for a payout*
that ID is the connected account's bank account / debit card object id. You don't necessarily need to specify it
as it mentions, if you don't specify it, it will payout to the default bank account / debit card
it's really only useful if you want to allow your connected account to select which bank account / debit card to payout to (assuming they have multiple)
but I'm missing sth
How does your API know to which connected account the payout refers to??
you use the Stripe-Account header (https://stripe.com/docs/connect/authentication) to indicate which connected account you're creating the payout on
I see no "connected_account_id" parameter or whatsoever in the payouts API
So what you mean is doing this
with the payouts API call
so sth like this:
$stripe->payouts->create([ 'amount' => 1100, 'currency' => 'chf', ], ['stripe_account' => 'acct_1JQY10GX4jC1zJlQ'] );
yep!
well that's pretty awesome
also, heads up that when using on_behalf_of parameter means that the merchant of record will be the connected account. One key area where you can see this impact would be the statement descriptor : https://stripe.com/docs/connect/statement-descriptors
so in the end we cannot modify the time payments can be authorized of 7 days, but after capturing for 7 days, would leave the amount within stripe's balance and wait with the payout until the service has been provide, then trigger the payout via API call
well technically I could leave the on_behalf_of thing
for now
All I really want is reduce unnecessary transactions to an absolute minimum, which is also why I use auth and capture. My users should not have any frequent refund hedaches ๐
you must use on_behalf_of, otherwise the cross border transfers wouldn't work
oh
you can test it out on your own test env
try a destination charge and try a destination charge with the on_behalf_of parameter
okok
I can implement all of this at a later stage without any problem right?
Time's short to do all of this right now
So I can like start with weekly scheduled payouts, and then later, at some point, switch to manual payouts for all of my connected accounts. Right?
yep. The only thing which is key to your current implementation is the on_behalf_of parameter that needs to be included
if the connected account is in a different region from the platform account, then you must use on_behalf_of
like if the customer pays in another currency than the connected account
it's got nothing to do with the customer
okok got it
thank you so much Alex!
have an excellent evening / morning / afternoon ๐
you're welcome, feel free to reach out if you have any other questions!
and by region you mean country, right?
we say region, because of EU ๐
as an example, if you're a DE platform, you can transfer with no restrictions to Stripe accounts in other EU countries too
yep, that's right