#Iapetus11
1 messages · Page 1 of 1 (latest)
Hi 👋 when you say the the card always declines, are you using it to make an off_session payment and that's where the decline is being surfaced?
Nope, off_session is set to False.
Should I provide the setup intent ID and payment intent ID like in the prior thread?
Yes please.
seti_1Mb92yFAed7s9c7svJcDfsiI
pi_3Mb94FFAed7s9c7s18WabjvD
Thank you, pulling those up.
This looks like expected behavior.
That Payment Intent is being confirmed server-side, where the customer is unable to perform authentication if required. Since this is a 3DS1 card, it doesn't have the soft-decline functionality that we need in order to say a payment was declined due to authorization being required (that was introduced as part of 3DS2). In those cases we aren't able to differentiate between a payment declining because of authentication being necessary versus other reasons a payment could be declined, and we respond saying the payment was declined.
So soft-decline basically tells Stripe that the next_action field should be populated?
I'm still confused because the 3DS2 card works just fine, it's not being declined.
3DS2 Payment Intents are moving to requires_action?
Yes.
Gotcha, yeah, that is expected. 3DS2 provides us with an indication that a payment was declined due authentication needing to be completed, so for those we move the Payment Intent to requires_action because we know customer action is the next step for that payment.
With 3DS1 we don't have that level of granularity, so we can't differentiate declines that would be successful with authentication vs declines that will not succeed for other reasons (insufficient funds, closed account, etc).
Ahhh, thank you so much.
So in order for us to support 3DS1 payments, could we just like always do an authentication step? Is there any workaround?
For 3DS1 (which I believe several if not most networks have deprecated at this point), if the Payment Intent is declined it's usually best to bring your customer back on session to try the payment again.
You could let them retry with the same card, and if it was declined because authentication was required then stripe.js will handle that, but you may want to allow the customer to select another payment method or provide a new one in case the previous decline was caused by something that can't be recovered from.
Ah alright, thank you so much, issue resolved!
Awesome, happy to help!