Exemplo n.º 1
0
/**
 * 
 */
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);
}
Exemplo n.º 2
0
 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);
 }