/** * */ function accesspress_checkout($args = array()) { global $accesspress_checkout_member, $wpdb; $args = wp_parse_args($args, array('product_id' => '', 'renew' => '', 'member' => 0, 'member-key' => '', 'first-name' => '', 'last-name' => '', 'email' => '', 'username' => '', 'password' => '', 'password-repeat' => '', 'payment-method' => '', 'card-name' => '', 'card-number' => '', 'card-month' => '', 'card-year' => '', 'card-security' => '', 'card-country' => '', 'card-postal' => '')); /** Trim space from values */ $args = array_map('trim', $args); // instantiate gateway if ('cc' == $args['payment-method']) { $gateway = new AccessPress_AuthorizeNet_Gateway(); } else { $gateway = new AccessPress_Paypal_Gateway(); } // check for a completed transaction first $completed_transaction = $gateway->complete_sale($args); if (is_wp_error($completed_transaction)) { return $completed_transaction; } if ($completed_transaction) { $report_back = false; extract($completed_transaction); } else { // handle report back $report_back = $gateway->validate_reportback(); if (is_wp_error($report_back)) { return $report_back; } if ($report_back) { // show confirmation form if (method_exists($gateway, 'confirmation_form')) { return $gateway->confirmation_form($report_back); } extract($report_back); } } // populate $args from posted form if (!$report_back && !$completed_transaction) { /** If order ID not set */ if (!$args['product_id']) { return new WP_Error('product_id_not_set', 'The product ID was not set.'); } /** check for resubmit where member was created */ if ($args['member'] && $args['member-key'] && wp_verify_nonce($args['member-key'], 'checkout-member-' . $args['member'])) { $member = $args['member']; } elseif (!$args['first-name'] || !$args['last-name'] || !$args['email'] || !$args['username'] || !$args['password'] || !$args['password-repeat']) { return new WP_Error('account_info_not_filled_out', 'The account information was not filled out.'); } elseif ($args['password'] !== $args['password-repeat']) { return new WP_Error('account_passwords_do_not_match', 'The passwords do not match.'); } /** If no payment method selected */ if (!$args['payment-method'] && accesspress_product_requires_payment($args['product_id'])) { return new WP_Error('payment_method_not_chosen', 'No payment method was chosen.'); } } /** The order array, to be stored as an Order (CPT) */ if (!isset($order_details)) { $duration = get_post_meta($args['product_id'], '_acp_product_duration', true); if ($duration && 'true' == $args['renew']) { $member_orders = get_user_option('acp_orders', (int) $member); if (!empty($member_orders)) { $order_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_product_id' AND meta_value = %s AND post_id IN (" . implode(',', $member_orders) . ')', $args['product_id'])); $order_time = get_post_meta($order_id, '_acp_order_time', true); $order_renewal_time = get_post_meta($order_id, '_acp_order_renewal_time', true); if ($order_time) { $order_details = array('_acp_order_renewal_time' => ($order_renewal_time ? $order_renewal_time : $order_time) + $duration * 86400, '_acp_order_price' => get_post_meta($args['product_id'], '_acp_product_price', true), '_acp_order_id' => $order_id); } } } if (empty($order_details)) { $order_details = array('_acp_order_time' => time(), '_acp_order_status' => 'complete', '_acp_order_product_id' => $args['product_id'], '_acp_order_price' => get_post_meta($args['product_id'], '_acp_product_price', true)); } } /** If CC payment method selected, but information not filled out */ if ('cc' == $args['payment-method']) { if (!$args['card-name'] || !$args['card-number'] || !$args['card-month'] || !$args['card-year'] || !$args['card-security'] || !$args['card-country'] || !$args['card-postal']) { return new WP_Error('credit_card_not_filled_out', 'The credit card info was not completed.'); } } /** Create member before sending to gateway so we have a unique ID */ if (!isset($member)) { $member = accesspress_create_member(array('first_name' => $args['first-name'], 'last_name' => $args['last-name'], 'user_email' => $args['email'], 'user_login' => $args['username'], 'user_pass' => $args['password'])); } /** Bail, if there's a problem */ if (is_wp_error($member)) { return $member; } /** Add member ID to order details */ $order_details['_acp_order_member_id'] = $accesspress_checkout_member = $member; /** now to the gateway */ if (!$report_back && !$completed_transaction) { $args['order_details'] = $order_details; $order_details = $gateway->process_order($args); } /** Bail, if the order is incomplete or there's an error on the gateway */ if (empty($order_details) || is_wp_error($order_details)) { return $order_details; } return accesspress_create_order($member, $order_details); }
public function register_user($setting, $args) { if (empty($this->_product_id) || !$this->_product_id) { return; } $product = get_post($this->_product_id); if (!$product || empty($product->post_type) || $product->post_type != 'acp-products') { return new WP_Error('product_missing', __('Product information missing', 'premise')); } $optin_vars = array(); // eliminate case mismatches foreach ((array) $args as $key => $value) { $optin_vars[strtolower($key)] = $value; } $userdata = array('first_name' => empty($this->_premise_meta['member-merge-first-name']) ? $this->_member_args['first-name'] : $optin_vars[strtolower($this->_premise_meta['member-merge-first-name'])], 'last_name' => empty($this->_premise_meta['member-merge-last-name']) ? $this->_member_args['last-name'] : $optin_vars[strtolower($this->_premise_meta['member-merge-last-name'])], 'user_email' => empty($this->_premise_meta['member-merge-email']) ? '' : $optin_vars[strtolower($this->_premise_meta['member-merge-email'])], 'user_login' => $this->_member_args['username'], 'user_pass' => $this->_member_args['password']); return accesspress_create_member($userdata); }