#camiloa17 - mandates
1 messages ยท Page 1 of 1 (latest)
Hi ๐
Hello Snufkin ๐
We have some information here about collecting mandate acknowledgement as part of the ACH DD payment flow.
It's not quite as clear as I could wish but basically you just need them to acknowledge a version of the boilerplate text we provide here:
https://stripe.com/docs/payments/ach-debit#recommended-mandate-text
Yeah the documentation is not as straightforward on this part ๐ฆ
for BACS and ACSS is the same?
We hav BACS specific docs here: https://stripe.com/docs/payments/bacs-debit/accept-a-payment
Right now we are moving to the new payment element but I still have to maintain the old implementation.
But I'm not seeing mandates mentioned
Exactly but still we need mandates hehe
Oh wait, we discuss them here: https://stripe.com/docs/payments/payment-methods/bacs-debit#mandates
Snufkin but do you have like a flow? for example ACH -> Show the input -> connect the bank account -> accept mandate.
Not that clearly but, at least for ACH, we do show the JS functions you need to call
But the thing is the documentation doesnt mention what to do with expired mandates or mandates that were accepted.
For example recently we got an error for an expired mandate.
And another for passing a mandate id when confirming a payment.
Yes from what I can see those are separate steps. For the ACH you confirm the account details (mandate) which triggers the confirmation of the payment.
https://stripe.com/docs/js/setup_intents/confirm_us_bank_account_setup
While we don't have clear docs for Bacs and ACSS I can see in the JS reference doc that Stripe.js has confirmation methods for each of those payment methods.
yeah that is true.
But I just built a test ACH DD integration myself and the bit about the mandates did feel kind of tacked on and not as fleshed out as I would like.
But to address your concern about migrating existing payment methods, we kind of address that here:
https://stripe.com/docs/payments/ach-debit/migrations#mandate-acknowledgement
That is true, BTW I work for Samsara. I don't know if we can have a call to tackle some of the questions per payment method. Would love to be able to showcase it.
Unfortunately we don't offer calls here. It isn't one of our integration engineer workstreams.
ahhh ok good to know.
But reviewing the Payment Method specific docs and their child pages seems to have a decent amount of information to get started testing some integration approaches
I think the ACSS stuff is under Pre-authorized debit in Canada
https://stripe.com/docs/payments/acss-debit
yeah we already have them running the only thing is testing out mandates. How can we test a revoked mandate.
Ah, in that case the best way to simulate that is to create a dispute on a payment method with an active mandate
The dispute revokes the mandate in Stripe
will this work even when the tests account numbers or it needs to be a real account.
Well, gimme a sec I'll test this
Wait a sec... we actually say exactly how this will work here.
https://stripe.com/docs/payments/ach-debit/accept-a-payment?platform=web&ui=checkout#resolving-disputes
Admittedly it is hidden inside an accordion section
Specifically:
{
"error": {
"message": "This PaymentIntent requires a mandate, but no existing mandate was found. Collect mandate acceptance from the customer and try again, providing acceptance data in the mandate_data parameter.",
"payment_intent": {
...
}
"type": "invalid_request_error"
}
}
ok, thanks but to test it is the way you say, to dispute a transaction.
Unfortunately that is how it works with live transactions but our test data for Disputes does not include ACH payment methods
So is this like an asynchronous action? They client gives the information, we show the mandate and the client accepts and confirms the payment, so for this we need a webhook?
No, you can confirm synchronously since it's literally the customer looking at some text and saying "I agree"
The dispute part involved a webhook because of how async a customer can dispute a charge
when they agree we need to like create the mandate on stripe? or is a mandate that stripe shows the customer and is just passed to the confirmation method.
They have up to 60 days to do so
Using the specific confirmation method with Stripe.js, stripe.confirmUsBankAccountPayment for ACH, creates the mandate
so when we confirm we dont need to pass a mandate id since the confirmation creates the id, right?
Correct
Ok so I guess for expired mandates we just dont pass the mandate id.
Yeah, you just collect a new one
And for payment methods that have a mandate we just confirm without passing the mandate id, we got an error on that on France in BACS but I dont know if we need to pass it for the ACH.
Where are you attempting to pass a mandate ID? Is this using Stripe.js? Server-side?
camiloa17 - mandates
The reason I ask is that I don't see a confirm method that accepts a mandate ID as a parameter. You can pass details of mandate acceptance when confirming the Payment Intent:
https://stripe.com/docs/api/payment_intents/confirm#confirm_payment_intent-mandate_data
But that is not the same as the ID.
Sorry had to check some things here
No worries
I see the mandate key is optional
Ok so this is on the payment intent level, but on stripe.js confirmation level
Ah, right. Sorry I looked right past it.
yes we are using stripe.js to confirm the payment.
In Stripe.js you could pass the mandate ID in the confirmParams
https://stripe.com/docs/js/payment_intents/confirm_payment#confirm_payment_intent-options-confirmParams
Once again, not super well covered but we state at the top that you can refer to the Payment Intent API reference doc for the full list of parameters
One of which is the mandate you pointed out
O I forgot to mention SEPA
For example, this is what happend to one of our customers on friday.
Okay so that appears to already have a valid mandate associated (hence the error). You can check that by retrieving the associated mandate and checking the status.
Complete reference documentation for the Stripe API. Includes code snippets and examples for our Python, Java, PHP, Node.js, Go, Ruby, and .NET libraries.
Ok so when a mandate is new we pass the id, but I think stripe takes care of that, when is expired we dont pass anything and when is expired we also dont need to pass it so it creates a new one. I am right?
Correct. If it's expired you just create a new one when confirming a Payment Intent or Setup Intent
So we dont need to pass mandates when confirming basically?
As long as the payment method has a corresponding mandate record in Stripe
Sorry english is not my first language, I just need to confirm my wording was fine.
Ok so stripe handles mandates by itself just that we need to display it to the customer when it is new or expired so they can accept them
No worries. Yes once you collect mandates and we store them as a record of the customer acceptance then you don't need to provide them again
Awesome thanks Snufkin. Mandates are such a elusive topic.
I think so too ๐
hehehe Oh well we will see how it goes ๐ Again thanks for the help