S2 Button code suddenly not working with PayPal

Yeah the MemberPress price would definitely be a deal breaker for 100 sites.

I don’t know what to do. I think for me, MemberPress is the best solution but I need to watch all of their YouTube videos to learn how it works. Even if I have to manually migrate my s2Members into MemberPress, there’s only a few hundred of them. I think I could handle it.

as long as you forbid a user to pay for another year while his account is still active and the user expects that time to be added - you are fine. If a user after 6 months buys another year - it would mean 1 year from now not 1.5 years.
Also you need one button for 1 month, another button for 1 year. No dropdown where you can say select 10 different timelength (well s2member profrom sucks big here as well as it needs to reload the page to change the timeframe, my paypal button needs no reload for changing the time length).

Here’s a crazy thought. Is it possible to have s2Member and MemberPress restricting content at the same time so current s2Members don’t even know anything has changed until they go to renew, at which point they are presented with the MemberPress payment page and are then switched over to MemberPress? Does that make sense? So instead of migrating existing users, nothing changes for them until renewal time.

I find that is actually cheap! No kidding. But it needs to be polished and fully support what I want. I once paid 5% of my yearly turnover to get a dev implement a VAT solution with s2member and import the country data of the users based on data found in emails…
I pay a little over 1% of turnover to quaderno.io. on average around 4% of turnover for payment processors. I would well pay 500€ per year for a top notch checkout process. But one that I can fully customize with the fields that I need to have, that doesn’t reload the page like s2member proforms on changing the price, that allows porting subscriptions to a new Stripe account, and that doesn’t ever drop payments like s2member paypal does from time to time (very rare but happens).

Here’s something to think about. From my CTO:

“The current weirdness we are seeing timeline coincides with the s2member the Version 230504 update - basically all the problems started occurring within 14 hours of all the sites being updated to that Version. Possibly a coincidence - it is still possible there is an issue with PayPal that is TRIGGERED by some code in that update. Could even be a typo in an API call causing a “default settings” cascade”

Sid

that will not work as memberpress uses different user roles - and the protection concept is very different. Well maybe you could add the new userroles to s2member users. Then use membpress to protect any content.
Because you cannot double protect content.

I guess the obvious question would be, did you try reverting back to the previous version?

Yeah, except these are brand new sites - not really generating the income to pay that (and our team) yet. We have a rather unique business model. LOL

Sid

Nope - I had many subscriptions started while using that update - using it for some weeks.
Downgrade it and give it a try - that’s super easy.
Once logged in - you can download all releases here:
https://s2member.com/release-archive/

Is still seems incredibly odd to me that there are not more people reporting this issue, not just here but anywhere, if it is indeed a PayPal update causing it.

I would also guess this is due to some problem in the way s2member connects to paypal - and other solutions survived the update on the old interface. Likely a tiny bug.
Otherwise both buy now and subscription should be affected.

Maybe related to the way subscriptions set first period as trial period? That concept is pretty unique to s2member.

True - think my CTO is correct. Problem doesn’t manifest unless triggered.

However, PayPal IS PUSHING to everyone to use the new systems. Sooner or later, the issue will be more widespread. Might as well bite the bullet now.

If simple membership does use the new stuff, and payments work, they do have an api, so the guys can write code to manage other stuff. Easy to write something that moves any member that cancels to level 0 (Simple has levels) which locks them out. We have a network wide management system now.

Sid

KEEP IN MIND - the problem doesn’t just give the user a pay screen. It gives the a “cart” pay screen. If they put in any value and make a payment, it DOES go thru - but NOT as a subscription, as “single purchase” item. Took us a while to notice that. It is what created that “no parameters” error on the s2 return page. It wasn’t processed as a subscription, so none of those parameters were passed back to s2.

Can you remove the trial period? Or is that something you need to offer?

Are you still going to try Simple Membership?

Here is something interesting.
The s2 button creator (actual example) creates
this shortcode:

[s2Member-PayPal-Button level="2" ccaps="" desc="Full APP Membership / Full Access To Entire Software Platform and More" ps="paypal" lc="" cc="USD" dg="0" ns="1" custom="*[redacted]*.deadeasyapps.com" ta="0" tp="0" tt="D" ra="0.72" rp="1" rt="M" rr="1" rrt="" rra="1" image="default" output="button" /]

Which s2 says in the s2 button creator "ultimately, your Shortcode will produce this snippet":

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

 <input type="hidden" name="business" value="*[redacted]*@*[redacted]*.com" />
 <input type="hidden" name="cmd" value="_xclick-subscriptions" />
 <!-- Instant Payment Notification & Return Page Details -->
 <input type="hidden" name="notify_url" value="https://*[redacted]*.deadeasyapps.com/?s2member_paypal_notify=1" />
 <input type="hidden" name="cancel_return" value="https://*[redacted]*.deadeasyapps.com/" />
 <input type="hidden" name="return" value="https://*[redacted]*.deadeasyapps.com/?s2member_paypal_return=1" />
 <input type="hidden" name="rm" value="2" />
 <!-- Configures Basic Checkout Fields -->
 <input type="hidden" name="lc" value="" />
 <input type="hidden" name="no_shipping" value="1" />
 <input type="hidden" name="no_note" value="1" />
 <input type="hidden" name="custom" value="*[redacted]*.deadeasyapps.com" />
 <input type="hidden" name="currency_code" value="USD" />
 <input type="hidden" name="page_style" value="paypal" />
 <input type="hidden" name="charset" value="utf-8" />
 <input type="hidden" name="item_name" value="Full APP Membership" />
 <input type="hidden" name="item_number" value="2" />
 <!-- Configures s2Member's Unique Invoice ID/Code  -->
 <input type="hidden" name="invoice" value="<?php echo S2MEMBER_VALUE_FOR_PP_INV(); ?>" />
 <!-- Identifies/Updates An Existing User/Member (when/if applicable)  -->
 <input type="hidden" name="on0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON0; ?>" />
 <input type="hidden" name="os0" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS0; ?>" />
 <!-- Identifies The Customer's IP Address For Tracking -->
 <input type="hidden" name="on1" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_ON1; ?>" />
 <input type="hidden" name="os1" value="<?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_OS1; ?>" />
 <!-- Controls Modify Behavior At PayPal Checkout -->
 <input type="hidden" name="modify" value="0" />
 <!-- Customizes Prices, Payments & Billing Cycle -->
 <!--<input type="hidden" name="amount" value="8.72" />-->
 <input type="hidden" name="src" value="1" />
 <input type="hidden" name="srt" value="" />
 <input type="hidden" name="sra" value="1" />
 <!--<input type="hidden" name="a1" value="0" />-->
 <!--<input type="hidden" name="p1" value="0" />-->
 <!--<input type="hidden" name="t1" value="D" />-->
 <input type="hidden" name="a3" value="8.72" />
 <input type="hidden" name="p3" value="1" />
 <input type="hidden" name="t3" value="M" />
 <!-- Displays The PayPal Image Button -->
 <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif" style="width:auto; height:auto; border:0;" alt="PayPal" />
</form>

but if you use THAT code it gives you an error:

**# Access Denied.**
You don't have permission to access "/cgi-bin/webscr" on this server.

The Https://paypal.com/cgi-bin/webscr is DEPRECATED

The LINK that is actually sent to PayPal:

https://www.paypal.com/webapps/shoppingcart?flowlogging_id=f475976db7c93&mfid=1687718699009_f475976db7c93#/checkout/openButton

Which is their new checkout system shopping cart!

Whatever s2 is sending Paypal, is getting changed (some trigger - PROBABLY the cgi-bin/webscr thing) to the default shopping cart single purchase button without an amount.

The variable for “amount” are different for single purchase cart button than for a subscription or subscribe button.

I think we are definitely looking at a triggered error that results in the default button.

Sid

That is interesting. But I’m guessing there’s no way to fix the problem?

How do you test the full link?
What about other plugins that still work? Has anyone got the full form input from say mrmberpress or simple membership in the old format? If we could compare their subscription button Form Vs s2member it likely would solve the problem until it’s really defunct

Actually for me the form itself doesn’t work at all anymore - only the shortcodes work - otherwise I get forbidden…

I wonder what would happen if we set
name=“cmd” value="_xclick"
instead of
name=“cmd” value="_xclick-subscriptions"

But then keep RR as 0 or 1 instead of BN. Otherwise the form is identical. I’m sure previously I could run the form from my website instead of the shortcode. Because now I also just get the 403 access denie with any kind of direct form. Button is well visible so I think the php is correctly executed?.

Another possiblity would be to encode the button.
_s-xclick
https://developer.paypal.com/api/nvp-soap/paypal-payments-standard/integration-guide/Appx-websitestandard-htmlvariables/?mark=handling_cart

I feel like part of your post is missing. :slight_smile: