#jzills-PI-error
1 messages · Page 1 of 1 (latest)
Hi - yes let me fire off another request and I'll send it to you.
req_ECfImHk2IPJoeM
Looking!
Thank you
Okay yeah this is required. Take a look at: https://stripe.com/docs/payments/ach-debit/migrations
I'm using Plaid though to create BankAccounts?
When you confirm the PI you pass mandate_data
Aren't they pre verified?
The test one in Stripe Dashboard says it's verified already.
Yes it is verified, that is separate from the mandate. You still need to indicate that the customer authorized you to charge the bank account which is what the mandate represents.
https://stripe.com/docs/payments/ach-debit/migrations#mandate-acknowledgement specifically talks about this
Yep
Got it thank you!
One more question
This works for card payments without the mandate
If I pass the mandate_data for both "card" and "us_bank_account" that should be fine?
I don't think we error if you pass it for card but I've never done that since we don't require a mandate for cards.
I would not recommend passing it personally.
Ok because we are surfacing a drop down for clients to select their existing payment methods.
The drop down contains both cards and bank accounts
I'll do as you say though and only mandate during bank accounts
Yeah you are going to have to pass the paymentmethod back to your server so just check the type
Online just means the client is actively choosing to pay?
What is required for type = online then?
No, online means the client is online when accepting the mandate
offline means they accepted it in the past and you are recording that they did indeed accept it in the past
Ok so this is more of a housekeeping field than anything?
We have clients authenticated into our portal, if they are paying through our portal what do you suggest?
In terms of using this mandate.
It isn't "housekeeping"... NACHA requires you to indicate the customer has authorized you to charge their account. Which is what the mandate represents.
If they are online when you collect their bank details and create the first charge then you should use online and collect the relevant details for the mandate
If you collected mandate acceptance in the past and they aren't online when you are inputting their bank details then you should use offline
Ok - then I assume when a customer is selecting an already stored payment method that would still constitude online?
You only have to collect the mandate once.
From above doc:
Authorization is only required the first time you use a BankAccount object with the PaymentIntents API. After that, you can use the BankAccount object as a PaymentMethod to accept future payments.
So that means it depends
Did you establish a mandate when you first stored it?
Or they already were stored and you are migrating now
And this is first payment
We're not in production yet so the flow is fluid. Where I'm at is connecting a BA through Plaid, so I exchange the Plaid token and create the Stripe BA.
At the time I create the Stripe BA can I also just include the mandate there?
Gotcha... is there a reason you are using Plaid instead of the new ACH flow via Stripe if you are still in development?
Last I checked the reasoning was for the easier integration with ACH. The business likes the UI and the ease of logging in with Plaid.
Automatically verified as well through Plaid.
Has that changed in Stripe to now support automatic verification without microdeposits?
Yes the new ACH flow supports instant verification. Give a read through: https://stripe.com/docs/payments/ach-debit/accept-a-payment
The current flow you are pursuing is okay... it uses a mix of new and old.
It will work
But in my opinion the new flow is cleaner.
Ok I'll review it and let my boss know thanks
Another question - I know you said the mandate is only required once per payment. Is there a problem with passing a mandate everytime to confirming a paymentIntent?
I don't think that is an issue except it will create a new mandate each time you pass mandate_data.
Ok thanks for all your help!
Sure!
Last thing 🙂
Just to make sure I have my head around this correctly
Using our current flow with Plaid, I can create the BankAccount then at the same time create a Mandate for that BA PM.
Now, when using PaymentIntent.Confirm for that BA I won't have to pass anything to the MandateData field, correct?
As it would have already been mandated.
If it already has a mandate created then that's correct you shouldn't need to pass mandate_data again
Perfect thanks for your help. Have a great weekend!
You too!
Is the only place to update a mandate through the Source API (other than confirming PaymentIntent)?
Doesn't look like the MandateService in .NET sdk exposes create operations.
Bismark had to step out but I will be able to check in to this in a minute
Great thanks
Just catching up on this, what about the mandate are you looking to update?
I'm creating a stripe BA through Plaid
After I create the BA I want to immediately create the mandate.
Looks like I can do it through Sources API and update the PM with a specified Mandate, correct?
Still trying to figure this one out. I thought that Plaid took care of the mandate. So that error at the top of this thread was from trying to use a bank account that you got from Plaid?
Yes correct
I used Plaid, exchanged the Plaid token for a Stripe BankAccount token, called CreateAsync on the BankAccount to create the Stripe BankAccount.
Then when I go to use that PM on a PI, it gives that error about missing mandate.
The previous person helping me said Plaid only verifies and doesn't apply the mandate I guess?
Gotcha. I am still a bit unclear how this flow should go and am reaching out to my colleagues for help
Ok thank you
So you would want to follow this guide and either provide the mandate data to either a PaymentIntent or SetupIntent
https://stripe.com/docs/payments/ach-debit/migrations#mandate-acknowledgement
https://stripe.com/docs/api/setup_intents/create#create_setup_intent-mandate_data
Do I need a new MandateData for each PaymentIntent?
No, it should only be required on the first one as far as I understand it.
We are talking about the behavior discussed in this quote, right?
Authorization is only required the first time you use a BankAccount object with the PaymentIntents API. After that, you can use the BankAccount object as a PaymentMethod to accept future payments.