/** * Process registration * * @since 2.1 */ public function process_signup() { global $rcp_options; $args = array('USER' => $this->username, 'PWD' => $this->password, 'SIGNATURE' => $this->signature, 'VERSION' => '121', 'METHOD' => 'CreateRecurringPaymentsProfile', 'AMT' => $this->amount, 'INITAMT' => 0, 'CURRENCYCODE' => strtoupper($this->currency), 'ITEMAMT' => round($this->amount + $this->signup_fee, 2), 'SHIPPINGAMT' => 0, 'TAXAMT' => 0, 'DESC' => $this->subscription_name, 'SOFTDESCRIPTOR' => get_bloginfo('name') . ': ' . $this->subscription_name, 'SOFTDESCRIPTORCITY' => get_bloginfo('admin_email'), 'CUSTOM' => $this->user_id, 'NOTIFYURL' => add_query_arg('listener', 'EIPN', home_url('index.php')), 'EMAIL' => $this->email, 'CREDITCARDTYPE' => '', 'ACCT' => sanitize_text_field($_POST['rcp_card_number']), 'EXPDATE' => sanitize_text_field($_POST['rcp_card_exp_month'] . $_POST['rcp_card_exp_year']), 'CVV2' => sanitize_text_field($_POST['rcp_card_cvc']), 'ZIP' => sanitize_text_field($_POST['rcp_card_zip']), 'BUTTONSOURCE' => 'EasyDigitalDownloads_SP', 'PROFILESTARTDATE' => date('Y-m-d\\Tg:i:s', strtotime('+' . $this->length . ' ' . $this->length_unit, time())), 'BILLINGPERIOD' => ucwords($this->length_unit), 'BILLINGFREQUENCY' => $this->length, 'FAILEDINITAMTACTION' => 'CancelOnFailure', 'TOTALBILLINGCYCLES' => $this->auto_renew ? 0 : 1); $request = wp_remote_post($this->api_endpoint, array('timeout' => 45, 'sslverify' => false, 'body' => $args)); if (is_wp_error($request)) { $error = '<p>' . __('An unidentified error occurred.', 'rcp') . '</p>'; $error .= '<p>' . $request->get_error_message() . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } elseif (200 == $request['response']['code'] && 'OK' == $request['response']['message']) { parse_str($request['body'], $data); if ('failure' === strtolower($data['ACK'])) { $error = '<p>' . __('PayPal subscription creation failed.', 'rcp') . '</p>'; $error .= '<p>' . __('Error message:', 'rcp') . ' ' . $data['L_LONGMESSAGE0'] . '</p>'; $error .= '<p>' . __('Error code:', 'rcp') . ' ' . $data['L_ERRORCODE0'] . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } else { // Successful signup if ('ActiveProfile' === $data['PROFILESTATUS']) { // Confirm a one-time payment $member = new RCP_Member($this->user_id); $member->renew($this->auto_renew); $member->set_payment_profile_id($data['PROFILEID']); } wp_redirect(esc_url_raw(rcp_get_return_url())); exit; exit; } } else { wp_die(__('Something has gone wrong, please try again', 'rcp'), __('Error', 'rcp'), array('back_link' => true, 'response' => '401')); } }
/** * Register a new user * * @access public * @since 1.0 */ function rcp_process_registration() { if ( isset( $_POST["rcp_register_nonce"] ) && wp_verify_nonce( $_POST['rcp_register_nonce'], 'rcp-register-nonce' ) ) { global $rcp_options, $user_ID; $subscription_id = isset( $_POST['rcp_level'] ) ? absint( $_POST['rcp_level'] ) : false; $discount = isset( $_POST['rcp_discount'] ) ? sanitize_text_field( $_POST['rcp_discount'] ) : ''; $discount_valid = false; $price = number_format( (float) rcp_get_subscription_price( $subscription_id ), 2 ); $price = str_replace( ',', '', $price ); $base_price = $price; // Used for discount calculations later $expiration = rcp_get_subscription_length( $subscription_id ); $subscription = rcp_get_subscription_details( $subscription_id ); // get the selected payment method/gateway if( ! isset( $_POST['rcp_gateway'] ) ) { $gateway = 'paypal'; } else { $gateway = sanitize_text_field( $_POST['rcp_gateway'] ); } /*********************** * validate the form ***********************/ do_action( 'rcp_before_form_errors', $_POST ); $is_ajax = isset( $_POST['rcp_ajax'] ); $user_data = rcp_validate_user_data(); if( ! $subscription_id ) { // no subscription level was chosen rcp_errors()->add( 'no_level', __( 'Please choose a subscription level', 'rcp' ), 'register' ); } if( $subscription_id ) { if( $price == 0 && $expiration->duration > 0 && rcp_has_used_trial( $user_data['id'] ) ) { // this ensures that users only sign up for a free trial once rcp_errors()->add( 'free_trial_used', __( 'You may only sign up for a free trial once', 'rcp' ), 'register' ); } } if( ! empty( $discount ) ) { if( rcp_validate_discount( $discount, $subscription_id ) ) { $discount_valid = true; } else { // the entered discount code is incorrect rcp_errors()->add( 'invalid_discount', __( 'The discount you entered is invalid', 'rcp' ), 'register' ); } if( $discount_valid && $price > 0 ) { if( ! $user_data['need_new'] && rcp_user_has_used_discount( $user_data['id'] , $discount ) && apply_filters( 'rcp_discounts_once_per_user', true ) ) { $discount_valid = false; rcp_errors()->add( 'discount_already_used', __( 'You can only use the discount code once', 'rcp' ), 'register' ); } if( $discount_valid ) { $discounts = new RCP_Discounts(); $discount_obj = $discounts->get_by( 'code', $discount ); if( is_object( $discount_obj ) ) { // calculate the after-discount price $price = $discounts->calc_discounted_price( $base_price, $discount_obj->amount, $discount_obj->unit ); } } } } if( $price == 0 && isset( $_POST['rcp_auto_renew'] ) ) { // since free subscriptions do not go through PayPal, they cannot be auto renewed rcp_errors()->add( 'invalid_auto_renew', __( 'Free subscriptions cannot be automatically renewed', 'rcp' ), 'register' ); } // Validate extra fields in gateways with the 2.1+ gateway API if( ! has_action( 'rcp_gateway_' . $gateway ) && $price > 0 ) { $gateways = new RCP_Payment_Gateways; $gateway_var = $gateways->get_gateway( $gateway ); $gateway_obj = new $gateway_var['class']; $gateway_obj->validate_fields(); } do_action( 'rcp_form_errors', $_POST ); // retrieve all error messages, if any $errors = rcp_errors()->get_error_messages(); if ( ! empty( $errors ) && $is_ajax ) { wp_send_json_error( array( 'success' => false, 'errors' => rcp_get_error_messages_html( 'register' ), 'nonce' => wp_create_nonce( 'rcp-register-nonce' ) ) ); } elseif( $is_ajax ) { wp_send_json_success( array( 'success' => true ) ); } // only create the user if there are no errors if( ! empty( $errors ) ) { return; } // deterime the expiration date of the user's subscription if( $expiration->duration > 0 ) { $member_expires = rcp_calc_member_expiration( $expiration ); } else { $member_expires = 'none'; } if( $user_data['need_new'] ) { $user_data['id'] = wp_insert_user( array( 'user_login' => $user_data['login'], 'user_pass' => $user_data['password'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'user_registered' => date( 'Y-m-d H:i:s' ) ) ); } if( $user_data['id'] ) { if( ! rcp_is_active( $user_data['id'] ) ) { rcp_set_status( $user_data['id'], 'pending' ); } // setup a unique key for this subscription $subscription_key = rcp_generate_subscription_key(); update_user_meta( $user_data['id'], 'rcp_subscription_key', $subscription_key ); update_user_meta( $user_data['id'], 'rcp_subscription_level', $subscription_id ); rcp_set_expiration_date( $user_data['id'], $member_expires ); // Set the user's role $role = ! empty( $subscription->role ) ? $subscription->role : 'subscriber'; $user = new WP_User( $user_data['id'] ); $user->add_role( apply_filters( 'rcp_default_user_level', $role, $subscription_id ) ); do_action( 'rcp_form_processing', $_POST, $user_data['id'], $price ); // process a paid subscription if( $price > '0' ) { if( ! empty( $discount ) ) { // record the usage of this discount code $discounts->add_to_user( $user_data['id'], $discount ); // incrase the usage count for the code $discounts->increase_uses( $discount_obj->id ); // if the discount is 100%, log the user in and redirect to success page if( $price == '0' ) { rcp_set_status( $user_data['id'], 'active' ); rcp_email_subscription_status( $user_data['id'], 'active' ); rcp_login_user_in( $user_data['id'], $user_data['login'] ); wp_redirect( rcp_get_return_url( $user_data['id'] ) ); exit; } } // Determine auto renew behavior if( '3' == rcp_get_auto_renew_behavior() && isset( $_POST['rcp_auto_renew'] ) ) { $auto_renew = true; } elseif( '1' == rcp_get_auto_renew_behavior() ) { $auto_renew = true; } else { $auto_renew = false; } // Remove trialing status, if it exists delete_user_meta( $user_data['id'], 'rcp_is_trialing' ); // log the new user in rcp_login_user_in( $user_data['id'], $user_data['login'] ); $redirect = rcp_get_return_url( $user_data['id'] ); $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' => $subscription_key, 'user_id' => $user_data['id'], 'user_name' => $user_data['login'], 'user_email' => $user_data['email'], 'currency' => $rcp_options['currency'], 'auto_renew' => $auto_renew, 'return_url' => $redirect, 'new_user' => $user_data['need_new'], 'post_data' => $_POST ); // send all of the subscription data off for processing by the gateway rcp_send_to_gateway( $gateway, apply_filters( 'rcp_subscription_data', $subscription_data ) ); // process a free or trial subscription } else { // This is a free user registration or trial // if the subscription is a free trial, we need to record it in the user meta if( $member_expires != 'none' ) { // this is so that users can only sign up for one trial update_user_meta( $user_data['id'], 'rcp_has_trialed', 'yes' ); update_user_meta( $user_data['id'], 'rcp_is_trialing', 'yes' ); // activate the user's trial subscription rcp_set_status( $user_data['id'], 'active' ); rcp_email_subscription_status( $user_data['id'], 'trial' ); } else { // set the user's status to free rcp_set_status( $user_data['id'], 'free' ); rcp_email_subscription_status( $user_data['id'], 'free' ); } // date for trial / paid users, "none" for free users rcp_set_expiration_date( $user_data['id'], $member_expires ); if( $user_data['need_new'] ) { if( ! isset( $rcp_options['disable_new_user_notices'] ) ) { // send an email to the admin alerting them of the registration wp_new_user_notification( $user_data['id']) ; } // log the new user in rcp_login_user_in( $user_data['id'], $user_data['login'] ); } // send the newly created user to the redirect page after logging them in wp_redirect( rcp_get_return_url( $user_data['id'] ) ); exit; } // end price check } // end if new user id } // end nonce check }
/** * Process payment confirmation after returning from PayPal * * @since 2.1 */ public function process_confirmation() { if (isset($_POST['rcp_ppe_confirm_nonce']) && wp_verify_nonce($_POST['rcp_ppe_confirm_nonce'], 'rcp-ppe-confirm-nonce')) { $details = $this->get_checkout_details($_POST['token']); if (!empty($_GET['rcp-recurring'])) { // Successful payment, now create the recurring profile $args = array('USER' => $this->username, 'PWD' => $this->password, 'SIGNATURE' => $this->signature, 'VERSION' => '121', 'TOKEN' => $_POST['token'], 'METHOD' => 'CreateRecurringPaymentsProfile', 'PROFILESTARTDATE' => date('Y-m-d\\Tg:i:s', strtotime('+' . $details['subscription']['duration'] . ' ' . $details['subscription']['duration_unit'], time())), 'BILLINGPERIOD' => ucwords($details['subscription']['duration_unit']), 'BILLINGFREQUENCY' => $details['subscription']['duration'], 'AMT' => $details['AMT'], 'INITAMT' => round($details['AMT'] + $details['subscription']['fee'], 2), 'CURRENCYCODE' => $details['CURRENCYCODE'], 'FAILEDINITAMTACTION' => 'CancelOnFailure', 'L_BILLINGTYPE0' => 'RecurringPayments', 'DESC' => $details['subscription']['name'], 'BUTTONSOURCE' => 'EasyDigitalDownloads_SP'); $request = wp_remote_post($this->api_endpoint, array('timeout' => 45, 'sslverify' => false, 'body' => $args)); if (is_wp_error($request)) { $error = '<p>' . __('An unidentified error occurred.', 'rcp') . '</p>'; $error .= '<p>' . $request->get_error_message() . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } elseif (200 == $request['response']['code'] && 'OK' == $request['response']['message']) { parse_str($request['body'], $data); if ('failure' === strtolower($data['ACK'])) { $error = '<p>' . __('PayPal payment processing failed.', 'rcp') . '</p>'; $error .= '<p>' . __('Error message:', 'rcp') . ' ' . $data['L_LONGMESSAGE0'] . '</p>'; $error .= '<p>' . __('Error code:', 'rcp') . ' ' . $data['L_ERRORCODE0'] . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } else { $member = new RCP_Member($details['PAYMENTREQUEST_0_CUSTOM']); $member->renew(true); $member->set_payment_profile_id($data['PROFILEID']); $payment_data = array('date' => date('Y-m-d g:i:s', current_time('timestamp')), 'subscription' => $member->get_subscription_name(), 'payment_type' => 'PayPal Express', 'subscription_key' => $member->get_subscription_key(), 'amount' => round($details['AMT'] + $details['subscription']['fee'], 2), 'user_id' => $member->ID, 'transaction_id' => $data['PROFILEID']); $rcp_payments = new RCP_Payments(); $rcp_payments->insert($payment_data); wp_redirect(esc_url_raw(rcp_get_return_url())); exit; } } else { wp_die(__('Something has gone wrong, please try again', 'rcp'), __('Error', 'rcp'), array('back_link' => true, 'response' => '401')); } } else { // One time payment $args = array('USER' => $this->username, 'PWD' => $this->password, 'SIGNATURE' => $this->signature, 'VERSION' => '121', 'METHOD' => 'DoExpressCheckoutPayment', 'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', 'TOKEN' => $_POST['token'], 'PAYERID' => $_POST['payer_id'], 'PAYMENTREQUEST_0_AMT' => $details['AMT'], 'PAYMENTREQUEST_0_ITEMAMT' => $details['AMT'], 'PAYMENTREQUEST_0_SHIPPINGAMT' => 0, 'PAYMENTREQUEST_0_TAXAMT' => 0, 'PAYMENTREQUEST_0_CURRENCYCODE' => $details['CURRENCYCODE'], 'BUTTONSOURCE' => 'EasyDigitalDownloads_SP'); $request = wp_remote_post($this->api_endpoint, array('timeout' => 45, 'sslverify' => false, 'body' => $args)); if (is_wp_error($request)) { $error = '<p>' . __('An unidentified error occurred.', 'rcp') . '</p>'; $error .= '<p>' . $request->get_error_message() . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } elseif (200 == $request['response']['code'] && 'OK' == $request['response']['message']) { parse_str($request['body'], $data); if ('failure' === strtolower($data['ACK'])) { $error = '<p>' . __('PayPal payment processing failed.', 'rcp') . '</p>'; $error .= '<p>' . __('Error message:', 'rcp') . ' ' . $data['L_LONGMESSAGE0'] . '</p>'; $error .= '<p>' . __('Error code:', 'rcp') . ' ' . $data['L_ERRORCODE0'] . '</p>'; wp_die($error, __('Error', 'rcp'), array('response' => '401')); } else { // Confirm a one-time payment $member = new RCP_Member($details['CUSTOM']); $member->renew(false); $payment_data = array('date' => date('Y-m-d g:i:s', strtotime($data['PAYMENTINFO_0_ORDERTIME'])), 'subscription' => $member->get_subscription_name(), 'payment_type' => 'PayPal Express One Time', 'subscription_key' => $member->get_subscription_key(), 'amount' => $data['PAYMENTINFO_0_AMT'], 'user_id' => $member->ID, 'transaction_id' => $data['PAYMENTINFO_0_TRANSACTIONID']); $rcp_payments = new RCP_Payments(); $rcp_payments->insert($payment_data); wp_redirect(esc_url_raw(rcp_get_return_url())); exit; } } else { wp_die(__('Something has gone wrong, please try again', 'rcp'), __('Error', 'rcp'), array('back_link' => true, 'response' => '401')); } } } elseif (!empty($_GET['token']) && !empty($_GET['PayerID'])) { add_filter('the_content', array($this, 'confirmation_form'), 9999999); } }
/** * Register a new user * * @access public * @since 1.0 */ function rcp_process_registration() { // check nonce if (!(isset($_POST["rcp_register_nonce"]) && wp_verify_nonce($_POST['rcp_register_nonce'], 'rcp-register-nonce'))) { return; } global $rcp_options, $rcp_levels_db; $subscription_id = rcp_get_registration()->get_subscription(); $discount = isset($_POST['rcp_discount']) ? sanitize_text_field($_POST['rcp_discount']) : ''; $price = number_format((double) $rcp_levels_db->get_level_field($subscription_id, 'price'), 2); $price = str_replace(',', '', $price); $subscription = $rcp_levels_db->get_level($subscription_id); $auto_renew = rcp_registration_is_recurring(); // if both today's total and the recurring total are 0, the there is a full discount // if this is not a recurring subscription only check today's total $full_discount = $auto_renew ? rcp_get_registration()->get_total() == 0 && rcp_get_registration()->get_recurring_total() == 0 : rcp_get_registration()->get_total() == 0; // get the selected payment method/gateway if (!isset($_POST['rcp_gateway'])) { $gateway = 'paypal'; } else { $gateway = sanitize_text_field($_POST['rcp_gateway']); } /*********************** * validate the form ***********************/ do_action('rcp_before_form_errors', $_POST); $is_ajax = isset($_POST['rcp_ajax']); $user_data = rcp_validate_user_data(); if (!rcp_is_registration()) { // no subscription level was chosen rcp_errors()->add('no_level', __('Please choose a subscription level', 'rcp'), 'register'); } if ($subscription_id && $price == 0 && $subscription->duration > 0 && rcp_has_used_trial($user_data['id'])) { // this ensures that users only sign up for a free trial once rcp_errors()->add('free_trial_used', __('You may only sign up for a free trial once', 'rcp'), 'register'); } if (!empty($discount)) { // make sure we have a valid discount if (rcp_validate_discount($discount, $subscription_id)) { // check if the user has already used this discount if ($price > 0 && !$user_data['need_new'] && rcp_user_has_used_discount($user_data['id'], $discount) && apply_filters('rcp_discounts_once_per_user', false)) { rcp_errors()->add('discount_already_used', __('You can only use the discount code once', 'rcp'), 'register'); } } else { // the entered discount code is incorrect rcp_errors()->add('invalid_discount', __('The discount you entered is invalid', 'rcp'), 'register'); } } // Validate extra fields in gateways with the 2.1+ gateway API if (!has_action('rcp_gateway_' . $gateway) && $price > 0 && !$full_discount) { $gateways = new RCP_Payment_Gateways(); $gateway_var = $gateways->get_gateway($gateway); $gateway_obj = new $gateway_var['class'](); $gateway_obj->validate_fields(); } do_action('rcp_form_errors', $_POST); // retrieve all error messages, if any $errors = rcp_errors()->get_error_messages(); if (!empty($errors) && $is_ajax) { wp_send_json_error(array('success' => false, 'errors' => rcp_get_error_messages_html('register'), 'nonce' => wp_create_nonce('rcp-register-nonce'))); } elseif ($is_ajax) { wp_send_json_success(array('success' => true)); } // only create the user if there are no errors if (!empty($errors)) { return; } if ($user_data['need_new']) { $user_data['id'] = wp_insert_user(array('user_login' => $user_data['login'], 'user_pass' => $user_data['password'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'display_name' => $user_data['first_name'] . ' ' . $user_data['last_name'], 'user_registered' => date('Y-m-d H:i:s'))); } if (empty($user_data['id'])) { return; } // Setup the member object $member = new RCP_Member($user_data['id']); update_user_meta($user_data['id'], '_rcp_new_subscription', '1'); $subscription_key = rcp_generate_subscription_key(); $old_subscription_id = $member->get_subscription_id(); if ($old_subscription_id) { update_user_meta($user_data['id'], '_rcp_old_subscription_id', $old_subscription_id); } if (!$member->is_active()) { update_user_meta($user_data['id'], 'rcp_subscription_level', $subscription_id); update_user_meta($user_data['id'], 'rcp_subscription_key', $subscription_key); // Ensure no pending level details are set delete_user_meta($user_data['id'], 'rcp_pending_subscription_level'); delete_user_meta($user_data['id'], 'rcp_pending_subscription_key'); $member->set_status('pending'); } else { // If the member is already active, we need to set these as pending changes update_user_meta($user_data['id'], 'rcp_pending_subscription_level', $subscription_id); update_user_meta($user_data['id'], 'rcp_pending_subscription_key', $subscription_key); // Flag the member as having just upgraded update_user_meta($user_data['id'], '_rcp_just_upgraded', current_time('timestamp')); } $member->set_joined_date('', $subscription_id); // Calculate the expiration date for the member $member_expires = $member->calculate_expiration($auto_renew); update_user_meta($user_data['id'], 'rcp_pending_expiration_date', $member_expires); // remove the user's old role, if this is a new user, we need to replace the default role $old_role = get_option('default_role', 'subscriber'); if ($old_subscription_id) { $old_level = $rcp_levels_db->get_level($old_subscription_id); $old_role = !empty($old_level->role) ? $old_level->role : $old_role; } $member->remove_role($old_role); // Set the user's role $role = !empty($subscription->role) ? $subscription->role : 'subscriber'; $user = new WP_User($user_data['id']); $user->add_role(apply_filters('rcp_default_user_level', $role, $subscription_id)); do_action('rcp_form_processing', $_POST, $user_data['id'], $price); // process a paid subscription if ($price > '0') { if (!empty($discount)) { $discounts = new RCP_Discounts(); $discount_obj = $discounts->get_by('code', $discount); // record the usage of this discount code $discounts->add_to_user($user_data['id'], $discount); // increase the usage count for the code $discounts->increase_uses($discount_obj->id); // if the discount is 100%, log the user in and redirect to success page if ($full_discount) { $member->set_expiration_date($member_expires); $member->set_status('active'); rcp_login_user_in($user_data['id'], $user_data['login']); wp_redirect(rcp_get_return_url($user_data['id'])); exit; } } // Remove trialing status, if it exists delete_user_meta($user_data['id'], 'rcp_is_trialing'); // log the new user in rcp_login_user_in($user_data['id'], $user_data['login']); $redirect = rcp_get_return_url($user_data['id']); $subscription_data = array('price' => rcp_get_registration()->get_total(true, false), 'discount' => rcp_get_registration()->get_total_discounts(), 'discount_code' => $discount, 'fee' => rcp_get_registration()->get_total_fees(), 'length' => $subscription->duration, 'length_unit' => strtolower($subscription->duration_unit), 'subscription_id' => $subscription->id, 'subscription_name' => $subscription->name, 'key' => $subscription_key, 'user_id' => $user_data['id'], 'user_name' => $user_data['login'], 'user_email' => $user_data['email'], 'currency' => $rcp_options['currency'], 'auto_renew' => $auto_renew, 'return_url' => $redirect, 'new_user' => $user_data['need_new'], 'post_data' => $_POST); // if giving the user a credit, make sure the credit does not exceed the first payment if ($subscription_data['fee'] < 0 && abs($subscription_data['fee']) > $subscription_data['price']) { $subscription_data['fee'] = -1 * $subscription_data['price']; } update_user_meta($user_data['id'], 'rcp_pending_subscription_amount', $subscription_data['price'] + $subscription_data['fee']); // send all of the subscription data off for processing by the gateway rcp_send_to_gateway($gateway, apply_filters('rcp_subscription_data', $subscription_data)); // process a free or trial subscription } else { // This is a free user registration or trial $member->set_expiration_date($member_expires); // if the subscription is a free trial, we need to record it in the user meta if ($member_expires != 'none') { // activate the user's trial subscription $member->set_status('active'); // this is so that users can only sign up for one trial update_user_meta($user_data['id'], 'rcp_has_trialed', 'yes'); update_user_meta($user_data['id'], 'rcp_is_trialing', 'yes'); rcp_email_subscription_status($user_data['id'], 'trial'); } else { update_user_meta($user_data['id'], 'rcp_subscription_level', $subscription_id); update_user_meta($user_data['id'], 'rcp_subscription_key', $subscription_key); // Ensure no pending level details are set delete_user_meta($user_data['id'], 'rcp_pending_subscription_level'); delete_user_meta($user_data['id'], 'rcp_pending_subscription_key'); // set the user's status to free $member->set_status('free'); rcp_email_subscription_status($user_data['id'], 'free'); } if ($user_data['need_new']) { if (!isset($rcp_options['disable_new_user_notices'])) { // send an email to the admin alerting them of the registration wp_new_user_notification($user_data['id']); } // log the new user in rcp_login_user_in($user_data['id'], $user_data['login']); } // send the newly created user to the redirect page after logging them in wp_redirect(rcp_get_return_url($user_data['id'])); exit; } // end price check }