For a few weeks now, some buyers no longer have access to the 3D-Secure confirmation request window when making a payment via s2Member.
Their payment is therefore considered incomplete and is therefore not validated.
I think that this happens especially when payments are made from an iPhone but I cannot be sure…
Do you have any idea where this can come from?
Thanks, best regards.
Were you able to reproduce this? Do you have any other details about it?
I look forward to your update.
I unfortunately don’t have Apple support to verify this, but payments through Android and Microsoft Windows seem to work without issues based on my testing…
The problem would therefore apparently come from 3D-Secure confirmation which is not displayed on some Apple devices.
Here is the screenshot of the Stripe interface for a customer’s last failed try. (sorry the interface is in French).
I just tested it with an iPhone and it worked correctly.
I wonder if it happens only with some devices, or with some specific browsers, or some browser addon/extension that may be interfering… Can you find out more from those customers how to reproduce the problem?
I just know the customer have an iPhone 10 and tried paying on my website through Stripe and PayPal on Safari and Chrome browsers with no success.
So I had to manually create an invoice for him via PayPal for his payment to be accepted … I can’t understand why.
Hmm… So not just Stripe?
Sounds weird that you’d have trouble with PayPal too… What PayPal service are you using? Express Checkout, Pro, Standard?
I use PayPal Pro but there was no problem with payments since more 2 years ago…
This problem appeared recently and only for 2 customers on iPhone, all others customers haven’t any problem of payment.
It happened again today, still on a customer’s iPhone.
As soon as the payment amount exceeds a threshold, the 3D-secure confirmation required by PayPal or Stripe is not sent / displayed to the customer who can therefore not finalize his payment.
It’s very annoying because it damages my business and causes me to lose some customers.
What can this be due to?
This does not seem to be a problem on Android or Windows, it only happens on iPhone and above a certain purchase amount.
Thanks. Best regards.
After investigation, it turns out that it is when Stripe and PayPal send “payment_intent.requires_action” webhook that it displays nothing to customers, while a 3D-Secure confirmation window is supposed to be displayed for the customer confirms their payment.
Having conversed with Stripe and PayPal for a long time about this issue, it would be an API version issue.
Expected webhook events change from version to version.
It is therefore necessary to update the API versions used by s2Member in relation to the latest API versions of the various gateways.
Thanks for the additional details.
I see. Maybe a more recent API changed how it deals with certian iPhone models where the others haven’t changed? then that may explain it… but a recent test on an iPhone as mentioned before, was successful.
I will look at what it takes to update to the newer API version, in case that helps. Did they mention what API version they require for this problem you’re having?
I just did a test with one of their test cards for 3DS, and the modal is being displayed as expected. https://stripe.com/docs/testing#regulatory-cards
Could it be that something on your setup is causing a conflict under the circumstance you describe, and prevents the Stripe.js from loading correctly, so their modal doesn’t work as expected?
Can you reproduce the problem you describe, and check in your browser’s console if there are any errors mentioned? And after you can reproduce the problem consistently, could you try deactivating other plugins or changing the theme, to see if the problem goes away in those tests?
You can use a clone of the site, or a clean installation and test after adding to it each of the plugins you need, and use the Stripe testing credentials, and their test cards to trigger the modal without needing a real $200 transaction for each test.
Let me know how it goes.
Glad to read you.
I just did my last tests on a blank site with no other plugin other than s2Member and s2Member Pro.
The 3DSecure window still does not appear.
I have finally found the cause of my problem:
When I use the s2Member payment shortcode in a wordpress page everything works fine.
But when I use the s2Member payment shortcode in my PHP file via the echo do_shortcode ("[s2Member-Pro-Stripe-Form … /]") syntax; this no longer works for 3DSecure confirmation window which therefore no longer appears.
So there is a problem with my code launched via PHP, although this mode of operation has been used on my sites for years.
I will analyse that.
I finally found the exact origin of my problem:
In this specific case, when Stripe sends the customer back to my site for 3DSecure confirmation while my payment page has returned to the PayPal form, the confirmation is not displayed.
Conversely also, if PayPal sends the customer back to my payment page with Stripe form, that doesn’t work either.
On the other hand, when I force only one gateway so that Stripe returns on the page with the Stripe form and PayPal returns on the page with the PayPal form, everything works correctly and the confirmation is then displayed fine.
To summarize, would it be possible to make the 3Dsecure confirmation window appear regardless of the s2Member form that is display on the payment page?
Thanks in advance. Best regards.
But 3d secure should only show when required, that is depending on amount maybe one in 5-10 customers. Except over 1000 Euro every payment. 100-1000 more often.
You are absolutely right, but that does not change anything.
I do not ask to display the confirmation window with each payment, I want it to appear only when necessary, as it does now, but without taking into account the shortcode present on the payment page.
To summarize, if the customer pays via Stripe and their payment requires 3DSecure confirmation, the window should appear even if the form on the payment page is a PayPal form, and vice versa.
It’s quite difficult to explain in writing…
My problem is that when a customer chooses a payment form (Stripe or PayPal) and makes this payment, the payment form is not necessarily the one displayed when returning to the payment page by the gateway if the 3DSecure confirmation is required.
I see! Nice catch! I didn’t think of that scenario…
Hmm… I guess you could set something in the session so that your code recognizes what gateway he already selected earlier. https://www.php.net/manual/en/reserved.variables.session.php