Paypal return is still broken

It’s been more than two years since I’ve been to this forum and the problem I came here about back then is still completely broken.

I’ve been running an older S2Member and a horribly old PHP because the Paypal functions were completely broken if I upgraded.

Well, I was just forced to update everything because my site was hacked via S2Member (thanks for that and for providing no warnings about this unless we went looking for them) and now we’re back to the old problem of the site is completely broken for the one thing we need it to do most.

When I return from Paypal to https://myurl.com/?s2member_paypal_return=1 all I get is:

There has been a critical error on this website.

Learn more about troubleshooting WordPress.

I will not be downgrading PHP to see if it works as S2M has already caused me enough grief for not everything being up to date. The PHP we had to use previously was about 10 versions back from the current one.

How do we get S2M to fix their code so it actually works? I’m sick of having to hack the S2M code to do things that should be part of the code. I have had to hack the code three completely different ways just to get different pages on my site to translate (and that’s broken again now because one of them I had to change a core file), I had to add another plugin and some really crappy code that wordpress breaks every time I edit the page just to set my EOTs to a date because had to calculate the days I want instead of being able to just assign a date like any decent program should allow. And now I can’t even take payments because the code is still completely broken for that.

Can anyone recommend another membership program that works? I know I won’t get any answers to the Paypal problem here because I found other people asking a year ago the same thing, and if anyone does answer, it’s so technically convoluted that it makes no sense to me anyway.

I’m really fed up with this program.

So yeah, it’s entirely because S2Member is written broken for PHP 8.0+. Thanks guys. It was released in 2020 and your code still doesn’t work six years later.

After tracking down the broken line, I let an AI fix it. Maybe I’ll have the AI write me something to replace S2Member next.

For me it’s working, current S2 member and php 8.4.6 but I don’t think there is anything breaking in 8.5…

Beginning 2025 s2member was a mess untill the April update due to missing security patches for known vulnerabilities, also the updated PayPal integration in 2026 was unusable in the first public version due to bugs, but currently it runs very well.

Thanks for the reply but it’s broken on my web site.Maybe it’s all related to how much S2M sucks when it comes to working in multiple languages. I have to translate three different ways for different pages on the site, including by hacking the base code for one of them. The encoding from my web site throws an error, and if I have to change the base code to make it work, then it’s broken.

Translation isn’t easy, you need to translate the .mo files. Somewhere here on the forum is a great one for Italian, but the one for German for example is really bad.
I should give it a go with Claude to try to improve this one …

For what is not translated with mo I use say what plugin.

The one thing I’m unable to figure out is how to translate the emails and stick a language tag for email’s into people’s user profiles. So far I just sent multilingual email.

PHP 8.6 looks like it will break a lot however. Bit afraid about how it will behave with various outdated plugins or themes.

I’m using qtranslate xt from GitHub, most other language plugins are causing an utter mess in how they work.

It’s worse than I thought. My Paypal IPN log is showing nothing new while the PDT log has several new payments in it, and S2M is not sending out any emails after people pay.

And my error log is showing none of this as errors, so I don’t even know what’s not working.

But I also have an error in the ezphp plugin, which also comes from the S2M people as the only way to set the EOT to what I want.

I did the mo file. And I had to use javascript to translate the custom fields because S2M gives absolutely no way to do those, and then I had to change a core file to translate those same things on the edit profile page.

Yeah, and the emails. But it seems S2M doesn’t send emails anymore, so I guess that’s not as important as the fact that people pay to use my site but don’t even get an email about it, nor do the admins of the site get an email that someone paid. So only the people who have access to the email that paypal sends even know someone has paid.

PDT works and IPN is non-existent. It shouldn’t be this broken when I update.

“Say what” works for custom fields, but mo file too. However the standard .mo file doesn’t. The italian one published here on the forum does - so it’s just incomplete for the others. That’s why I say start from that italian one, and translate it to other languages.
IPN/PDT working too.
You really shouldn’t use any kind of php plugin, they are huge security holes.

And I guess your email setup itself is broken. S2 does send emails. You really should go back to default up to date s2 and debug from there/do your changes one by one to find what’s going wrong.

I use another plugin for expriging account reminder emails, which isn’t existing anymore but works a bit better vs in-built. And invoices are done via 3rd party provider integrating directly into Stripe/Paypal. Invoices are a crazy minefield and all cheap solutions get them severly wrong, and lucky if right in a couple of jurisdictions. Gonna get worse with mandatory e-invoices.

1 Like

I can understand you’re upset. I’m really sorry you had that trouble. :frowning:

So you have a 2020 release?

I’m not aware of a PHP 8 issue in the last release… What version are you using? Framework and Pro (if you have it)

What error are you getting? If you show me the details I can look into it.

After tracking down the broken line, I let an AI fix it.

And what’s the line? If it’s not fixed in the latest release, I’ll add it for the next one.

Do you mean that the email template isn’t translated, or that it can’t be in separate different languages, like when the site could be used in different languages, and some users use one while others another?

I didn’t know that… I know that it’s in wp’s translations site, but I don’t know German to tell how good it is. I also played with automation to translate, and got some languages I can read, and they looked pretty good. I didn’t try German, would you like me to?

:slight_smile:

The German one simply misses many translations. So yeah would be nice to have them AI done. If they are bad I could correct but the text appearing in English I don’t even know where to start in the .mo file.

I just know the Italian one some user recently published here in the forum is really good.

I think you can even push them as update , Spanish, French, German, Italian should be the major language as Chinese is in a different universe website wise anyhow…

1 Like

Yeah, I did the Italian one. I also did Spanish, French and Portuguese (Brazil). I haven’t published them yet, though. I only shared the Italian one here in the forum, I think.

Let me try making a new German one, in case it works better for you.

:slight_smile:

1 Like

Sorry I still need to finish the Brazilian part. :grimacing:

Most of what I had seen was pretty good, already. I will work more on it soon, I’ll private message you when I have some time for it. I have been a bit overwhelmed for a while, sorry.

I wish everybody here a great day/evening!

:sun_with_face:

1 Like

Here you go:

s2member-de_DE.zip (70.7 KB)

:slight_smile:

1 Like

Can you not actually push them through wordpress updates? Other plugins push the translation files for their plugins on updates. It would be a shame if it’s on the forum only and not all users can profit.
(at least after a quick look over by a native speaker).
This below is what I translate using say what for right now to German and Italian - though I think in most cases Italian exists - but if I translate it for Germany need to do the same for Italian (and I adapted some things a bit). Italian I did with google translate so don*t take it as correct…

Account expires s2member s2member-sc-eot-label [:en]Account expires[:de]Account läuft aus am[:it]L’account scade[:] Edit Delete
Add Billing Method s2member s2member-front [:en]Add Billing Method [:de] Kreditkarte/Debitkarte Hinzufügen [:it]Aggiungi metodo di fatturazione[:] Edit Delete
Billing Address s2member s2member-front [:en]Billing Address[:de]Deine Wohnadresse[:it]Indirizzo di fatturazione[:] Edit Delete
Billing Method s2member s2member-front [:en]Billing Method[:de]Zahlweise[:it]Metodo di fatturazione[:] Edit Delete
Cancel Subscription s2member s2member-front [:en]End Subscription [:de]Abo Beenden [:it]Fine Abbonamento [:] Edit Delete
Cancel your subscription now? s2member [:en]Cancel your subscription now by clicking OK?[:de]Mit OK bestätigst du dein Abo jetzt zu Beenden[:it]Annulla ora l’abbonamento cliccando su OK?[:] Edit Delete
Checkout Now s2member s2member-front [:en]Pay Now [:de] Jetzt Bezahlen [:it]Paga ora[:] Edit Delete
Checkout Options s2member s2member-front [:en]Checkout Options[:de]Bezahloptionen[:it]Opzioni di pagamento[:] Edit Delete
City / Town s2member s2member-front [:en]City / Town[:de]Stadt[:it]Città[:] Edit Delete
Country s2member s2member-front [:en]Country of Residence[:de]Land des Wohnortes[:it]Paese di residenza[:] Edit Delete
Create Profile s2member s2member-front [:en]User Profile data[:de]Zugangsdaten festlegen[:it]Dati del profilo utente[:] Edit Delete
Nothing to cancel. You’re NOT a paid Member. s2member s2member-front [:en]You have no Subscription via Stripe. (but maybe via Paypal - please see “cancel PayPal subscribtions”)[:de]Du hast keine Subscription via Stripe (aber evtl mit Paypal - bitte siehe "Beende Paypal Subscriptions/abo)[:it]Non hai un abbonamento tramite Stripe. (ma potresti averlo tramite PayPal - consulta la sezione “Annulla abbonamenti PayPal”)[:] Edit Delete
Password (please type it twice) s2member s2member-front [:en]Password (6 characters minimum - type this twice please) [:de]Passwort (6 Zeichen minimal - zweimal eingeben)[:it]Password di almeno 6 caratteri (digitala due volte, per favore)[:] Edit Delete
Password (type this twice please) s2member s2member-front [:en]Password (6 characters minimum - type this twice please) [:de]Passwort (6 Zeichen minimal - zweimal eingeben)[:it]Password di almeno 6 caratteri (digitala due volte, per favore)[:] Edit Delete
Postal / Zip Code s2member s2member-front [:en]Postal / Zip Code[:de]Postleitzahl[:it]Codice Postale[:] Edit Delete
Register For This Site s2member s2member-front [:en]Register your OpenMTBMap Account Here[:de]Registriere dich hier für OpenMTBMap[:it]Registra qui il tuo account OpenMTBMap[:] Edit Delete
Save All Changes s2member s2member-front [:en]Save All Changes in your Profile [:de]Speichere Änderungen in deinem Profil [:it]Salva tutte le modifiche nel tuo profilo[:] Edit Delete
State / Province s2member s2member-front [:en]State / Province [:de]Bundesland [:it]Regioni[:] Edit Delete
Street Address s2member s2member-front [:en]Street and Housenumber[:de]Straße und Hausnummer[:it]Via e Numero Civico[:] Edit Delete
Submit Form s2member s2member-front [:en]Pay Now[:de]Jetzt Bezahlen[:it]Paga Adesso[:] Edit Delete
Subscription cancelled. s2member [:en]Your Subscription is cancelled - Please reload page to see how long your account is still active[:de]Dein Abo ist nun gekündigt - bitte lade die Seite neu um zu sehen wann dein Konto ausläuft [:it]Il tuo abbonamento è stato annullato. Ricarica la pagina per verificare per quanto tempo il tuo account rimarrà attivo.[:] Edit Delete
to cancel your account. s2member s2member-front [:en]Cancel your account paid via Stripe (for Paypal - please scroll down)[:de]Stripe Abo kündigen ( für Paypal bitte runterscrollen). [:it]Annulla l’abbonamento pagato tramite Stripe (per PayPal scorri verso il basso)[:] Edit Delete
Unsubscribe s2member [:en]Unsubscribe[:de]Kündigen[:it] annullare l’iscrizione[:] Edit Delete
Username (lowercase alphanumeric) s2member s2member-front [:en]Username (lowercase letters and/or numbers)[:de]Username - Kleinbuchstaben und/oder Ziffern)[:it]Nome utente (lettere minuscole e/o numeri)[:] Edit Delete
Username (lowercase letters and/or numbers) s2member s2member-front [:en]Username (lowercase letters and/or numbers)[:de]Username - Kleinbuchstaben und/oder Ziffern)[:it]Nome utente (lettere minuscole e/o numeri)[:]

I will try… I’m not very familiar with the translations site yet. From what I read, it seems I can submit the first time via the release, but later edits have to happen via their interface, I can’t just push a new PO file with the next release to update it.

But in the mean time, if you want, take a look at the PO file I gave you, or try the MO one in your site, and see if you notice an improvement in the texts that you didn’t like before.

:slight_smile:

yep - will have a look now and check it out.

1 Like

Did you really just suggest I not use the additional plugin that S2Member literally told me to use on their own web site but maybe I should use an old and unsupported one that you do? And then use several others because you can’t get S2M to do other functions that it has built in already? And then you told me to go back to the default code that I installed four days ago when I came here to find out how to make it not broken?

When I expected no replies or highly technical over my head replies here, I did not expect someone to tell me to do something so dumb.

The Paypal utilities use a function that drops an error, which used to drop a warning before PHP 8. It was in the converting of the return data because PHP thinks it’s is invalid. I don’t even know why it needs to be converted, or why S2M is sending that charset to Paypal to begin with, but there it is. My whole site is in UTF-8. I think it was line 72, and then the same code repeated again in the file. Once I corrected both of them, both the PDT and IPN worked.

value = @mb_convert_encoding($value, "UTF-8", (($postvars["charset"] === "gb2312") ? "GBK" : $postvars["charset"]));

Next, I have to track down the hacks I needed for the custom fields to be translated and put those back too. Also forcing some things to be left-to-right while also seeming to be supportive of translation seems like an odd decision by the programmers.

That plugin was advised for use years ago. It’s a huge security risk so stop using it.

Say what isn’t a security risk and pretty easy code wise to what I can tell. It’s also supported.

But again look at the mo files. Everything can be translated except email’s.

The plugin that, to this day, is listed on the S2M web site as the best solution to do what I need the code to do is a security risk? Then why is it still here? Why in all these years hasn’t S2M just added that functionality into their own code instead of offering up another plugin to fix it? That would have been a simpler and more logical move.

I don’t need another translation program. I already have two.

And no, the mo files cannot translate everything, not by a long shot. I specifically mentioned things that it can’t translate. And in some pages, I can’t even hack the translation with javascript and have to change the core code to do it.

But thanks for playing. Maybe I’ll come back to post when I get to hacking the stuff that S2M won’t allow me to translate so that you and others can change the topic on that thread too.