public function process_signup() { global $rcp_options; $user_id = get_current_user_id(); $user_data = get_userdata($user_id); if (empty($_POST['stripeToken'])) { wp_die('Missing Stripe token, please try again or contact support if the issue persists.'); } $token = $_POST['stripeToken']; $email = $_POST['stripeEmail']; $plan_id = $_POST['subscription_id']; $subscription = rcp_get_subscription_details($plan_id); $price = $subscription->price; $base_price = $price; $discount = isset($_POST['rcp_discount']) ? sanitize_text_field($_POST['rcp_discount']) : ''; $discount_valid = false; $expiration = rcp_get_subscription_length($plan_id); $currency = strtolower($rcp_options['currency']); $redirect = rcp_get_current_url(); $subscription_data = array('price' => $price, 'discount' => $base_price - $price, 'discount_code' => $discount, 'fee' => !empty($subscription->fee) ? number_format($subscription->fee, 2) : 0, 'length' => $expiration->duration, 'length_unit' => strtolower($expiration->duration_unit), 'subscription_id' => $subscription->id, 'subscription_name' => $subscription->name, 'key' => '', 'user_id' => $user_data->id, 'user_name' => $user_data->user_login, 'user_email' => $user_data->user_email, 'currency' => $rcp_options['currency'], 'auto_renew' => true, 'return_url' => $redirect, 'new_user' => false, 'post_data' => $_POST); // Update the user's plan update_user_meta($user_id, 'rcp_subscription_level', $plan_id); // send all of the subscription data off for processing by the gateway rcp_send_to_gateway('stripe', apply_filters('rcp_subscription_data', $subscription_data)); }
function setup_user_type($e, $i) { $type = isset($_POST['reg_type']) ? $_POST['reg_type'] : 'buyer'; add_user_meta($e, 'reg_type', $type); $id = rcp_get_subscription_details($type); add_user_meta($e, 'eddc_user_rate', $id->commission); return $e; }
function rcp_stripe_checkout_shortcode($atts) { global $rcp_options; if (isset($rcp_options['sandbox'])) { $key = $rcp_options['stripe_test_publishable']; } else { $key = $rcp_options['stripe_live_publishable']; } $atts = shortcode_atts(array('plan_id' => 0, 'price' => 0), $atts); $user_id = get_current_user_id(); $user = get_userdata($user_id); $is_active = rcp_is_active($user_id); $subscription = rcp_get_subscription_details($atts['plan_id']); $price = $subscription->price * 100; ?> <form action="" method="post"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="<?php echo $key; ?> " data-name="CG Cookie" data-image="https://s3.amazonaws.com/cgcookie/cgc_logo_128.png" data-description="Join Citizen ($<?php echo $price / 100; ?> per month)" data-label="Join <?php echo $subscription->name; ?> " data-amount="<?php echo $price; ?> " data-locale="auto" data-email="<?php echo $user->user_email; ?> " data-allow-remember-me="true" > </script> <input type="hidden" name="subscription_id" value="<?php echo $subscription->id; ?> " /> <input type="hidden" name="price" value="<?php echo $price; ?> " /> <input type="hidden" name="source" value="stripe-checkout" /> </form> <?php }
/** * Set the subscription for this registration * * @since 2.5 * @param $subscription_id * * @return bool */ public function set_subscription($subscription_id) { if (!($subscription = rcp_get_subscription_details($subscription_id))) { return false; } $this->subscription = $subscription_id; if ($subscription->fee) { $description = $subscription->fee > 0 ? __('Signup Fee', 'rcp') : __('Signup Credit', 'rcp'); $this->add_fee($subscription->fee, $description); } return true; }
<?php global $rcp_options, $rcp_level, $post; ?> <?php $level = rcp_get_subscription_details($rcp_level); ?> <?php if (!is_user_logged_in()) { ?> <h3 class="rcp_header"> <?php echo apply_filters('rcp_registration_header_logged_in', __('Register New Account', 'rcp')); ?> </h3> <?php } else { ?> <h3 class="rcp_header"> <?php echo apply_filters('rcp_registration_header_logged_out', __('Upgrade Your Subscription', 'rcp')); ?> </h3> <?php } // show any error messages after form submission rcp_show_error_messages('register'); ?>
<?php $level = rcp_get_subscription_details(absint(urldecode($_GET['edit_subscription']))); $level->role = empty($level->role) ? 'subscriber' : $level->role; ?> <h2> <?php _e('Edit Subscription Level:', 'rcp'); echo ' ' . stripslashes($level->name); ?> <a href="<?php echo admin_url('/admin.php?page=rcp-member-levels'); ?> " class="add-new-h2"> <?php _e('Cancel', 'rcp'); ?> </a> </h2> <form id="rcp-edit-subscription" action="" method="post"> <table class="form-table"> <tbody> <tr class="form-field"> <th scope="row" valign="top"> <label for="rcp-name"><?php _e('Name', 'rcp'); ?> </label> </th> <td> <input name="name" id="rcp-name" type="text" value="<?php
/** * Get the auto renew behavior * * 1 == All subscriptions auto renew * 2 == No subscriptions auto renew * 3 == Customer chooses whether to auto renew * * @access public * @since 2.0 * @return int */ function rcp_get_auto_renew_behavior() { global $rcp_options, $rcp_level; // Check for old disable auto renew option if( isset( $rcp_options['disable_auto_renew'] ) ) { $rcp_options['auto_renew'] = '2'; unset( $rcp_options['disable_auto_renew'] ); update_option( 'rcp_settings', $rcp_options ); } $behavior = isset( $rcp_options['auto_renew'] ) ? $rcp_options['auto_renew'] : '3'; if( $rcp_level ) { $level = rcp_get_subscription_details( $rcp_level ); if( $level->price == '0' ) { $behavior = '2'; } } return apply_filters( 'rcp_auto_renew_behavior', $behavior ); }
/** * Renews a member's membership by updating status and expiration date * * Does NOT handle payment processing for the renewal. This should be called after receiving a renewal payment * * @access public * @since 2.1 */ public function renew($recurring = false, $status = 'active', $expiration = '') { $subscription_id = $this->get_pending_subscription_id(); if (empty($subscription_id)) { $subscription_id = $this->get_subscription_id(); } if (!$subscription_id) { return false; } if (!$expiration) { $subscription = rcp_get_subscription_details($subscription_id); $expiration = apply_filters('rcp_member_renewal_expiration', $this->calculate_expiration(), $subscription, $this->ID); } do_action('rcp_member_pre_renew', $this->ID, $expiration, $this); $this->set_expiration_date($expiration); if (!empty($status)) { $this->set_status($status); } $this->set_recurring($recurring); $this->set_renewed_date(); delete_user_meta($this->ID, '_rcp_expired_email_sent'); do_action('rcp_member_post_renew', $this->ID, $expiration, $this); }
/** * Process PayPal IPN * * @since 2.1 */ public function process_webhooks() { if (!isset($_GET['listener']) || strtoupper($_GET['listener']) != 'IPN') { return; } global $rcp_options; nocache_headers(); if (!class_exists('IpnListener')) { // instantiate the IpnListener class include RCP_PLUGIN_DIR . 'includes/gateways/paypal/paypal-ipnlistener.php'; } $listener = new IpnListener(); $verified = false; if ($this->test_mode) { $listener->use_sandbox = true; } /* if( isset( $rcp_options['ssl'] ) ) { $listener->use_ssl = true; } else { $listener->use_ssl = false; } */ //To post using the fsockopen() function rather than cURL, use: if (isset($rcp_options['disable_curl'])) { $listener->use_curl = false; } try { $listener->requirePostMethod(); $verified = $listener->processIpn(); } catch (Exception $e) { status_header(402); //die( 'IPN exception: ' . $e->getMessage() ); } /* The processIpn() method returned true if the IPN was "VERIFIED" and false if it was "INVALID". */ if ($verified || isset($_POST['verification_override']) || ($this->test_mode || isset($rcp_options['disable_ipn_verify']))) { status_header(200); $user_id = 0; $posted = apply_filters('rcp_ipn_post', $_POST); // allow $_POST to be modified if (!empty($posted['custom']) && is_numeric($posted['custom'])) { $user_id = absint($posted['custom']); } else { if (!empty($posted['subscr_id'])) { $user_id = rcp_get_member_id_from_profile_id($posted['subscr_id']); } else { if (!empty($posted['payer_email'])) { $user = get_user_by('email', $posted['payer_email']); $user_id = $user ? $user->ID : false; } } } $member = new RCP_Member($user_id); if (!$member || !$member->get_subscription_id()) { die('no member found'); } if (!rcp_get_subscription_details($member->get_subscription_id())) { die('no subscription level found'); } $subscription_name = $posted['item_name']; $subscription_key = $posted['item_number']; $amount = number_format((double) $posted['mc_gross'], 2); $amount2 = number_format((double) $posted['mc_amount3'], 2); $payment_status = $posted['payment_status']; $currency_code = $posted['mc_currency']; $subscription_price = number_format((double) rcp_get_subscription_price($member->get_subscription_id()), 2); // setup the payment info in an array for storage $payment_data = array('date' => date('Y-m-d g:i:s', strtotime($posted['payment_date'], current_time('timestamp'))), 'subscription' => $posted['item_name'], 'payment_type' => $posted['txn_type'], 'subscription_key' => $subscription_key, 'amount' => $amount, 'user_id' => $user_id, 'transaction_id' => $posted['txn_id']); do_action('rcp_valid_ipn', $payment_data, $user_id, $posted); if ($posted['txn_type'] == 'web_accept' || $posted['txn_type'] == 'subscr_payment') { // only check for an existing payment if this is a payment IPD request if (rcp_check_for_existing_payment($posted['txn_type'], $posted['payment_date'], $subscription_key)) { $log_data = array('post_title' => __('Duplicate Payment', 'rcp'), 'post_content' => __('A duplicate payment was detected. The new payment was still recorded, so you may want to check into both payments.', 'rcp'), 'post_parent' => 0, 'log_type' => 'gateway_error'); $log_meta = array('user_subscription' => $posted['item_name'], 'user_id' => $user_id); $log_entry = WP_Logging::insert_log($log_data, $log_meta); die('duplicate IPN detected'); } if (strtolower($currency_code) != strtolower($rcp_options['currency'])) { // the currency code is invalid $log_data = array('post_title' => __('Invalid Currency Code', 'rcp'), 'post_content' => sprintf(__('The currency code in an IPN request did not match the site currency code. Payment data: %s', 'rcp'), json_encode($payment_data)), 'post_parent' => 0, 'log_type' => 'gateway_error'); $log_meta = array('user_subscription' => $posted['item_name'], 'user_id' => $user_id); $log_entry = WP_Logging::insert_log($log_data, $log_meta); die('invalid currency code'); } } if (isset($rcp_options['email_ipn_reports'])) { wp_mail(get_bloginfo('admin_email'), __('IPN report', 'rcp'), $listener->getTextReport()); } /* now process the kind of subscription/payment */ $rcp_payments = new RCP_Payments(); // Subscriptions switch ($posted['txn_type']) { case "subscr_signup": // when a new user signs up // store the recurring payment ID update_user_meta($user_id, 'rcp_paypal_subscriber', $posted['payer_id']); $member->set_payment_profile_id($posted['subscr_id']); do_action('rcp_ipn_subscr_signup', $user_id); die('successful subscr_signup'); break; case "subscr_payment": // when a user makes a recurring payment update_user_meta($user_id, 'rcp_paypal_subscriber', $posted['payer_id']); $member->set_payment_profile_id($posted['subscr_id']); $member->renew(true); // record this payment in the database $rcp_payments->insert($payment_data); do_action('rcp_ipn_subscr_payment', $user_id); die('successful subscr_payment'); break; case "subscr_cancel": // user is marked as cancelled but retains access until end of term $member->set_status('cancelled'); // set the use to no longer be recurring delete_user_meta($user_id, 'rcp_paypal_subscriber'); do_action('rcp_ipn_subscr_cancel', $user_id); die('successful subscr_cancel'); break; case "subscr_failed": do_action('rcp_ipn_subscr_failed'); die('successful subscr_failed'); break; case "subscr_eot": // user's subscription has reached the end of its term if ('cancelled' !== $member->get_status($user_id)) { $member->set_status('expired'); } do_action('rcp_ipn_subscr_eot', $user_id); die('successful subscr_eot'); break; case "web_accept": switch (strtolower($payment_status)) { case 'completed': // set this user to active $member->renew(); $rcp_payments->insert($payment_data); break; case 'denied': case 'expired': case 'failed': case 'voided': $member->set_status('cancelled'); break; } die('successful web_accept'); break; case "cart": case "express_checkout": default: break; } } else { if (isset($rcp_options['email_ipn_reports'])) { // an invalid IPN attempt was made. Send an email to the admin account to investigate wp_mail(get_bloginfo('admin_email'), __('Invalid IPN', 'rcp'), $listener->getTextReport()); } status_header(400); die('invalid IPN'); } }
/** * Displays stripe checkout form * * @since 2.5 * @access public * * @param $atts * @return mixed|void */ function rcp_register_form_stripe_checkout($atts) { global $rcp_options; if (empty($atts['id'])) { return ''; } // button is an alias for data-label if (isset($atts['button'])) { $atts['data-label'] = $atts['button']; } $key = rcp_is_sandbox() ? $rcp_options['stripe_test_publishable'] : $rcp_options['stripe_live_publishable']; $member = new RCP_Member(wp_get_current_user()->ID); $subscription = rcp_get_subscription_details($atts['id']); $amount = $subscription->price + $subscription->fee; if ($member->ID > 0) { $amount -= $member->get_prorate_credit_amount(); } if ($amount < 0) { $amount = 0; } $data = wp_parse_args($atts, array('id' => 0, 'data-key' => $key, 'data-name' => get_option('blogname'), 'data-description' => $subscription->description, 'data-label' => sprintf(__('Join %s', 'rcp'), $subscription->name), 'data-panel-label' => __('Register - {{amount}}', 'rcp'), 'data-amount' => $amount * rcp_stripe_get_currency_multiplier(), 'data-locale' => 'auto', 'data-allow-remember-me' => true, 'data-currency' => rcp_get_currency(), 'data-alipay' => isset($rcp_options['stripe_alipay']) && '1' === $rcp_options['stripe_alipay'] && 'USD' === rcp_get_currency() ? 'true' : 'false')); if (empty($data['data-email']) && !empty($member->user_email)) { $data['data-email'] = $member->user_email; } if (empty($data['data-image']) && ($image = get_site_icon_url())) { $data['data-image'] = $image; } $data = apply_filters('rcp_stripe_checkout_data', $data); if ('USD' !== rcp_get_currency()) { unset($data['data-alipay']); } ob_start(); if ($member->ID > 0 && $member->get_subscription_id() == $subscription->id && $member->is_active()) { ?> <div class="rcp-stripe-checkout-notice"><?php _e('You are already subscribed.', 'rcp'); ?> </div> <?php } else { ?> <form action="" method="post"> <?php do_action('register_form_stripe_fields', $data); ?> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" <?php foreach ($data as $label => $value) { printf(' %s="%s" ', esc_attr($label), esc_attr($value)); } ?> ></script> <input type="hidden" name="rcp_level" value="<?php echo $subscription->id; ?> " /> <input type="hidden" name="rcp_register_nonce" value="<?php echo wp_create_nonce('rcp-register-nonce'); ?> "/> <input type="hidden" name="rcp_gateway" value="stripe_checkout"/> <input type="hidden" name="rcp_stripe_checkout" value="1"/> </form> <?php } return apply_filters('register_form_stripe', ob_get_clean(), $atts); }
public function get_checkout_details($token = '') { $args = array('USER' => $this->username, 'PWD' => $this->password, 'SIGNATURE' => $this->signature, 'VERSION' => '121', 'METHOD' => 'GetExpressCheckoutDetails', 'TOKEN' => $token); $request = wp_remote_get(add_query_arg($args, $this->api_endpoint), array('timeout' => 45, 'sslverify' => false)); if (is_wp_error($request)) { return $request; } elseif (200 == $request['response']['code'] && 'OK' == $request['response']['message']) { parse_str($request['body'], $data); $data['subscription'] = (array) rcp_get_subscription_details(rcp_get_subscription_id($_GET['user_id'])); return $data; } return false; }
/** * Get formatted recurring total for this registration * * @since 2.5 * @param bool $echo * * @return mixed|string|void */ function rcp_registration_recurring_total($echo = true) { $total = rcp_get_registration_recurring_total(); // the registration has not been setup yet if (false === $total) { return false; } if (0 < $total) { $total = number_format($total, rcp_currency_decimal_filter()); $total = rcp_currency_filter($total); $subscription = rcp_get_subscription_details(rcp_get_registration()->get_subscription()); if ($subscription->duration == 1) { $total .= '/' . rcp_filter_duration_unit($subscription->duration_unit, 1); } else { $total .= sprintf(__(' every %s %s', 'rcp'), $subscription->duration, rcp_filter_duration_unit($subscription->duration_unit, $subscription->duration)); } } else { $total = __('free', 'rcp'); } $total = apply_filters('rcp_registration_recurring_total', $total); if ($echo) { echo $total; } return $total; }
/** * Renews a member's membership by updating status and expiration date * * Does NOT handle payment processing for the renewal. This should be called after receiving a renewal payment * * @access public * @since 2.1 */ public function renew($recurring = false, $status = 'active') { if (!$this->get_subscription_id()) { return false; } // Get the member's current expiration date $expires = $this->get_expiration_time(); // Determine what date to use as the start for the new expiration calculation if ($expires > current_time('timestamp') && rcp_is_active($this->ID)) { $base_date = $expires; } else { $base_date = current_time('timestamp'); } $subscription = rcp_get_subscription_details($this->get_subscription_id()); if ($subscription->duration > 0) { $last_day = cal_days_in_month(CAL_GREGORIAN, date('n', $base_date), date('Y', $base_date)); $expiration = date('Y-m-d H:i:s', strtotime('+' . $subscription->duration . ' ' . $subscription->duration_unit . ' 23:59:59')); if (date('j', $base_date) == $last_day && 'day' != $subscription->duration_unit) { $expiration = date('Y-m-d H:i:s', strtotime($expiration . ' +2 days')); } } else { $expiration = 'none'; } $expiration = apply_filters('rcp_member_renewal_expiration', $expiration, $subscription, $this->ID); do_action('rcp_member_pre_renew', $this->ID, $expiration, $this); $this->set_status($status); $this->set_expiration_date($expiration); $this->set_recurring($recurring); delete_user_meta($this->ID, '_rcp_expired_email_sent'); do_action('rcp_member_post_renew', $this->ID, $expiration, $this); }
function rcp_check_ipn() { global $rcp_options; if (!class_exists('IpnListener')) { // instantiate the IpnListener class include RCP_PLUGIN_DIR . 'includes/gateways/paypal/ipnlistener.php'; } $listener = new IpnListener(); if (isset($rcp_options['sandbox'])) { $listener->use_sandbox = true; } if (isset($rcp_options['ssl'])) { $listener->use_ssl = true; } else { $listener->use_ssl = false; } //To post using the fsockopen() function rather than cURL, use: if (isset($rcp_options['disable_curl'])) { $listener->use_curl = false; } try { $listener->requirePostMethod(); $verified = $listener->processIpn(); } catch (Exception $e) { //exit(0); } /* The processIpn() method returned true if the IPN was "VERIFIED" and false if it was "INVALID". */ if ($verified || isset($_POST['verification_override']) || (isset($rcp_options['sandbox']) || isset($rcp_options['disable_ipn_verify']))) { $posted = apply_filters('rcp_ipn_post', $_POST); // allow $_POST to be modified $user_id = $posted['custom']; $subscription_name = $posted['item_name']; $subscription_key = $posted['item_number']; $amount = number_format((double) $posted['mc_gross'], 2); $amount2 = number_format((double) $posted['mc_amount3'], 2); $payment_status = $posted['payment_status']; $currency_code = $posted['mc_currency']; $subscription_id = rcp_get_subscription_id($user_id); $subscription_price = number_format((double) rcp_get_subscription_price(rcp_get_subscription_id($user_id)), 2); $user_data = get_userdata($user_id); if (!$user_data || !$subscription_id) { return; } if (!rcp_get_subscription_details($subscription_id)) { return; } // setup the payment info in an array for storage $payment_data = array('date' => date('Y-m-d g:i:s', strtotime($posted['payment_date'])), 'subscription' => $posted['item_name'], 'payment_type' => $posted['txn_type'], 'subscription_key' => $subscription_key, 'amount' => $amount, 'user_id' => $user_id, 'transaction_id' => $posted['txn_id']); do_action('rcp_valid_ipn', $payment_data, $user_id, $posted); if ($posted['txn_type'] == 'web_accept' || $posted['txn_type'] == 'subscr_payment') { // only check for an existing payment if this is a payment IPD request if (rcp_check_for_existing_payment($posted['txn_type'], $posted['payment_date'], $subscription_key)) { $log_data = array('post_title' => __('Duplicate Payment', 'rcp'), 'post_content' => __('A duplicate payment was detected. The new payment was still recorded, so you may want to check into both payments.', 'rcp'), 'post_parent' => 0, 'log_type' => 'gateway_error'); $log_meta = array('user_subscription' => $posted['item_name'], 'user_id' => $user_id); $log_entry = WP_Logging::insert_log($log_data, $log_meta); return; // this IPN request has already been processed } /* do some quick checks to make sure all necessary data validates */ if ($amount < $subscription_price && $amount2 < $subscription_price) { /* // the subscription price doesn't match, so lets check to see if it matches with a discount code if( ! rcp_check_paypal_return_price_after_discount( $subscription_price, $amount, $amount2, $user_id ) ) { $log_data = array( 'post_title' => __( 'Price Mismatch', 'rcp' ), 'post_content' => sprintf( __( 'The price in an IPN request did not match the subscription price. Payment data: %s', 'rcp' ), json_encode( $payment_data ) ), 'post_parent' => 0, 'log_type' => 'gateway_error' ); $log_meta = array( 'user_subscription' => $posted['item_name'], 'user_id' => $user_id ); $log_entry = WP_Logging::insert_log( $log_data, $log_meta ); //return; } */ } if (strtolower($currency_code) != strtolower($rcp_options['currency'])) { // the currency code is invalid $log_data = array('post_title' => __('Invalid Currency Code', 'rcp'), 'post_content' => sprintf(__('The currency code in an IPN request did not match the site currency code. Payment data: %s', 'rcp'), json_encode($payment_data)), 'post_parent' => 0, 'log_type' => 'gateway_error'); $log_meta = array('user_subscription' => $posted['item_name'], 'user_id' => $user_id); $log_entry = WP_Logging::insert_log($log_data, $log_meta); return; } } if (isset($rcp_options['email_ipn_reports'])) { wp_mail(get_bloginfo('admin_email'), __('IPN report', 'rcp'), $listener->getTextReport()); } if (rcp_get_subscription_key($user_id) != $subscription_key) { // the subscription key is invalid $log_data = array('post_title' => __('Subscription Key Mismatch', 'rcp'), 'post_content' => sprintf(__('The subscription key in an IPN request did not match the subscription key recorded for the user. Payment data: %s', 'rcp'), json_encode($payment_data)), 'post_parent' => 0, 'log_type' => 'gateway_error'); $log_meta = array('user_subscription' => $posted['item_name'], 'user_id' => $user_id); $log_entry = WP_Logging::insert_log($log_data, $log_meta); return; } /* now process the kind of subscription/payment */ $rcp_payments = new RCP_Payments(); // Subscriptions switch ($posted['txn_type']) { case "subscr_signup": // when a new user signs up // store the recurring payment ID update_user_meta($user_id, 'rcp_paypal_subscriber', $posted['payer_id']); // set the user's status to active rcp_set_status($user_id, 'active'); if (!isset($rcp_options['disable_new_user_notices'])) { wp_new_user_notification($user_id); } // send welcome email rcp_email_subscription_status($user_id, 'active'); update_user_meta($user_id, 'rcp_recurring', 'yes'); do_action('rcp_ipn_subscr_signup', $user_id); break; case "subscr_payment": // when a user makes a recurring payment // record this payment in the database $rcp_payments->insert($payment_data); $subscription = rcp_get_subscription_details(rcp_get_subscription_id($user_id)); // update the user's expiration to correspond with the new payment $member_new_expiration = date('Y-m-d H:i:s', strtotime('+' . $subscription->duration . ' ' . $subscription->duration_unit . ' 23:59:59')); rcp_set_expiration_date($user_id, $member_new_expiration); update_user_meta($user_id, 'rcp_paypal_subscriber', $posted['payer_id']); // make sure the user's status is active rcp_set_status($user_id, 'active'); update_user_meta($user_id, 'rcp_recurring', 'yes'); delete_user_meta($user_id, '_rcp_expired_email_sent'); do_action('rcp_ipn_subscr_payment', $user_id); break; case "subscr_cancel": // user is marked as cancelled but retains access until end of term rcp_set_status($user_id, 'cancelled'); // set the use to no longer be recurring delete_user_meta($user_id, 'rcp_recurring'); delete_user_meta($user_id, 'rcp_paypal_subscriber'); // send sub cancelled email rcp_email_subscription_status($user_id, 'cancelled'); do_action('rcp_ipn_subscr_cancel', $user_id); break; case "subscr_failed": do_action('rcp_ipn_subscr_failed'); break; case "subscr_eot": // user's subscription has reach the end of its term // set the use to no longer be recurring delete_user_meta($user_id, 'rcp_recurring'); if ('cancelled' !== rcp_get_status($user_id)) { rcp_set_status($user_id, 'expired'); // send expired email rcp_email_subscription_status($user_id, 'expired'); } do_action('rcp_ipn_subscr_eot', $user_id); break; case "cart": return; // get out of here // get out of here case "express_checkout": return; // get out of here // get out of here case "web_accept": switch (strtolower($payment_status)) { case 'completed': if (isset($_POST['verification_override'])) { // this is a method for providing a new expiration if it doesn't exist $subscription = rcp_get_subscription_details_by_name($payment_data['subscription']); // update the user's expiration to correspond with the new payment $member_new_expiration = date('Y-m-d H:i:s', strtotime('+' . $subscription->duration . ' ' . $subscription->duration_unit . ' 23:59:59')); rcp_set_expiration_date($user_id, $member_new_expiration); } // set this user to active rcp_set_status($user_id, 'active'); $rcp_payments->insert($payment_data); rcp_email_subscription_status($user_id, 'active'); if (!isset($rcp_options['disable_new_user_notices'])) { // send welcome email here wp_new_user_notification($user_id); } delete_user_meta($user_id, '_rcp_expired_email_sent'); break; case 'denied': case 'expired': case 'failed': case 'voided': rcp_set_status($user_id, 'cancelled'); // send cancelled email here break; } break; default: break; } } else { if (isset($rcp_options['email_ipn_reports'])) { // an invalid IPN attempt was made. Send an email to the admin account to investigate wp_mail(get_bloginfo('admin_email'), __('Invalid IPN', 'rcp'), $listener->getTextReport()); } } }
<tr class="rcp-total"> <th><?php _e('Total Today', 'rcp'); ?> </th> <th><?php rcp_registration_total(); ?> </th> </tr> <?php if (rcp_registration_is_recurring()) { ?> <?php $subscription = rcp_get_subscription_details(rcp_get_registration()->get_subscription()); if ($subscription->duration == 1) { $label = sprintf(__('Total Recurring Per %s', 'rcp'), rcp_filter_duration_unit($subscription->duration_unit, 1)); } else { $label = sprintf(__('Total Recurring Every %s %s', 'rcp'), $subscription->duration, rcp_filter_duration_unit($subscription->duration_unit, $subscription->duration)); } ?> <tr class="rcp-recurring-total"> <th><?php echo $label; ?> </th> <th><?php rcp_registration_recurring_total(); ?> </th>
public function get_checkout_details($token = '') { $args = array('USER' => $this->username, 'PWD' => $this->password, 'SIGNATURE' => $this->signature, 'VERSION' => '124', 'METHOD' => 'GetExpressCheckoutDetails', 'TOKEN' => $token); $request = wp_remote_get(add_query_arg($args, $this->api_endpoint), array('timeout' => 45, 'sslverify' => false, 'httpversion' => '1.1')); $body = wp_remote_retrieve_body($request); $code = wp_remote_retrieve_response_code($request); $message = wp_remote_retrieve_response_message($request); if (is_wp_error($request)) { return $request; } elseif (200 == $code && 'OK' == $message) { if (is_string($body)) { wp_parse_str($body, $body); } $member = new RCP_Member(absint($_GET['user_id'])); $subscription_id = $member->get_pending_subscription_id(); if (empty($subscription_id)) { $subscription_id = $member->get_subscription_id(); } $body['subscription'] = (array) rcp_get_subscription_details($subscription_id); return $body; } return false; }