#chris4q
1 messages · Page 1 of 1 (latest)
We know that we could call collectPaymentMethod(), processPayment() and then void the authed payment intent if it's a contactless type, but it would show a green checkbox and "Approved" on the terminal when we are hoping to fail out. Which is also a pretty horrible UX.
What reader are you using?
I have both the P400 and the WisePOS, but will be using WisePOS in prod
So short answer, WisePOS
Our end goal is to collect a payment method during a payment and reuse it later, but we know that won't work with contactless payments.
Hmmm... so there are 2 questions here that I want to separate out to start (for sake of simplicity). Let's start with this one:
How do I tell if a charge was contactless or not?
The only thing I can see that would be useful to tell if a card was using a contactless payment method would becard_present.read_method. This will only be available after the card is confirmed though.
See here: https://stripe.com/docs/api/payment_methods/object#payment_method_object-card_present-read_method
Complete reference documentation for the Stripe API. Includes code snippets and examples for our Python, Java, PHP, Node.js, Go, Ruby, and .NET libraries.
As for the reader display, I thought that the display automatically displayed processing errors. Are you able to describe step-by-step what is happening where you do the below?
The only way I can see is to collect a reusable card (that restricts to non-contactless) and then immediately call collectPaymentMethod() and processPayment() and have the screen flash a bunch of times to remove their card in between (horrible UX)
So, the goal is to have a 1-time charge and collect the payment method for future charges, afterwards. The issue is that this won't work if the user uses tap, so we need to restrict that. With calling terminal.readReusableCard() it displays "Please swipe or insert card" (which is good) and then after doing that, the terminal says "Processing" and then tells the user to remove their card. At that point, we have the reusable payment method, but we need in-person rates, so we then call collectPaymentMethod() which says "Thank you" and then again says "Remove card" ... and then we call processPayment() that says "$1.00 approved" and then "Remove card" again.
This article mentions this flow and says it's not supported with mobile payments, but doesn't describe a way to prevent a user from using a mobile payment with the terminal ... https://stripe.com/docs/terminal/features/saving-cards/overview
Apologies if I'm overlooking something. So you still want to collect the one-time payment from a contactless card, but you want to display an error (or similar) that basically says "this card cannot be used for future payments"?
No, sorry. So, this is an office where they collect let's say $25 in-person, but then we want to charge them another $25 virtually for a subsequent visit. The first charge we need to be in-person for in-person rates, but subsequent charges can be typical online rates. So, to do this, we need collect their card for reusing and charge them the $25 from the terminal when they're in the office. We just want a good experience where either A) The terminal tells them that they can swipe or insert chip and then they insert it in and are charged $25 and we can store their card for future use .... or B) They tap their card, the reader tells them they can't tap and need to insert or swipe their card and they do so and then are charged $25 and we can store their card for future use.
Ohhhhh, okay. Let me confer with a colleague and see if this is possible.
Awesome. Thanks!
Alright, so it looks like that's not possible. I'm happy to add that as a feature request for the product team, as I can definitely see the usefulness of being able to disallow tap as a payment option, but as of now I'm afraid there isn't a clear workaround
Yeah, feature request would be great. Since there is an article that is made for this flow, I'm thinking I'm not the only one running into this.
Real quick, are you using setup_future_usage: 'off_session'? I thought this tells the reader not to prompt for Tap as a payment option: https://stripe.com/docs/terminal/features/saving-cards/save-after-payment