#ob-paymentintent-confirmation
1 messages ยท Page 1 of 1 (latest)
ob-paymentintent-confirmation
Hey @mild vessel can you provide more details about what you are trying to do? What's a "return", what are you using if not Stripe.js, etc.
For my company we take monthly payments using stripe APIs and payment intents using the save cards of customers without their attention. Most payments go through but some payments are incomplete. These incomplete payment intents return the status requires_action.
Okay that helps but that's still a bit far from enough. What is your own code doing to charge the customer's saved payment method? What does the PaymentIntent show in the API?
This is a same of the payment intent we send for each monthly payment
var options = new PaymentIntentCreateOptions
{
Amount = PriceInt,
Currency = "gbp",
Customer = customer.Id,
PaymentMethod = customer.DefaultPaymentMethodId,
Confirm = true,
Description = "Payment",
PaymentMethodTypes = new List<string>
{
"card",
},
};
That's the format of the payment intent we send to stripe
Okay so what is likely happening is that the next action is required for 3DS because you forgot to pass OffSession = true to indicate the customer is not on your app paying
So, what would happen exactly if I pass OffSession = true to this PaymentIntentCreateOption?
This parameter allows you to indicate you are charging them "off session" usually for a recurring fee or similar. That allows Stripe to flag this to the bank to minimize the chance they will ask for 3DS (which is likely what's happening right now to your PaymentIntents)
It's still possible the bank will decline and want 3DS in which case you email your customers and get them back on session. This would be the same as if they have a decline for insufficient funds or expired card and such
Alright, thank you that makes a lot a sense. Now, if the payment intent does require 3ds, how do I "get them back on session"?
That's up to you. Like you control this as your business. You send them an email to send them to a URL to pay or similar. Like taht's what Amazon or Netflix do when a payment fails
Thank you. I have another question (this is the last one I promise ๐ ), is there a way to enable 3ds secure during the addition of payment methods using setup intents? Currently, we add cards using the stripe manual terminal.
It's totally fine if you have other questions, we're here to help ๐
What do you call "the manual terminal"? The Stripe Dashboard? (asking because we have a product called Terminal which is for in-person payments like in a store)
we have a stripe touch screen terminal. we were advised that that was the best way to add payment methods to customers' accounts.
I'm sorry this is still confusing. What is a "stripe touch screen terminal"? Can you try and be more speciifc about what you are using exactly? Are you accepting in-person payments in a store?
Customers set up their accounts in our office in person and we then take regular monthly payments for our self storage rentals.
To set up a customers account, we start by creating a new account with their details and then we add their payment method (usually a card) to their account.
We bought a device from stripe which is basically a touch screen card machine which we then integrated and programmed to work with our stripe account and communicates with our bespoke management software.
We call an api from our management software which passes through the customer ID and then requests the customer to add their card from the card machine. That then asks for a PIN and once successful saves their card details to their stripe account for future use
BBPOS WisePOS
Okay so then there's no way to do 3DS whatsoever in that case, they are in person you collect card details in person
I don't get why you use a touchscreen instead of asking for their card details
but ultimately you have a card saved, you try to charge it later, so what's the problem?
In one of the stripe support conversations we were advised that by using the terminal, we would receive "the highest authentication" and future automatic charges should work.
We now have a number of transactions (paymentIntents) returning "incomplete" or "blocked"
so we are trying to find out how to handle this so payments go through automatically
I think there's a misunderstanding here. There's absolutely no "authentication" if as a human you go and manually type a card number of a screen
Also, even if you collect card details in person, it's totally possible taht the bank declines a future payments for many reasons (not enough funds, account closed, fraud risk, etc.) and one of those could be "you need to do 3D Secure please"
I'm sorry it seems like there's a lot of confusion going on here. Are you the developer of your overall integration?
Yes, I and one other developer created the system being used in our business. If I want to get what you are saying with regards to adding cards. So there is difference between adding a card through the terminal and adding a card manually through our system to stripe?
I'm sorry the way you keep describing this is confusing to me
what does "manually through our system" means?
Uploading the card details through stripe apis. Our system allows users to input their card details and it is then sent to stripe through the apis.
I'm so sorry I have no idea what "uploading" could mean either
99.99% of business collect card details on a website or an app. The end customer enters their card details when checking out and such.
If you as a human at that company do something for them whether typing card number on a screen, or in the Dashboard, or in an internal UI you built, but the customer isn't involved at all doing this, it's a completely different flow
Sorry I think I wasn't too clear previously. For our business, the customer never uses our system only employees have access to the system. All we just require from the customer is payment and the we get that is through the customers' card. We could either take card details and create the payment method manually through the stripe apis or use the stripe terminal to upload the customers' cards through a setup intent.
What does "upload" mean though? You upload a file maybe.
Do you mean the customer physically puts their card on the Terminal?
sorry for being nitpicky, but I am really lost as to what you are describing and it's a fundamental part of the flow
It is fine ๐. For example when the customer puts their card into the terminal, a setup intent object is created with their card details and that object is sent to our stripe account through our api key to add a payment method to that certain customer.
puts their card into the terminal,
what does that mean
There are 3 integration paths
1/ Customer has their own computer/phone and enters their card detaisl on an app/website
2/ Merchant/business enters card details by hand (often called MOTO transactions)
3/ Customer physically taps/dips/inserts their card in a physical reader/terminal. Like how you pay at any store in person
Which of the 3 are you doing
2 and 3. But for 3, the customer can also use the terminal to save their payment details.
lol
I'm really sorry, every time I keep going back to being unclear what you mean
what does "can also use the terminal" mean? Like exactly what I described? Or something else?
I used this as help
https://stripe.com/docs/terminal/features/saving-cards/overview
Okay so #3 for real, not something else. You were framing it as if it was different
So the customer is physically in the store, they use their real physical card and you collect the card details that way.
That allows you to save the card for future payments. But that doesn't mean the bank will always say "yep sure". They can decline for many reasons and one of those is the need to do 3D Secure. In that case you need to build a solution where you for example email your customer and get them on your website/app/something to enter card details again and/or go through 3D Secure for example
Does that make sense?
Thank you very much for all the help. I understand what you mean. It makes a lot of sense. ๐
Do you have an example PaymentIntent id I can look at?
there's one last thing I can think of and I can confirm if it's the problem
@mild vessel ^
yeah that's what I thought
You never passed off_session: true in your request. You don't tell us "this is initiated by the business for a recurring payment and the customer is not here to do 3DS"
so we or banks will ask for 3DS in cases where we think it's needed and don't know you can't get your customer to do it
that should minimize the number of times you get into requires_action
Thank you very much for all the help. I am really grateful. I will add the OffSession=true property to the payment intents hopefully that reduces the number of incomplete payments. I will eventually find a way to handle those that requires action regardless of if off_session is true or not. Thank you very much again.
Of course. Sorry it took so long, we have so many different products and often the vocabulary overlaps so much. So many people here say "I use the Terminal" but they mean our Stripe Dashboard
but I'm glad we're aligned ๐
Of course. I'm glad we could end up understanding each other and getting the problem resolved