Page 1 of 1

S2Member Pro with standard PayPal

PostPosted: August 13th, 2010, 8:38 am
by schop
Hi,

I'm thinking about purchasing the pro version of s2member, but I have the following question:

The main reason I would like to o to s2Member Pro i the import/export feature, that I need for a client. The client does not want to commit to a PayPal Pro account though.

Does s2Member Pro still work with a standard PayPal account?

Re: S2Member Pro with standard PayPal

PostPosted: August 13th, 2010, 11:10 am
by Elizabeth
Does s2Member Pro still work with a standard PayPal account?

Yes.
The only difference is, you will have to use PayPal Buttons vs the PayPal Forms.

On a side not, you can apply for PayPal Express Checkout (it's free) with a standard business PayPal account; then you will be able to use the PayPal Forms with s2Member Pro.

Re: S2Member Pro with standard PayPal

PostPosted: August 18th, 2010, 12:28 am
by Jason Caldwell
On a side not, you can apply for PayPal Express Checkout (it's free) with a standard business PayPal account; then you will be able to use the PayPal Forms with s2Member Pro.

Yes, that's a very good point. For those of you out there, who may get declined for PayPal Pro service, you can always be approved for Express Checkout. If you can get Express Checkout enabled, then you WILL get an API Key that works with s2Member. You won't be able to accept Visa,Mastercard directly on your site, but you can still use the s2Member Pro integration, by adding this additional attribute to your PayPal Form Shortcodes, even without having a real Pro account.
Code: Select all
accept_via_paypal="paypal,visa,mastercard,amex,discover,maestro,solo"

Re: S2Member Pro with standard PayPal

PostPosted: November 18th, 2010, 2:23 pm
by flip4520
We are also in the situation where we can't get Paypal Pro, but we do have Express Checkout and an API key.

So our setup is S2member Pro with Standard Paypal Business account plus Express Checkout (so an API key).

As I understand the above this enables us to use Paypal forms rather than buttons with s2member pro - we want to use forms because we want registrants to complete and submit all profile information before they are taken to the payment stage via Paypal stage. This I understand is only possible with S2member Pro.

Now with our Paypal account we also use it to process payments through an event registration script. This script also requires the IPN url feature.

In the Paypal IPN Integration screen of S2member pro there is some guidance regarding the option of using a central IPN processing script in cases where two or more scripts were needing to use different Paypal IPN url via one Paypal account.

My question is - do we need to use such a script in our case, where it is a standard Paypal business account with API obtained via Express Checkout registration that is used, not a Paypal Pro account? Do the restrictions on multiple IPN urls applicable to the Pro account apply?

Hope the above makes sense, I'd really like to use the forms over the buttons if possible, but ultimately expect the ability to run two Paypal integrated scripts would take priority for the client.

Thanks

Re: S2Member Pro with standard PayPal

PostPosted: November 19th, 2010, 9:16 pm
by Jason Caldwell
flip4520 wrote:My question is - do we need to use such a script in our case, where it is a standard Paypal business account with API obtained via Express Checkout registration that is used, not a Paypal Pro account? Do the restrictions on multiple IPN urls applicable to the Pro account apply?

Yes, if you're using s2Member Pro "Forms" instead of just "Buttons", and if you are running other sites that depend on your existing PayPal.com account configuration, you will absolutely need a central IPN processor that receives IPN responses from PayPal and then forwards them to the proper software installation.

Please have a look inside this directory of your installation:
/wp-content/plugins/s2member-pro/extras/central-ipn-sample.php
( this is an example script, along with full instructions )

* It doesn't matter if you're using an actual PayPal Pro Account, what matters is how you're integrating s2Member. If you're integrating s2Member using Pro "Forms" that come with s2Member Pro, and your PayPal account is already configured for another site that you're running, you will need the central IPN script. Please let me know if you need assistance with this.

Re: S2Member Pro with standard PayPal

PostPosted: November 23rd, 2010, 2:54 pm
by flip4520
Thanks for that Jason, I would appreciate some assistance with the script setup. That's great to hear.

I will send an email with the details shortly.

Re: S2Member Pro with standard PayPal

PostPosted: April 27th, 2011, 5:28 pm
by adriarichards
I will need assistance with the IPN Centralized script as well. Are there documentation updates for this since November 2010?

Re: S2Member Pro with standard PayPal

PostPosted: April 29th, 2011, 1:13 pm
by Jason Caldwell
I'm attaching an example for you.
This is a central IPN processing script, and instructions are included.
Code: Select all
<?php
/*
Copyright: © 2009 WebSharks, Inc. ( coded in the USA )
<mailto:support@websharks-inc.com> <http://www.websharks-inc.com/>
*/
@ignore_user_abort(true);
/*
---- Central IPN Processing: ---------------------------------------------------------------------------------

With PayPal® Pro integration you absolutely MUST set an IPN URL inside your PayPal® account.
PayPal® Pro integration does NOT allow the IPN location to be overridden on a per-transaction basis.

So ... if you're using a single PayPal® Pro account for multiple cross-domain installations,
and you need to receive IPN notifications for each of your domains; you'll want to create
a central IPN processing script that scans variables in each IPN response,
forking itself out to each of your individual domains.

In rare cases when this is necessary, you'll find two variables in all IPN responses for s2Member.
The originating domain name will always be included somewhere within, either:
`custom` and/or `rp_invoice_id`; depending on the type of transaction.

These variables can be used to test incoming IPNs, and fork to the proper installation.

---- Instructions: -------------------------------------------------------------------------------------------

1. Set the IPN URL ( in your PayPal® account ) to the location of this script on your server.
    This central processor forks IPNs out to a particular installation of s2Member ( on a particular domain ).

2. Now, here's where the magic happens ( PLEASE CHANGE: www.site1.com, www.site2.com. ).
*/
if (stripos ($_POST["custom"], "www.site1.com") !== false || stripos ($_POST["rp_invoice_id"], "www.site1.com") !== false)
    curlpsr ("http://www.site1.com/?s2member_paypal_notify=1", http_build_query ($_POST));
/**/
elseif (stripos ($_POST["custom"], "www.site2.com") !== false || stripos ($_POST["rp_invoice_id"], "www.site2.com") !== false)
    curlpsr ("http://www.site2.com/?s2member_paypal_notify=1", http_build_query ($_POST));
/*
This is just a utility function ( you must have the cURL extension for PHP enabled ).
*/
function curlpsr ($url = FALSE, $postvars = array (), $max_con_secs = 20, $max_stream_secs = 20, $headers = array ())
    {
        if (($url = trim ($url)) && ($c = curl_init ()))
            {
                if (is_array ($postvars)) /* Because cURL can't deal with complex arrays. */
                    /* Since cURL can't deal with complex arrays, we force this to a query string. */
                    $postvars = http_build_query ($postvars);
                /**/
                curl_setopt_array ($c, /* Configure options. */
                array (CURLOPT_URL => $url, CURLOPT_POST => true,/**/
                CURLOPT_FOLLOWLOCATION => false, CURLOPT_MAXREDIRS => 0,/**/
                CURLOPT_CONNECTTIMEOUT => $max_con_secs, CURLOPT_TIMEOUT => $max_stream_secs, /* Initial connection & stream seconds. */
                CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => $postvars,/**/
                CURLOPT_ENCODING => "", CURLOPT_VERBOSE => false, CURLOPT_FAILONERROR => true, CURLOPT_FORBID_REUSE => true, CURLOPT_SSL_VERIFYPEER => false));
                /**/
                $o = trim (curl_exec ($c));
                /**/
                curl_close($c);
            }
        /**/
        return (!empty ($o)) ? $o : false;
    }
?>

* Please let us know if you have any trouble.