latest stable versions: v150827 (changelog)

Old Forums (READ-ONLY): The community now lives at WP Sharks™. If you have an s2Member® Pro question, please use our new Support System.

Jason (Lead Developer)

Staff Member

My Latest Replies (From Various Topics)

Viewing 25 replies - 1,276 through 1,300 (of 1,909 total)
Author Replies
Author Replies
Posted: Tuesday Aug 28th, 2012 at 9:32 pm #23363
Staff Member

Thanks for the heads up on this thread.

@Mark

I just tested an s2Member protected file download with remote authentication using a Motorola Atrix running Android v2.3.6 and it works fine from my end of things. I’m prompted for my username/password and upon entering the proper credentials, the file download begins.

If problems persist on your end, can you please let us know the specifics of what fails during your tests. For instance, does the username/password authentication window not open at all? Or it opens, but fails to authenticate you?

I would try testing in the phone’s browser first. If it works there, but does not work in specific Apps, it could be related to the app itself, which might NOT be capable of dealing with protected content that requires remote authentication to access. Some apps are incapable of sending the “Authorization” header, or dealing with a 401 header in an HTTP response, which is something that browsers ARE capable of.

Posted: Tuesday Aug 28th, 2012 at 5:48 pm #23356
Staff Member

I should also add the following…

In no case will s2Member attempt to cancel billing profiles and/or existing charges of any kind, which are associated with a completely different payment gateway. In other words, even if you integrate PayPal, PayPal Pro, or Authorize.Net, the upgrade/downgrade processes are limited in scope, to the current gateway, and s2Member will not look for other charges which might have been associated with another payment gateway (e.g. a gateway other than the one currently in use during checkout).

Posted: Tuesday Aug 28th, 2012 at 5:43 pm #23355
Staff Member

Thanks for the heads up on this thread.

s2Member working together with PayPal, PayPal Pro, or with Authorize.Net; will automatically cancel previous billing profiles during an upgrade and/or downgrade from one Membership Level to another. So these are the payment gateways I would recommend for the scenario you mentioned.

With ccBill, ClickBank and Google Checkout, automated cancellations are not possible for s2Member (i.e. the gateways APIs do not allow for such a thing to occur from the s2Member side of things), it must be handled manually, or by the customer.

In other words, if a customer is upgrading and/or downgrading his account, under a ClickBank and/or Google Checkout subscription, they will need to cancel any previous billing plans they have with you (in most cases), by contacting you (or by contacting ClickBank directly). Or, in the case of Google Checkout, the customer can log into their Google Wallet account and cancel charges from there.

In either of these cases, cancellation is handled manually, and then s2Member is notified automatically behind-the-scene that a cancellation took place, and it will terminate whatever site access was associated with the billing plan, at the correct point in time.

NOTE: In the case of ClickBank… ClickBank provides customers with a link which allows them to request cancellation via ClickBank directly: https://www.clickbank.com/orderDetail.htm

This can also be introduced to a customer through an
s2Member Pro ClickBank Cancellation Button, as seen in the screenshot below.

The same is true for Google Checkout, as seen in the screenshot below.

Posted: Tuesday Aug 28th, 2012 at 5:19 pm #23350
Staff Member

Thanks for the heads up on this thread.

PayPal’s product availability chart can be found here:
https://cms.paypal.com/us/cgi-bin?cmd=_render-content&content_ID=developer/howto_product_matrix

Website Payments Pro is available in the US (including Alaska/Hawaii), the UK, and Canada.
Payflow Pro is available in the US (including Alaska/Hawaii), and in Australia.

However, s2Member Pro Forms are NOT currently compatible with Payflow Pro as a stand-alone product. s2Member Pro Forms are compatible with PayPal Pro accounts, and with PayPal Pro accounts operating under the Payflow edition, but in Australia that is currently NOT possible unfortunately (e.g. s2Member Pro Forms work best when integrated with PayPal Pro, or PayPal Pro Payflow Edition).

That being said, s2Member Pro Forms are compatible with Express Checkout (available in all countries, including Australia), and if implemented properly, Express Checkout can be integrated with s2Member Pro Forms exclusively. Making it possible to accept coupon codes, collect custom fields, etc, etc… via Pro Forms, and then the actual checkout process is handled by PayPal Express Checkout (either with a PayPal account, or with a credit card, if the customer does not have a PayPal account).

Please see this article for further details regarding Express Checkout:
Pre Sale FAQs » To use s2Member® Pro Forms, will I have to use PayPal® Pro?

The only limitation that bothers some site owners using Express Checkout exclusively, is that PayPal requires the customer to have a PayPal account (if, and only if), you are collecting recurring charges. If you’re not collecting recurring fees, there should be little standing in your way with Express Checkout.

Posted: Tuesday Aug 28th, 2012 at 4:47 pm #23344
Staff Member

Cristian brought to my attention…

You posted this script, which is a hack that we posted some time ago, but should still work as expected.

<?php
/*
---- Configuration. -------------------------------------------------------------------------------------------------------*/

/* s2Member installation domain. */
$config&#91;"custom"&#93; = "www.wpskillset.com";

/* s2Member Membership Level# */
$config&#91;"item_number"&#93; = "1";

/* s2Member Proxy IPN URL handler. - You'll get this from Dashboard: `s2Member -> PayPal Options -> IPN Integration -> Proxy IPN URL`. */
$config["proxy_ipn_handler_url"] = "http://www.wpskillset.com/?s2member_paypal_notify=1";

/* Or use "http://www.wpskillset.com/?s2member_paypal_notify=1&s2member_paypal_proxy=proxy&s2member_paypal_proxy_verification=12b122ba5812a0fcdfb1a1613727464d";  */

/*
---- Do NOT edit anything below, unless you know what you're doing. --------------------------------------------------------*/
@ignore_user_abort(true);
header("HTTP/1.0 200 OK");
header("Content-Type: text/plain; charset=utf-8");
eval /* Clean buffers. */('while (@ob_end_clean ());');

if( /* No ``$_POST`` vars? */empty($_POST) || !is_array($_POST))
	exit /* Exit now. There is nothing to process. */();
	
$_p = (get_magic_quotes_gpc()) ? stripslashes_deep($_POST) : $_POST;
$_p = trim_deep /* Now trim this array deeply. */($_p);

$_paypal_ipn_server_ip = $_ip = /* Forge IP address to match the PayPal® IPN server here. */ "216.113.188.202";
/* See list of IPs here: <https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_golivechecklist>. */

$_p["custom"] = $config["custom"]; $_p["item_number"] = $config["item_number"];
echo (trim(curlpsr($config["proxy_ipn_handler_url"], http_build_query($_p, null, "&"), 20, 20, array("REMOTE_ADDR: ".$_ip, "HTTP_X_FORWARDED_FOR: ".$_ip))));

unset($_paypal_ipn_server_ip, $_ip);
/*
---- Do NOT edit anything below, unless you know what you're doing. --------------------------------------------------------*/
function trim_deep($value = FALSE)
	{
		return is_array($value) ? array_map("trim_deep", $value) : trim((string)$value);
	}
function stripslashes_deep($value = FALSE)
	{
		return is_array($value) ? array_map("stripslashes_deep", $value) : stripslashes((string)$value);
	}
function curlpsr($url = FALSE, $post_vars = array(), $max_con_secs = 20, $max_stream_secs = 20, $headers = array())
	{
		if(($url = trim($url)) && ($curl = curl_init()))
			{
				if /* Because cURL can't deal with complex arrays. */(is_array($post_vars))
					$post_vars = http_build_query($post_vars);
				$follow = (!ini_get("safe_mode") && !ini_get("open_basedir"));
				curl_setopt_array($curl, array(CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_CONNECTTIMEOUT => $max_con_secs, CURLOPT_TIMEOUT => $max_stream_secs, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => $post_vars, CURLOPT_FOLLOWLOCATION => $follow, CURLOPT_MAXREDIRS => (($follow) ? 5 : 0), CURLOPT_ENCODING => "", CURLOPT_VERBOSE => false, CURLOPT_FAILONERROR => true, CURLOPT_FORBID_REUSE => true, CURLOPT_SSL_VERIFYPEER => false));
				$o = trim(curl_exec($curl));
				curl_close($curl);
			}
		return (!empty($o)) ? $o : false;
	}
?>

In this script/hack, the custom and item_number variables are set explicitly, as seen in this portion of the code:

$_p["custom"] = $config["custom"]; $_p["item_number"] = $config["item_number"];

Since the custom and item_number variables are NOT being filled in however (according to your log files), I suspect one of the following is happening.

1. Your PayPal account is NOT actually processing IPNs through this script, and instead it’s processing them directly, or through another central IPN processing script somewhere?

2. You’ve made some modifications to the above script?

If problems persist, I recommend that you attach a logging routine to this script, so you/we can see the results. Here is the full code you posted above, with an extra line of code that logs the full set of POST data being processed.

<?php
/*
---- Configuration. -------------------------------------------------------------------------------------------------------*/

/* s2Member installation domain. */
$config&#91;"custom"&#93; = "www.wpskillset.com";

/* s2Member Membership Level# */
$config&#91;"item_number"&#93; = "1";

/* s2Member Proxy IPN URL handler. - You'll get this from Dashboard: `s2Member -> PayPal Options -> IPN Integration -> Proxy IPN URL`. */
$config["proxy_ipn_handler_url"] = "http://www.wpskillset.com/?s2member_paypal_notify=1";

/* Or use "http://www.wpskillset.com/?s2member_paypal_notify=1&s2member_paypal_proxy=proxy&s2member_paypal_proxy_verification=12b122ba5812a0fcdfb1a1613727464d";  */

/*
---- Do NOT edit anything below, unless you know what you're doing. --------------------------------------------------------*/
@ignore_user_abort(true);
header("HTTP/1.0 200 OK");
header("Content-Type: text/plain; charset=utf-8");
eval /* Clean buffers. */('while (@ob_end_clean ());');

if( /* No ``$_POST`` vars? */empty($_POST) || !is_array($_POST))
	exit /* Exit now. There is nothing to process. */();
	
$_p = (get_magic_quotes_gpc()) ? stripslashes_deep($_POST) : $_POST;
$_p = trim_deep /* Now trim this array deeply. */($_p);

$_paypal_ipn_server_ip = $_ip = /* Forge IP address to match the PayPal® IPN server here. */ "216.113.188.202";
/* See list of IPs here: <https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_golivechecklist>. */

$_p["custom"] = $config["custom"]; $_p["item_number"] = $config["item_number"];
file_put_contents(dirname(__FILE__)."/paypal-proxy-ipn.log", var_export($_p, TRUE)."\n\n", FILE_APPEND);
echo (trim(curlpsr($config["proxy_ipn_handler_url"], http_build_query($_p, null, "&"), 20, 20, array("REMOTE_ADDR: ".$_ip, "HTTP_X_FORWARDED_FOR: ".$_ip))));

unset($_paypal_ipn_server_ip, $_ip);
/*
---- Do NOT edit anything below, unless you know what you're doing. --------------------------------------------------------*/
function trim_deep($value = FALSE)
	{
		return is_array($value) ? array_map("trim_deep", $value) : trim((string)$value);
	}
function stripslashes_deep($value = FALSE)
	{
		return is_array($value) ? array_map("stripslashes_deep", $value) : stripslashes((string)$value);
	}
function curlpsr($url = FALSE, $post_vars = array(), $max_con_secs = 20, $max_stream_secs = 20, $headers = array())
	{
		if(($url = trim($url)) && ($curl = curl_init()))
			{
				if /* Because cURL can't deal with complex arrays. */(is_array($post_vars))
					$post_vars = http_build_query($post_vars);
				$follow = (!ini_get("safe_mode") && !ini_get("open_basedir"));
				curl_setopt_array($curl, array(CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_CONNECTTIMEOUT => $max_con_secs, CURLOPT_TIMEOUT => $max_stream_secs, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => $post_vars, CURLOPT_FOLLOWLOCATION => $follow, CURLOPT_MAXREDIRS => (($follow) ? 5 : 0), CURLOPT_ENCODING => "", CURLOPT_VERBOSE => false, CURLOPT_FAILONERROR => true, CURLOPT_FORBID_REUSE => true, CURLOPT_SSL_VERIFYPEER => false));
				$o = trim(curl_exec($curl));
				curl_close($curl);
			}
		return (!empty($o)) ? $o : false;
	}
?>

The line that handles logging, is as follows:

file_put_contents(dirname(__FILE__)."/paypal-proxy-ipn.log", var_export($_p, TRUE)."\n\n", FILE_APPEND);

So you’ll want to monitor this file in the same directory: paypal-proxy-ipn.log

Posted: Tuesday Aug 28th, 2012 at 4:32 pm #23343
Staff Member

Thanks for the heads up on this thread.

What you’ve done is just fine, so far as I can tell from your post.

If you’re not using Pro Forms, there really is no benefit to using s2Member Custom Fields over those provided by BuddyPress. So what you have will be just fine. Either way, the field data is tied directly to specific members of your site, and that’s what’s important here.

Posted: Monday Aug 27th, 2012 at 7:14 pm #23216
Staff Member

Posted: Monday Aug 27th, 2012 at 7:07 pm #23214
Staff Member

Thanks for the heads up on this thread.

Regarding this log entry you posted earlier…

This log entry is missing the custom variable, which s2Member expects (i.e. requires) that it start with the installation domain name. This IPN would pass fine, if custom were set to:

custom=www.wpskillset.com

Also, the item_number MUST match up with an s2Member Membership Level #.

item_number=1 (indicating the IPN is granting access to Membership Level #1).

Other than those two variables, everything else is fine. s2Member only requires special attention to these two variables, as everything else processed by s2Member follows the PayPal Standard IPN variables strictly.

PHP v5.2.17 :: WordPress® v3.4.1 :: s2Member® v120703 :: s2Member® Pro v120703
Memory 44.79 MB :: Real Memory 45.00 MB :: Peak Memory 44.86 MB :: Real Peak Memory 45.00 MB
www.wpskillset.com/?s2member_paypal_notify=1
User-Agent: 
array (
  'mc_gross' => '1.00',
  'invoice' => '5421999',
  'protection_eligibility' => 'Ineligible',
  'payer_id' => 'JZJE3GFFKQ7RS',
  'tax' => '0.00',
  'payment_date' => '01:05:03 Aug 17, 2012 PDT',
  'payment_status' => 'Completed',
  'charset' => 'windows-1252',
  'first_name' => 'sudhir',
  'mc_fee' => '0.34',
  'notify_version' => '3.6',
  'custom' => '',
  'payer_status' => 'verified',
  'business' => '111@222.com',
  'quantity' => '1',
  'verify_sign' => 'AJ8AOnKio3Pt0.vQM31eNl-CpUrlA5xWtq2FATYdippjkz0cruqjq7w1',
  'payer_email' => 'sudhir2krishnan@gmail.com',
  'txn_id' => '76681356UX670160S',
  'payment_type' => 'instant',
  'last_name' => 'krishnan',
  'receiver_email' => '111@111.com',
  'payment_fee' => '0.34',
  'receiver_id' => 'CSLAJAGCH2RJS',
  'txn_type' => 'web_accept',
  'item_name' => 'Quality Wordpress Websites - Video Tutorials Course',
  'mc_currency' => 'USD',
  'item_number' => 'wso_mrchh5_5421999',
  'residence_country' => 'US',
  'handling_amount' => '0.00',
  'transaction_subject' => 'Quality Wordpress Websites - Video Tutorials Course',
  'payment_gross' => '1.00',
  'shipping' => '0.00',
  'ipn_track_id' => 'db80807d6d8a2',
  's2member_log' => 
  array (
    0 => 'IPN received on: Fri Aug 17, 2012 8:05:11 am UTC',
    1 => 's2Member POST vars verified through a POST back to PayPal®.',
    2 => 'Unable to verify `$_SERVER["HTTP_HOST"]`. Please check the `custom` value in your Button Code. It MUST start with your domain name.',
  ),
  'subscr_gateway' => 'paypal',
)
Posted: Monday Aug 27th, 2012 at 6:57 pm #23211
Staff Member

Thank you for the reply!

I’m updating our diagnostic report on this, and we’ll continue our attempts to reproduce this. So far I’ve been unsuccessful, even with content filters applied, but we’ll do our best to continue the search.

Posted: Monday Aug 27th, 2012 at 6:49 pm #23209
Staff Member

Thanks for the heads up on this thread.

My investigation of this installation turned up the following issues.

1. No URI restriction – RESULT = 404 (makes sense as they don’t have access yet)

Correct. In the case of BuddyPress, the /create/ URL will result in a 404 error introduced by BuddyPress itself, whenever access to create blogs is not possible for the current user (for any reason). So if s2Member is configured NOT to allow blog creation access, BuddyPress will interpret this as a 404 error, because the page used to create a new blog does not even exist in the eyes of BuddyPress.

As you mentioned, this is the expected behavior.

2. With URI restriction /microsite/create/ – RESULT = S2 tries to redirect them with this url but fails to complete redirection.

http://xxxxxx/membership-options/?_s2member_seeking%5Btype%5D=ruri&_s2member_seeking%5Bruri%5D=L21pY3Jvc2l0ZXMvY3JlYXRlLw%3D%3D&_s2member_seeking%5B_uri%5D=L21pY3Jvc2l0ZXMvY3JlYXRlLw%3D%3D&_s2member_req%5Btype%5D=level&_s2member_req%5Blevel%5D=1&_s2member_res%5Btype%5D=ruri&s2member_seeking=ruri-L21pY3Jvc2l0ZXMvY3JlYXRlLw%3D%3D&s2member_level_req=1 

This would also be the expected behavior. s2Member will redirect the user to the Membership Options Page, because they do not have access (i.e. in this case there IS a URI Restriction implemented within s2Member), and therefore s2Member will intervene, by redirecting anyone without access.

However, what’s NOT working properly, is the redirection URL itself, which in this case results in a 404 error. Upon a deeper investigation, I find this URL /membership-options/ no longer exists. It appears that you renamed this page to /options/ instead, which does work properly.

I updated your s2Member General Options, and s2Member now has the right Membership Options Page (i.e. /options/, instead of /membership-options/). Please let me know if problems persist.

Posted: Monday Aug 27th, 2012 at 6:18 pm #23202
Staff Member
Investigation completed.

Thanks for your patience.

I’ve looked through your log file entries, and I find some very confusing scenarios where s2Member is lead to believe that transient data entries exist for IPNs that are brand new, and have never been processed before. This is not the expected and/or normal behavior.

Upon further investigation, I am lead to believe that there might be a plugin conflict that exists on your installation, related to one of the following.

1. A caching plugin, which has object caching enabled (and perhaps not behaving properly).
2. Or, another plugin which modifies the built-in behavior of the WordPress get_transient() and/or set_transient() functions.

I would suggest that you disable any plugins that you believe might be related to the above (at least temporarily), and see if the problem goes away. If problems persist, please submit a list of all of the plugins that you are currently running together with s2Member. Also, please submit a Dashboard login for us via our private contact form here: s2Member® » Private Contact Form

Posted: Monday Aug 27th, 2012 at 5:51 pm #23200
Staff Member
Investigating this now.

~ Thanks for your patience. I’m very sorry for the delay. You will have a response shortly.

Posted: Saturday Aug 25th, 2012 at 3:07 pm #23072
Staff Member

Thanks for the heads up on this thread.

We will keep an eye on this issue in the future. Currently s2Member is not in control of routines in the authoring of posts, and only restricts data from users viewing the page, therefore any issues with the post’s author is most likely an issue with core WordPress functionality or JWPlayer itself.

Please keep in mind that you can change the author from within the WordPress Dashboard if any problems persist.

Posted: Friday Aug 17th, 2012 at 1:41 pm #22378
Staff Member

Investigation completed.

I’m finding that your log files contain several references to these two Payflow errors.

Error #36. Transaction failed: Fail to obtain approval for the online transaction.
Error #1. User authentication failed: Recurring Billing

These two errors, while appearing somewhat different, both indicate the same thing. It appears from our inspection of your log files that record communication between s2Member and the PayPal Payflow API, that your PayPal account is currently not setup to allow for recurring transactions.

Here are possible solutions:

1. Try removing all of your Payflow configuration options from the s2Member Dashboard panel, in hopes that your current PayPal Pro account will work without it. Not all PayPal accounts are designed to work with the Payflow API.

If you are absolutely sure that you’ve already setup Recurring Billing service with PayPal, this might be the problem. So, you can try disabling Payflow integration by removing the s2Member configuration options for Payflow. This places s2Member back into a normal PayPal Payments Pro integration, which still allows for the processing of recurring transactions, but under a different API (i.e. the PayPal Pro API, instead of the Payflow API).

However, please note that you will still need to have a PayPal Pro account setup which supports the PayPal Recurring Billing service, regardless of which API s2Member is working with, Recurring Billing service must be enabled.

2. Contact PayPal to ensure that your current Payflow API supports Recurring Billing service.

Please let us know if problems persist.

Posted: Friday Aug 17th, 2012 at 1:15 pm #22373
Staff Member
Details received. Thank you.
~ Investigating now.
Posted: Friday Aug 17th, 2012 at 1:11 pm #22371
Staff Member

Thanks for the heads up on this thread,
and thanks for reporting this important issue.

So far I’ve been unable to reproduce this, but we’ll continue to look at this closely. Regarding the existence of a Post/Page, as it relates to s2Member’s Restrictions. s2Member is only comparing the current URL, Post ID, Page ID, etc, to the Restrictions, so if a Post/Page does not exist, it should not trip over any of s2Member’s settings.

Regarding the hooks for post deletion, we’ll certainly consider it. However, given the multi-layer restriction options provided by s2Member, deleting a specific Post/Page ID, may not cover all layers of protection, as this really needs to be handled by a site owner. For instance, protecting a URI, or a category/tag, or something that engages with a Replacement Code, can also have an impact on Restrictions, which is not easily detectable via a deletion hook which references a specific Post ID. In other words, it’s possible for Restrictions to exist on multiple layers, which may have a reaching impact upon a specific Post.

Question. When this issue affected your installation, did you have any of s2Member’s Alternative Views enabled? Please let me know what settings might have been enabled there, as it may help as we work to resolve this.

Please see: Dashboard -› s2Member® -› Restriction Options -› Alternative View Protection

Posted: Friday Aug 17th, 2012 at 1:02 pm #22370
Staff Member
Thanks for the feedback guys! We’re working hard to improve this.
Posted: Friday Aug 17th, 2012 at 12:47 pm #22369
Staff Member

Thanks for the heads up on this thread.

The topic being discussed here is related to two separate questions.

1. Do the access links allow more people to use them than they should.

Specific Post/Page Access Links are controlled by your configuration of Unique IP Restrictions under: Dashboard -› s2Member® -› Restriction Options -› Unique IP Access Restrictions. So the answer to this question, is that a single user will be able to share his link with as many unique IP addresses as you’ve configured to allow, after which other users will start being denied. This is designed to allow a single customer access from multiple IP addresses (i.e. a personal computer, a laptop on the road, etc), but to give a site owner control over what they deem acceptable. After a customer exceeds the number of unique IP addresses that you’ve decided to allow, the link will be blocked automatically (i.e. for whatever punishment period you configure).

See: Dashboard -› s2Member® -› Restriction Options -› Unique IP Access Restrictions

2. Regardless, how does one remove an access link once it is created.

The current release of s2Member creates Specific Post/Page Access Links in a way which places all of the autorization details in the link itself (i.e. in the encrypted string which appears in the link, and it is NOT contained in any database table). This makes it possible for Specific Post/Page Access to remain disconnected from any membership or registration on the site. However, while this does provide for some great advantages, it also poses a serious problem for site owners that wish to revoke access for one reason or another, with respect to Specific Post/Page Access.

In the current releases of s2Member, it is NOT possible to revoke access to a Specific Post/Page Access Link. At least, not in any simple way (i.e. via any UI panel in the Dashboard). The only way to revoke access to a Specific Post/Page Access Link is by blocking the customer’s IP address conditionally, through code of your own.

We recognize this as a problem, and efforts have been underway for some time to resolve this in the next generation of s2Member, which has been accomplished, and a beta release will be available soon.

Posted: Friday Aug 17th, 2012 at 12:21 pm #22364
Staff Member

Thanks for the heads up on this request for support.

Having more than one member with the same paid Subscr. ID would be produce very unpredictable results within the context of s2Member itself. Payment gateways supply a unique transaction and/or subscription ID for s2Member, which is associated with a specific customer. s2Member expects this value to be a unique identifier for a particular paying customer, so having more than one customer with the same ID is not advised.

s2Member also associates each paid subscription ID with the underlying gateway. So each paying customer will have these two meta fields:

wp_s2member_subscr_gateway
wp_s2member_subscr_id

(always unique for each paying customer)

I would suggest that you add some additional meta fields of your own, instead of modifying these which the s2Member software itself uses. That way you won’t run into any compatibility issues.

Posted: Tuesday Aug 14th, 2012 at 3:30 pm #22023
Staff Member

Investigation completed.

I found that your PayPal account is sending IPN data back to your s2Member installation with a “gb2312” charset. For instance, your paypal-ipn.log file contains lines like this:

'charset' => 'gb2312',

Unfortunately, PHP does not support “gb2312”, but it does support “GBK”. I’m attaching a patch file that should resolve the issue that’s being reported here.

If you decide to implement this patch, please provide any feedback that you can.
Unzip and upload the attached file, allowing it to override your existing copy of:
/s2member/includes/classes/paypal-utilities.inc.php

http://d1v41qemfjie0l.cloudfront.net/s2member/uploads/paypal-utilities.inc_.php_.zip

Reference article: http://www.php.net/manual/en/mbstring.supported-encodings.php

Posted: Tuesday Aug 14th, 2012 at 3:14 pm #22021
Staff Member
Thank you. Details received.
~ Investigating now.
Posted: Tuesday Aug 14th, 2012 at 3:11 pm #22020
Staff Member

Thanks for the heads up on this request for support.

This ticket was resolved via email. Please let us know if you have any further trouble.

Posted: Tuesday Aug 14th, 2012 at 3:09 pm #22019
Staff Member

Thanks for the follow-up.

Yes, that hosting configuration will be incompatible with s2Member. Any hosting company which blocks the server from making requests to itself (i.e. for s2Member, or for WP_Cron, or for any other script that needs to post HTTP requests to itself for any reason), will be a problem.

I recommend any of these hosts:
http://wordpress.org/hosting/

Also recommend:
HostGator
MediaTemple (gs)
Rackspace Cloud Hosting
FireHost

If possible, please tell us who your current hosting provider is?

Posted: Saturday Aug 11th, 2012 at 12:22 pm #21782
Staff Member

Thanks for the heads up on this request for assistance.

@ Andy

I’ve just completed a review and full diagnostics on your installation. I found that you may have a firewall issue (or a PHP configuration issue at the server level), which is preventing your site from connecting over HTTP to itself. While your site is capable of connecting via HTTP to outside networks, connections from your server, to scripts that reside on the same host are failing. This is indicative of firewall configuration conflicts. I recommend contacting your hosting provider with the details below, so they can start an investigation on their end of things.

I’ve installed a test script here, which your hosting company can use to reproduce the issue.
http://xxxxx.co.uk/?s2_diagnostics=1
(connection from the domain back to itself is failing)

Until this issue is resolved at the server level, s2Member will not behave as intended.

Posted: Saturday Aug 11th, 2012 at 10:14 am #21776
Staff Member

@Allan

Thanks for your patience.

OK. Based on the log entries you’ve posted, I’m unable to find a logical reason why this is failing on this one particular installation. I’d like to see the log files in their entirety, so I can see the broader perspective, and that should help us to shed light on the underlying cause of this for you.

If it’s possible to send us the full details, please submit a private contact form entry via this URL:
s2Member® » Private Contact Form

Viewing 25 replies - 1,276 through 1,300 (of 1,909 total)

Old Forums (READ-ONLY): The community now lives at WP Sharks™. If you have an s2Member® Pro question, please use our new Support System.

Contacting s2Member: Please use our Support Center for bug reports, pre-sale questions & technical assistance.