On page 172, number 9, I had to change 'payment_status', 'receiver_email' and 'mc_gross' from === to == because the IPN would not work.
// Check for the right values: if ( isset($_POST['payment_status']) && ($_POST['payment_status'] == 'Completed') && ($_POST['receiver_email'] == 'treasurer@nmsc.org') && ($_POST['mc_gross'] == 40.00) && ($_POST['mc_currency'] === 'USD') && (!empty($_POST['txn_id']))
Because ipn.php is not a page you can test normally (like, with echo statements), how I