S2Member Pro is handling refunds just fine. However, if a recurring payments profile is cancelled, the message is not process appropriately. For example, I received the following message ... but this test user still has all membership levels and capabilities:
www.grccertify.org/?s2member_paypal_notify=1
array (
'payment_cycle' => 'Yearly',
'txn_type' => 'recurring_payment_profile_cancel',
'last_name' => 'Mitchell',
'next_payment_date' => 'N/A',
'residence_country' => 'US',
'initial_payment_amount' => '0.00',
'rp_invoice_id' => '1295479711:0 D:1 Y~www.grccertify.org~1:take_grc_professional_exam,take_grc_professional_exam_beg20110119_end20110126',
'currency_code' => 'USD',
'time_created' => '15:28:32 Jan 19, 2011 PST',
'verify_sign' => 'XXXXXXXXXXXXXXXXXXX',
'period_type' => 'Regular',
'payer_status' => 'unverified',
'test_ipn' => '1',
'tax' => '0.00',
'payer_email' => 'scott1@xxx.xxx',
'first_name' => 'Scott1',
'receiver_email' => 'proz_1295469628_biz@xxx.xxx',
'payer_id' => 'S4HAVWSGHW8M6',
'product_type' => '1',
'shipping' => '0.00',
'amount_per_cycle' => '189.00',
'profile_status' => 'Cancelled',
'charset' => 'windows-1252',
'notify_version' => '3.0',
'amount' => '189.00',
'outstanding_balance' => '0.00',
'recurring_payment_id' => 'I-LYV8YM3VL92B',
'product_name' => 'GRC Professional Certification Exam',
's2member_log' =>
array (
0 => 'IPN received on: Wed Jan 19, 2011 11:30:51 pm UTC',
1 => 's2Member POST vars verified through a POST back to PayPal®.',
2 => 's2Member originating domain ( _SERVER[HTTP_HOST] ) validated.',
3 => 's2Member txn_type identified as subscr_cancel|recurring_payment_profile_cancel.',
4 => 'Auto-EOT Time for this account: Fri Jan 20, 2012 11:29 pm UTC',
),
'custom' => 'www.grccertify.org',
'item_number' => '1:take_grc_professional_exam,take_grc_professional_exam_beg20110119_end20110126',
'period1' => '0 D',
'period3' => '1 Y',
'subscr_id' => 'I-LYV8YM3VL92B',
'item_name' => 'GRC Professional Certification Exam',
'ccaps' => 'take_grc_professional_exam,take_grc_professional_exam_beg20110119_end20110126',
'level' => '1',
)