New European regulation for online payments with Stripe

Hi,
There was precisely a discrepancy between the number of recurrences entered in the s2Member Stripe shortcode and the number of recurrences actually taken into account by Stripe (always one recurrence too much compared to the shortcode).
So you will solve this problem at the same time as the SCA, which is a very good thing.
Thanks for the news, i hope this update coming soon!
Best regards. Brice.

1 Like

Thanks for your efforts Cristian.
I’m routing for you!
I’ll buy you a beer after all this is done!
Enda.

1 Like

Quick update:

:slight_smile:

3 Likes

Much appreciated. Thank you for the quick update!

1 Like

Awesome Job, well done sir.
Tip my hat to you!
Enda,

1 Like

well great for making progress in the support. However I had hoped for a revamped checkout UI at the same time. E.g. the address in the second step is horrible - it really needs to be moved to the first fields.

And the submit form is another thing that everyone I guess would love to see gone. It would be so much better if the user only has to confirm once - especially older people simply don’t manage to understand the checkout process and stop after confirming the Stripe Popup.

So either move everything to the front and auto confirm the form within the Stripe popup - or even better inline the stripe form.

This is really s2members weakest point (besides sometimes falsely ignoring Paypal API messages)

And best make both of this into a new version - e.g. s2member advanced - with a yearly subscription payment so you can make some money and users that way can feel more secure about s2member being continued…

1 Like

Yes, I plan to revamp the pro-form for the new s2Member Next that I’m working on. I started work on it, but while figuring out how the current pro-forms work, I noticed how to implement the new Stripe flow there quicker than getting the whole new rewrite ready.

The current one already works and has so many things going on behind the scenes, and in a pretty complex way, that it’d be easy to miss stuff or introduce problems. I’d prefer to not push a beta of the new forms together with the new SCA support if it’s not required.

About the double submit, I removed that. The old Stripe modal was an implementation of the previous Stripe Checkout to add the payment source to the customer on Stripe’s side, and then you needed to submit the pro-form.

I’ve now used Stripe Elements for the card details, and the customer only clicks the form submit button to get the thing going. If the card doesn’t need 3D Secure authorization, he won’t need to do anything else. The 3DS modal only shows up if it’s needed for that payment.

:slight_smile:

1 Like

Oh, and yes, I will change the license to a yearly subscription very soon. Current Pro users keep their lifetime access, but new ones will have to renew for updates in the future. I want to keep this very alive and make it prosper. :grinning:

2 Likes

but if the submit on the Stripe popup makes the payment go through - the address if active needs to be moved forward… (where it should be anyhow).

And I think anyone will understand if the old lifetime licences do not apply anymore. Or make it bought within the last 2 years - old lifetime = 2 years from date of purchase, if older also new model.

Nah, they have what they bought. If lifetime, it’s lifetime. Some will be understanding and others not so. But if someone wants to subscribe to the new annual payments to support the project, that will be very welcome, of course. :slight_smile:

What do you mean with moving the address forward? I’m not sure I understand.

1 Like
  1. oh and sorry - I did not notice in your screenshot the credit card is now inline - that’s great. The popup for 3d secure is okay I guess - it’s usually not inline from what I have seen (and yeah of course the fewer users get the popup the better). I did not look properly and assumed that the 3d secure popup is also used to enter credit card details.

  2. (oh and it would be great if submit form text could be changed to Pay Now - it’s doable via plugins but then the cancel subscription button will also show the same text - so it would be great if there is a different label for the submit form for paying vs for cancelling a subscription - I don’t mind either of which is changed in name as long as they are different. Submit form is not legally usable in Germany or Austria as a payment confirmation - we need a clear message like Pay Now by law).

  3. Currently if you require an address the only way to do so is to set a bogus tax for a country you never have any buyers. Then s2member will pop up the address field AFTER the user entered the credit card info - this is super confusing and users sometimes don’t even see it.
    I tried moving the fields forward into the main form but it broke something.

Custom fields are not usable - as the address fields are standardised and need to be forwarded correctly to Stripe for Stripe Apps using them - so no sense in making a custom field called Street and so on.

So if address is enabled (actually a separate settings options would be better than the bogus tax country) - it should show up from the start…

Also address should have options what to show would be great. So country only (best preselected by IP using maxmind database or similar), country and zipcode - country and street - and so on depending on the legislation of where you are based. For me actually country and city would be enough - no need for street or zipcode (actually country alone selected based on IP would be enough already for Stripe as with stripe you can get credit card country from stripe, not for paypal though as paypal does not provide credit card country, but I don’t use paypal proform). For EU VATMOSS and Stripe, simple country field would be enough - because then you have IP, credit card country code, and user indicated country (preselection based on IP is fine). Not having the country is problematic for VAT if credit card country and IP don’t match - VATMOSS requires 3 independent factors - so the country is the 3rd - if all don’t match you just need to follow a clear system which one you chose.

  1. About lifetime - well that’s why you would need to rename it - to s2member advanced or similar. Quite a few lifetime products went that way. old pro will still work but simply not support SCA - hence useless. I think most people would understand that support cannot be free forever (I also have lifetime on my website, but I calculate that the average user only uses my services for 5-8 years - hence the price is about the same as 1 year then yearly subscription for 7 years. s2member however never had a yearly plus subscription price… - and yeah that’s my biggest fear for Thrivecart, I don’t like their lifetime payment either). But of course that is your choice…
1 Like

Hi,
Congratulations and thanks for these quick news that show your progress.
I had to completely eliminate the possibility of paying by Stripe because this systematically generated an error since the implementation of the SCA. So I lose some sales which is critical for my business.
So it is really urgent to update the API, the changes of forms can wait a little more because they do not serve anything as long as the API does not work.
As for the annual payment, I am ok but the price must be representative of the number of people working on the plugin and the speed of application of the next important updates.
Best Regards. Brice.

1 Like

One more thing, Cristian, the 'Submit Form, needs to be a visible button. As it is now, it is not prominent enough. I had to add a big red button below the form to tell people to click ‘Submit Form’.

1 Like

I would not mind paying a yearly price for it, although I have an old license. However, as I run 6 sites, I would like to be considered as a good client and pay a reasonable price. If not that, at least you should allow old clients to offer a year donation with some kind of reminder for it.

1 Like

Quick update:

Finally got subscriptions working: no trial, free trial, paid trial… And buy-nows since the other weekend. There are only some details left to touch up, but now it’s possible to get paid with SCA and it’s ready for some beta testing.

Took me a while to understand all the parts of what Jason had done with the direct payment for the first term of a subscription, and then finding how to change it.

His approach was required for paid trials, because Stripe doesn’t have them as PayPal does. But after a while researching and trying stuff, found a way to do it without having a second 3D Secure authorization on checkout. This was important to keep, because many sites already use it, and is useful to apply a discount on just the first payment of a subscription, for example.

In those cases it will still say “trialing” in its status, as a paid trial. Normal subscriptions without a trial won’t have that status anymore.

I have to sleep now, been at this the last 19 hours straight and it’s almost 11am now… Later I’ll clean up some stuff, and put together a beta for you guys. Those interested in helping test it before the Release Candidate, please drop me a message so I send it to you.

:slight_smile:

2 Likes

This feels like a stupid question, but… how do I get this update?

I am a pro member. Wordpress reports S2Member Version 190822. I am not offered an update through WP.

I feel like I am missing something – but what? I definitely need the new feature!

Thanks,

  • Michael

Hi,
This update is testing mode yet, it will post in the future (I hope soon).
Best regards.

Hi Michael.

It’s in beta testing at the moment, there hasn’t been a public release yet, that’s why you didn’t get a notification. The release will come in the next days.

:slight_smile:

Alpha - 23.09
The billing address does not work (and likely the shipping address neither) - I set it to required but it’s not asked for. Also then the payment is failing - I just land back at the same page without anything happening on the users end.

Also depending on the credit card country - Stripe asks for Zip Code - I think this did not happen with the old implementation. I would prefer this to not pop up. It’s not standard. Also I do not need the zip code - especially if I don’t know which country they are from (credit card country is not the same as address/billing country as many people have bank in another country than where they are living. Also this makes it works as If I live in Austria but have German credit card (very common) - a 4 digit Zip code is not accepted because Germany uses 5 digits, but Austria only 4).

I don’t even know why the Zip field popped up.
Edited the email address in the logs - but did not receive any mail even though it should have been sent according to the gateway log. Also as said - page just reloads without any message

Gateway Core log:
LOG ENTRY: Wed Sep 25th, 2019 @ precisely 7:27 am UTC
PHP v7.3.9-1+ubuntu18.04.1+deb.sury.org+1 :: WordPress v5.2.3 :: s2Member v190923-alpha :: s2Member Pro v190923-alpha
Memory 47.60 MB :: Real Memory 20.00 MB :: Peak Memory 49.68 MB :: Real Peak Memory 20.00 MB
openmtbmap.org/test3/?s2member_paypal_notify=1
User-Agent: s2Member v190923-alpha; https://openmtbmap.org/test3
Array
(
    [txn_type] => web_accept
    [txn_cid] => cus_FsFOTb0Ju0px3Z
    [txn_id] => pi_1FMUuCJ1O9wogKkFHpvncuX8
    [custom] => openmtbmap.org
    [mc_gross] => 1.00
    [mc_currency] => EUR
    [tax] => 0.00
    [payer_email] => test@test.com
    [first_name] => test1
    [last_name] => test2
    [option_name1] => Originating Domain
    [option_selection1] => openmtbmap.org
    [option_name2] => Customer IP Address
    [option_selection2] => 193.43.158.229
    [item_name] => 1 Euro_One_Time_Payment_for_3_years_Openmtbmap_access_no_subscription
    [item_number] => 1::3 Y
    [option_name] => Originating Domain
    [option_selection] => openmtbmap.org
    [proxy_verified] => stripe
    [s2member_log] => Array
        (
            [0] => IPN received on: Wed Sep 25, 2019 7:27:22 am UTC
            [1] => s2Member POST vars verified with a Proxy Key
            [2] => s2Member originating domain (`$_SERVER["HTTP_HOST"]`) validated.
            [3] => s2Member `txn_type` identified as ( `web_accept|subscr_signup` ).
            [4] => s2Member `txn_type` identified as ( `web_accept|subscr_signup` ) w/o update vars.
            [5] => Signup Confirmation Email sent to: "Felix Hartmann" <test@test.com>.
            [6] => Storing `payment` for Subscription via ( `web_accept` ).
            [7] => Creating an IPN response for `subscr_payment`. This will go into a Transient Queue; and be processed during registration.
            [8] => Storing IPN signup vars into a Transient Queue. These will be processed on registration.
        )

    [subscr_gateway] => stripe
    [subscr_id] => pi_1FMUuCJ1O9wogKkFHpvncuX8
    [subscr_baid] => pi_1FMUuCJ1O9wogKkFHpvncuX8
    [subscr_cid] => cus_FsFOTb0Ju0px3Z
    [level] => 1
    [ccaps] => 
    [eotper] => 3 Y
    [ip] => 193.43.158.229
    [period1] => 0 D
    [mc_amount1] => 0.00
    [period3] => 3 Y
    [mc_amount3] => 1.00
    [initial_term] => 0 D
    [initial] => 1.00
    [regular] => 1.00
    [regular_term] => 3 Y
    [recurring] => 0
    [currency] => EUR
    [currency_symbol] => €
    [s2member_paypal_proxy] => stripe
    [s2member_paypal_proxy_use] => pro-emails
    [s2member_paypal_proxy_coupon] => Array
        (
            [coupon_code] => 
            [full_coupon_code] => 
            [affiliate_id] => 
        )

    [s2member_paypal_proxy_verification] => 7dea6fef27d69d80279f6e17733b2558
)

Stripe IPN log:
LOG ENTRY: Wed Sep 25th, 2019 @ precisely 7:27 am UTC
PHP v7.3.9-1+ubuntu18.04.1+deb.sury.org+1 :: WordPress v5.2.3 :: s2Member v190923-alpha :: s2Member Pro v190923-alpha
Memory 41.01 MB :: Real Memory 42.00 MB :: Peak Memory 41.06 MB :: Real Peak Memory 42.00 MB
openmtbmap.org/test3/?s2member_pro_stripe_notify=1
User-Agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)
Array
(
    [event] => Stripe\Event Object
        (
            [id] => evt_1FMUuDJ1O9wogKkFZPEWpYXD
            [object] => event
            [api_version] => 2017-02-14
            [created] => 1569396440
            [data] => Stripe\StripeObject Object
                (
                    [object] => Stripe\PaymentIntent Object
                        (
                            [id] => pi_1FMUuCJ1O9wogKkFHpvncuX8
                            [object] => payment_intent
                            [allowed_source_types] => Array
                                (
                                    [0] => card
                                )

                            [amount] => 100
                            [amount_capturable] => 0
                            [amount_received] => 0
                            [application] => 
                            [application_fee_amount] => 
                            [canceled_at] => 
                            [cancellation_reason] => 
                            [capture_method] => automatic
                            [charges] => Stripe\Collection Object
                                (
                                    [object] => list
                                    [data] => Array
                                        (
                                            [0] => Stripe\Charge Object
                                                (
                                                    [id] => ch_1FMUuCJ1O9wogKkFX1DgM43Q
                                                    [object] => charge
                                                    [amount] => 100
                                                    [amount_refunded] => 0
                                                    [application] => 
                                                    [application_fee] => 
                                                    [application_fee_amount] => 
                                                    [balance_transaction] => txn_1FMUuCJ1O9wogKkF3Z4VbpBH
                                                    [billing_details] => Stripe\StripeObject Object
                                                        (
                                                            [address] => Stripe\StripeObject Object
                                                                (
                                                                    [city] => 
                                                                    [country] => 
                                                                    [line1] => 
                                                                    [line2] => 
                                                                    [postal_code] => 
                                                                    [state] => 
                                                                )

                                                            [email] => 
                                                            [name] => 
                                                            [phone] => 
                                                        )

                                                    [captured] => 1
                                                    [created] => 1569396440
                                                    [currency] => eur
                                                    [customer] => cus_FsFOTb0Ju0px3Z
                                                    [description] => 1 Euro_One_Time_Payment_for_3_years_Openmtbmap_access_no_subscription
                                                    [destination] => 
                                                    [dispute] => 
                                                    [failure_code] => 
                                                    [failure_message] => 
                                                    [fraud_details] => Array
                                                        (
                                                        )

                                                    [invoice] => 
                                                    [livemode] => 
                                                    [metadata] => Stripe\StripeObject Object
                                                        (
                                                            [tax_info] => {"tax":"0.00","tax_per":"0%"}
                                                        )

                                                    [on_behalf_of] => 
                                                    [order] => 
                                                    [outcome] => Stripe\StripeObject Object
                                                        (
                                                            [network_status] => approved_by_network
                                                            [reason] => 
                                                            [risk_level] => normal
                                                            [risk_score] => 16
                                                            [seller_message] => Payment complete.
                                                            [type] => authorized
                                                        )

                                                    [paid] => 1
                                                    [payment_intent] => pi_1FMUuCJ1O9wogKkFHpvncuX8
                                                    [payment_method] => pm_1FMUu9J1O9wogKkF3Q57AaW5
                                                    [payment_method_details] => Stripe\StripeObject Object
                                                        (
                                                            [card] => Stripe\StripeObject Object
                                                                (
                                                                    [brand] => visa
                                                                    [checks] => Stripe\StripeObject Object
                                                                        (
                                                                            [address_line1_check] => 
                                                                            [address_postal_code_check] => 
                                                                            [cvc_check] => pass
                                                                        )

                                                                    [country] => AT
                                                                    [exp_month] => 12
                                                                    [exp_year] => 2020
                                                                    [fingerprint] => zR6vKvFBfavcLQuM
                                                                    [funding] => credit
                                                                    [last4] => 0008
                                                                    [three_d_secure] => 
                                                                    [wallet] => 
                                                                )

                                                            [type] => card
                                                        )

                                                    [receipt_email] => test@test.com
                                                    [receipt_number] => 
                                                    [receipt_url] => https://pay.stripe.com/receipts/acct_155eaaJ1O9wogKkF/ch_1FMUuCJ1O9wogKkFX1DgM43Q/rcpt_FsFP3CvAkIQVJ94rfibJRA0bZ5r1a5S
                                                    [refunded] => 
                                                    [refunds] => Stripe\Collection Object
                                                        (
                                                            [object] => list
                                                            [data] => Array
                                                                (
                                                                )

                                                            [has_more] => 
                                                            [total_count] => 0
                                                            [url] => /v1/charges/ch_1FMUuCJ1O9wogKkFX1DgM43Q/refunds
                                                        )

                                                    [review] => 
                                                    [shipping] => 
                                                    [source] => 
                                                    [source_transfer] => 
                                                    [statement_descriptor] => Openmtbmap.org
                                                    [statement_descriptor_suffix] => 
                                                    [status] => succeeded
                                                    [transfer_data] => 
                                                    [transfer_group] => 
                                                )

                                        )

                                    [has_more] => 
                                    [total_count] => 1
                                    [url] => /v1/charges?payment_intent=pi_1FMUuCJ1O9wogKkFHpvncuX8
                                )

                            [client_secret] => pi_1FMUuCJ1O9wogKkFHpvncuX8_secret_6FC3HVKzNF0FsIqKudKPMzc8f
                            [confirmation_method] => manual
                            [created] => 1569396440
                            [currency] => eur
                            [customer] => cus_FsFOTb0Ju0px3Z
                            [description] => 1 Euro_One_Time_Payment_for_3_years_Openmtbmap_access_no_subscription
                            [invoice] => 
                            [last_payment_error] => 
                            [livemode] => 
                            [metadata] => Stripe\StripeObject Object
                                (
                                    [tax_info] => {"tax":"0.00","tax_per":"0%"}
                                )

                            [next_action] => 
                            [next_source_action] => 
                            [on_behalf_of] => 
                            [payment_method] => 
                            [payment_method_options] => Stripe\StripeObject Object
                                (
                                    [card] => Stripe\StripeObject Object
                                        (
                                            [request_three_d_secure] => automatic
                                        )

                                )

                            [payment_method_types] => Array
                                (
                                    [0] => card
                                )

                            [receipt_email] => 
                            [review] => 
                            [setup_future_usage] => 
                            [shipping] => 
                            [source] => 
                            [statement_descriptor] => Openmtbmap.org
                            [statement_descriptor_suffix] => 
                            [status] => requires_source
                            [transfer_data] => 
                            [transfer_group] => 
                        )

                )

            [livemode] => 
            [pending_webhooks] => 1
            [request] => Stripe\StripeObject Object
                (
                    [id] => req_40AREIhLbAsoG2
                    [idempotency_key] => 
                )

            [type] => payment_intent.created
        )

    [s2member_log] => Array
        (
            [0] => Ignoring this Webhook/IPN. The event does NOT require any action on the part of s2Member.
        )

)


Stripe API log:
LOG ENTRY: Wed Sep 25th, 2019 @ precisely 7:33 am UTC
PHP v7.3.9-1+ubuntu18.04.1+deb.sury.org+1 :: WordPress v5.2.3 :: s2Member v190923-alpha :: s2Member Pro v190923-alpha
Memory 40.85 MB :: Real Memory 38.00 MB :: Peak Memory 40.90 MB :: Real Peak Memory 38.00 MB
openmtbmap.org/test3/?s2member_pro_stripe_notify=1
User-Agent: Discourse Forum Onebox v2.4.0.beta2
-------- Function/Caller: ( get_event ) --------
-------- Input vars: ( Wed, 25 Sep 19 07:33:01 +0000 ) --------
Array
(
    [event_id] => 
)

-------- Output string/vars: ( Wed, 25 Sep 19 07:33:01 +0000 ) --------
Exception Object
(
    [message:protected] => Missing event ID.
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => /var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-utilities.inc.php
    [line:protected] => 623
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-notify-in.inc.php
                    [line] => 66
                    [function] => get_event
                    [class] => c_ws_plugin__s2member_pro_stripe_utilities
                    [type] => ::
                    [args] => Array
                        (
                        )

                )

            [1] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-notify.inc.php
                    [line] => 58
                    [function] => stripe_notify
                    [class] => c_ws_plugin__s2member_pro_stripe_notify_in
                    [type] => ::
                    [args] => Array
                        (
                        )

                )

            [2] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-includes/class-wp-hook.php
                    [line] => 286
                    [function] => stripe_notify
                    [class] => c_ws_plugin__s2member_pro_stripe_notify
                    [type] => ::
                    [args] => Array
                        (
                            [0] => 
                        )

                )

            [3] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-includes/class-wp-hook.php
                    [line] => 310
                    [function] => apply_filters
                    [class] => WP_Hook
                    [type] => ->
                    [args] => Array
                        (
                            [0] => 
                            [1] => Array
                                (
                                    [0] => 
                                )

                        )

                )

            [4] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-includes/plugin.php
                    [line] => 465
                    [function] => do_action
                    [class] => WP_Hook
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 
                                )

                        )

                )

            [5] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-settings.php
                    [line] => 525
                    [function] => do_action
                    [args] => Array
                        (
                            [0] => init
                        )

                )

            [6] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-config.php
                    [line] => 106
                    [args] => Array
                        (
                            [0] => /var/www/openmtbmap.org/htdocs/test3/wp-settings.php
                        )

                    [function] => require_once
                )

            [7] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-load.php
                    [line] => 37
                    [args] => Array
                        (
                            [0] => /var/www/openmtbmap.org/htdocs/test3/wp-config.php
                        )

                    [function] => require_once
                )

            [8] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/wp-blog-header.php
                    [line] => 13
                    [args] => Array
                        (
                            [0] => /var/www/openmtbmap.org/htdocs/test3/wp-load.php
                        )

                    [function] => require_once
                )

            [9] => Array
                (
                    [file] => /var/www/openmtbmap.org/htdocs/test3/index.php
                    [line] => 17
                    [args] => Array
                        (
                            [0] => /var/www/openmtbmap.org/htdocs/test3/wp-blog-header.php
                        )

                    [function] => require
                )

        )

    [previous:Exception:private] => 
    [xdebug_message] => <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Exception: Missing event ID. in /var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-utilities.inc.php on line <i>623</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0001</td><td bgcolor='#eeeeec' align='right'>398856</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/index.php' bgcolor='#eeeeec'>.../index.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0001</td><td bgcolor='#eeeeec' align='right'>400528</td><td bgcolor='#eeeeec'>require( <font color='#00bb00'>'/var/www/openmtbmap.org/htdocs/test3/wp-blog-header.php'</font> )</td><td title='/var/www/openmtbmap.org/htdocs/test3/index.php' bgcolor='#eeeeec'>.../index.php<b>:</b>17</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0002</td><td bgcolor='#eeeeec' align='right'>414056</td><td bgcolor='#eeeeec'>require_once( <font color='#00bb00'>'/var/www/openmtbmap.org/htdocs/test3/wp-load.php'</font> )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-blog-header.php' bgcolor='#eeeeec'>.../wp-blog-header.php<b>:</b>13</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0002</td><td bgcolor='#eeeeec' align='right'>423440</td><td bgcolor='#eeeeec'>require_once( <font color='#00bb00'>'/var/www/openmtbmap.org/htdocs/test3/wp-config.php'</font> )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-load.php' bgcolor='#eeeeec'>.../wp-load.php<b>:</b>37</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>496512</td><td bgcolor='#eeeeec'>require_once( <font color='#00bb00'>'/var/www/openmtbmap.org/htdocs/test3/wp-settings.php'</font> )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-config.php' bgcolor='#eeeeec'>.../wp-config.php<b>:</b>106</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>6</td><td bgcolor='#eeeeec' align='center'>0.2157</td><td bgcolor='#eeeeec' align='right'>40030744</td><td bgcolor='#eeeeec'>do_action(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-settings.php' bgcolor='#eeeeec'>.../wp-settings.php<b>:</b>525</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>7</td><td bgcolor='#eeeeec' align='center'>0.2157</td><td bgcolor='#eeeeec' align='right'>40031120</td><td bgcolor='#eeeeec'>WP_Hook->do_action(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-includes/plugin.php' bgcolor='#eeeeec'>.../plugin.php<b>:</b>465</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>8</td><td bgcolor='#eeeeec' align='center'>0.2157</td><td bgcolor='#eeeeec' align='right'>40031120</td><td bgcolor='#eeeeec'>WP_Hook->apply_filters(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-includes/class-wp-hook.php' bgcolor='#eeeeec'>.../class-wp-hook.php<b>:</b>310</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>9</td><td bgcolor='#eeeeec' align='center'>0.2487</td><td bgcolor='#eeeeec' align='right'>40917416</td><td bgcolor='#eeeeec'>c_ws_plugin__s2member_pro_stripe_notify::stripe_notify(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-includes/class-wp-hook.php' bgcolor='#eeeeec'>.../class-wp-hook.php<b>:</b>286</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>10</td><td bgcolor='#eeeeec' align='center'>0.2491</td><td bgcolor='#eeeeec' align='right'>40990096</td><td bgcolor='#eeeeec'>c_ws_plugin__s2member_pro_stripe_notify_in::stripe_notify(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-notify.inc.php' bgcolor='#eeeeec'>.../stripe-notify.inc.php<b>:</b>58</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>11</td><td bgcolor='#eeeeec' align='center'>0.2562</td><td bgcolor='#eeeeec' align='right'>42787648</td><td bgcolor='#eeeeec'>c_ws_plugin__s2member_pro_stripe_utilities::get_event(  )</td><td title='/var/www/openmtbmap.org/htdocs/test3/wp-content/plugins/s2member-pro/src/includes/classes/gateways/stripe/stripe-notify-in.inc.php' bgcolor='#eeeeec'>.../stripe-notify-in.inc.php<b>:</b>66</td></tr>

)

Thanks for your feedback, Felix.

The billing address does not work - I set it to required but it’s not asked for.

Where did you require it? s2Member or Stripe?

(and likely the shipping address neither)

Shipping address doesn’t apply to access sold with s2Member.

depending on the credit card country - Stripe asks for Zip Code

This is the default they give, and what they recommend because it helps prevent fraud and authorize payments.

I can look at how to hide it and make it an optional setting, if possible.

I think this did not happen with the old implementation.

We didn’t have SCA back then either.

especially if I don’t know which country they are from

The postal code is for the card, where it was issued, not for where the person lives. The Stripe Element for the card uses the first digits of the card to determine what country it’s from, and displays the postcal code field dynamically, and expects a different format based on country, too.

Here are international test card numbers that can be used, and you’ll see the postal code change based on the card entered. Some countries don’t show the field at all. https://stripe.com/docs/testing#international-cards

Screenshot_2019-09-25%20Testing%20Stripe

did not receive any mail even though it should have been sent according to the gateway log

So the log says it was sent… Are you sure it’s not in your spam? Could you try the mail logger suggested here so we see if wp-mail sent it? https://s2member.com/kb-article/troubleshooting-email-delivery-problems/

then the payment is failing - I just land back at the same page without anything happening on the users end.

Could you show me the shortcode you used, and the test card you used? And were you logged in or not? Can I see your test page? (send me the link in a message)

Thank you! I look forward to your update. :slight_smile: