#akdj16 - 3DS
1 messages ยท Page 1 of 1 (latest)
Hello ๐
Tarzan is away and I can't seem to load the other thread.
Let's chat here
How can I help?
ok, in fact previously, I tried to update a subscription with a 3ds v1 payment method attached to the customer as default pm, and I used the latest_invoice.payment_intent on the frontend to confirm the payment , and I have error because the payment intent status is requires_payment_method. @manic comet said that I don't need to call payment intent confirm, it should be resolved automatically as the subscription is set to charge_automatically. but I just tried few minutes ago, it still failing, on Stripe. the new request ID is req_QUgljmj6MAu42Z
gotcha, looking..
The test card you're using requires a 3DS auth check
https://stripe.com/docs/testing#three-ds-cards
yes
Not sure why its automatically getting declined, it should theoretically move to requires_action status on 3DS prompt. Have you tested a different card to see if that works?
Yes, that's strange. I tested with 3DS v2 card and it returns with status requires_action and the frontend prompts 3DS confirmation screen.
but 3DS v1 doesn't work
Interesting, thank you for flagging that distinction. Trying to think of what might be happening here...
akdj16 - 3DS
Hey apologies that it took me a while to find this but this is expected behavior. One of the main differences between 3DS v1 and v2 is that v2 has this soft decline functionality
Hmmm ok, but how to manage 3DS v1 in this case?
I think you would want to treat this like any other full decline and bring the user back on session. You could try confirming the payment intent on your client side page with that already saved payment method and that may trigger 3DS, otherwise they might want to enter new payment method details
Hey, I just tried to provide the payment method id to the client method confirmPayment (lib stripe-react-native). but nothing happened. On stripe dashboard, the customer still has failed payment and subscription in past_due. on the client side, nothing is prompt, it was like a successful confirm payment call but in fact it failed on stripe
here is the request ID: req_QWnrwLoksDv12B
Did you do the confirm on the $10 invoice? I see that that one is paid
the $35
the $10 one is when I created the subscription and yes I also confirmed and did the 3ds verification
Subscription statuses are based on the most recent invoice's status, and I see that the most recent invoice on that subscription is still not paid, so that is why the subscription is still inactive
Looking in to the issue with that invoice
then the update subscriptions actions didn't work
Didn't work in what way?
Also I don't see any client side confirm attempts logged on our side for that $35 invoice. Were there any client side errors thrown when you tried to confirm it with confirmPayment in your RN code?
no i get nothing, I did a try catch, but nothing is catched, so there is not error thrown from confirmPayment
didn't work in this way
Ah gotcha, typically "update subscription" refers to a different server side call so I got a bit mixed up
I updated the subscription in the backend, I get the response of the update, from the response I retrieved the subscription.default_payment_method and returned this + the latest_invoice.payment_intent to the frontend. on the frontend I did the confirmPayment with the payment_intent secret and the default_payment_method ID as second parameter of confirmPayment paymentMethodData.paymentMethodId
๐ stepping in
hi !
You want confirmCardPayment here
Not confirmPayment
Wait wait wait
You are using React Native
Sorry, catching up on the above
yes, I am using react native
Can you show me your code for how you are calling confirmPayment exactly?
And you aren't seeing any error, correct?
sure
it is in a if block, I added a console.warn at the begining of the if block, to be sure being inside the block
and I get the warning log in the metro terminal, so it surely call the method
the payload.updateSubscription is what I return from the backend side, it contains the paymentMethod ID, for instance:
{"__typename": "UpdateSubscriptionPayload", "paymentIntent": {"__typename": "PaymentIntent", "clientSecret": "pi_3MZGMiC36MeQgD8r0ZFH1Mno_secret_bnCiyAPrDnyb2yIjok5LGXOJv", "id": null, "status": "requires_payment_method"}, "paymentMethodID": "pm_1MZGKSC36MeQgD8rYsXJT17M", "reason": null, "success": false}}
"@stripe/stripe-react-native": "^0.23.0" this one
"react-native": "0.69.5",
Ahh that is confusing that it doesn't error
paymentMethodType: "Card" is the solution for showing the 3ds confirmation screen
I'll file feedback