#jtr-3ds-confirm
1 messages · Page 1 of 1 (latest)
Hi hmunoz, here's a PaymentIntent ID: pi_3JpcIODLDYpUpJgY2EC9gSzh
thanks for taking a look into this 🙂
so you created a PaymentIntent but you haven't confirmed it client-side, in Stripe.js or mobile SDKs right?
PaymentIntents require 2 steps
1/ creation server-side
2/ confirmation client-side
you are missing step 2
I think we're doing that
on the server, we're creating the PaymentIntent via Setupintent.create
then on the client-side, we're passing the PaymentIntent to confirmCardSetup
let me clarify
Also, in case it offers any clues, it is working fine in production and test mode for non-3DS payments and works for 3DS2 in test mode (haven't had a production 3DS2 test payment yet)
there are 2 distinct things here
PaymentIntents vs SetupIntent
so
we're creating the PaymentIntent via Setupintent.create
doesn't make sense
SetupIntent.create() would create a SetupIntent not a PaymentIntent
second,
then on the client-side, we're passing the PaymentIntent to confirmCardSetup
to confirm a PaymentIntent you useconfirmCardPayment()notconfirmCardSetup()
and you are not confirming the PaymentIntent client-side
so clearing up some confusion, please look into your code to clarify that
ok, thanks. let me check that
for a little added context, we're saving the cards first and then processing the payment at the end of checkout, using this flow: https://stripe.com/docs/payments/save-and-reuse
So indeed we are using SetupIntent not PaymentIntent. Apologies for not clarifying that sooner
but you have to use PaymentIntents at some point
SetupIntent don't move money
PaymentIntents do
correct
so your integration is a bit incorrect
in that you should not be using SetupIntents at all
you can collect a card up front but only use a PaymentIntent
otherwise you increaase your odds of double confirmation being required
double authentication* being required
which is what is happening here
you authenticate a card on a SetupIntent
then you confirm a PaymentIntent but that requires authetnication too
right, i see
so we're following the flow I referenced, which first sets up the card using the SetupIntent and then uses PaymentIntent.create to process the payment
for PaymentIntent.create, we create the payment ID via the SetupIntent and then just pass the paymentID to PaymetnIntent.create (along with the customer id)
so in that guide, the difference is that you're charging the customer n days later, so you collect their card day 1, charge them day 5
when the customer is not in your payment page
but in this case, your customer is in your payment flow, so you can collect the card first and create a PaymentMethod out of it, then on your last paymetn page, you create a PaymentIntent and confirm it client-side