예제 #1
0
        fn_create_payment_form($src, array(), '3-D Secure', false, 'get', false, 'parent');
        exit;
    } elseif ($mode == 'auth' && !empty(Tygh::$app['session']['cmpi']['order_id'])) {
        $view = Tygh::$app['view'];
        $view->assign('order_action', __('placing_order'));
        $view->display('views/orders/components/placing_order.tpl');
        fn_flush();
        fn_cmpi_authenticate();
        if (Tygh::$app['session']['cmpi']['signature'] == 'Y' && in_array(Tygh::$app['session']['cmpi']['pares'], array('Y', 'A', 'U'))) {
            define('DO_DIRECT_PAYMENT', true);
        } else {
            Tygh::$app['session']['cmpi']['auth_error'] = true;
            fn_set_notification('E', __('authentication_failed'), __('text_authentication_failed_message'));
        }
        define('CMPI_PROCESSED', true);
        fn_start_payment(Tygh::$app['session']['cmpi']['order_id']);
        fn_order_placement_routines('route', Tygh::$app['session']['cmpi']['order_id']);
        exit;
    }
}
/**
 * Make cmpi_lookup request to 3-D Secure sevice provider
 *
 * @param array $processor_data Payment processor data
 * @param array $order_info Order information
 * @return boolean true
 */
function fn_cmpi_lookup($processor_data, $order_info, $mode = '')
{
    unset(Tygh::$app['session']['cmpi']);
    $amount = preg_replace('/\\D/', '', $order_info['total']);
예제 #2
0
 public static function apiPlaceOrder($data, &$response, $lang_code = CART_LANGUAGE)
 {
     $cart =& $_SESSION['cart'];
     $auth =& $_SESSION['auth'];
     if (empty($cart)) {
         $response->addError('ERROR_ACCESS_DENIED', __('access_denied', $lang_code));
         $response->returnResponse();
     }
     if (!empty($data['user'])) {
         fn_twg_api_set_cart_user_data($data['user'], $response, $lang_code);
     }
     if (empty($auth['user_id']) && empty($cart['user_data'])) {
         $response->addError('ERROR_ACCESS_DENIED', __('access_denied', $lang_code));
         $response->returnResponse();
     }
     if (empty($data['payment_info']) && !empty($cart['extra_payment_info'])) {
         $data['payment_info'] = $cart['extra_payment_info'];
     }
     if (!empty($data['payment_info'])) {
         $cart['payment_id'] = (int) $data['payment_info']['payment_id'];
         unset($data['payment_info']['payment_id']);
         if (!empty($data['payment_info'])) {
             $cart['payment_info'] = $data['payment_info'];
         }
         unset($cart['payment_updated']);
         fn_update_payment_surcharge($cart, $auth);
         fn_save_cart_content($cart, $auth['user_id']);
     }
     unset($cart['payment_info']['secure_card_number']);
     // Remove previous failed order
     if (!empty($cart['failed_order_id']) || !empty($cart['processed_order_id'])) {
         $_order_ids = !empty($cart['failed_order_id']) ? $cart['failed_order_id'] : $cart['processed_order_id'];
         foreach ($_order_ids as $_order_id) {
             fn_delete_order($_order_id);
         }
         $cart['rewrite_order_id'] = $_order_ids;
         unset($cart['failed_order_id'], $cart['processed_order_id']);
     }
     if (!empty($data['shippings'])) {
         if (!fn_checkout_update_shipping($cart, $data['shippings'])) {
             unset($cart['shipping']);
         }
     }
     Registry::set('runtime.controller', 'checkout', true);
     list(, $_SESSION['shipping_rates']) = fn_calculate_cart_content($cart, $auth, 'E');
     Registry::set('runtime.controller', 'twigmo');
     if (empty($cart['shipping']) && $cart['shipping_failed']) {
         $response->addError('ERROR_WRONG_CHECKOUT_DATA', __('wrong_shipping_info', $lang_code));
         $response->returnResponse();
     }
     if (empty($cart['payment_info']) && !isset($cart['payment_id'])) {
         $response->addError('ERROR_WRONG_CHECKOUT_DATA', __('wrong_payment_info', $lang_code));
         $response->returnResponse();
     }
     if (!empty($data['notes'])) {
         $cart['notes'] = $data['notes'];
     }
     $cart['details'] = fn_twg_get_twigmo_order_note();
     Registry::set('runtime.controller', 'checkout', true);
     list($order_id, $process_payment) = fn_place_order($cart, $auth);
     Registry::set('runtime.controller', 'twigmo');
     if (empty($order_id)) {
         return false;
     }
     if ($process_payment == true) {
         $payment_info = !empty($cart['payment_info']) ? $cart['payment_info'] : array();
         Registry::set('runtime.mode', 'place_order');
         fn_start_payment($order_id, array(), $payment_info);
     }
     self::orderPlacementRoutines($order_id);
     return $order_id;
 }
예제 #3
0
                 if (!fn_is_allowed_options_exceptions($exceptions, $v['product_options'], $v['options_type'], $v['exceptions_type'])) {
                     fn_set_notification('E', __('notice'), __('product_options_forbidden_combination', array('[product]' => $v['product'])));
                     fn_delete_cart_product($cart, $k);
                     return array(CONTROLLER_STATUS_REDIRECT, "checkout.cart");
                 }
             }
         }
     }
     list($order_id, $process_payment) = fn_place_order($cart, $auth);
     // Clean up saved shipping rates
     unset($_SESSION['product_groups']);
     if (!empty($order_id)) {
         if (empty($_REQUEST['skip_payment']) && $process_payment == true || !empty($_REQUEST['skip_payment']) && empty($auth['act_as_user'])) {
             // administrator, logged in as customer can skip payment
             $payment_info = !empty($cart['payment_info']) ? $cart['payment_info'] : array();
             fn_start_payment($order_id, array(), $payment_info);
         }
         fn_order_placement_routines('route', $order_id);
     } else {
         return array(CONTROLLER_STATUS_REDIRECT, "checkout.cart");
     }
 }
 if ($mode == 'update_steps') {
     $user_data = !empty($_REQUEST['user_data']) ? $_REQUEST['user_data'] : array();
     $_suffix = ".checkout";
     unset($user_data['user_type']);
     if (!empty($auth['user_id'])) {
         if (isset($user_data['profile_id'])) {
             if (empty($user_data['profile_id'])) {
                 $user_data['profile_type'] = 'S';
             }
예제 #4
0
파일: cmpi.php 프로젝트: askzap/ultimate
        fn_create_payment_form($src, array(), '3-D Secure', false, 'get', false, 'parent');
        exit;
    } elseif ($mode == 'auth' && !empty($_SESSION['cmpi']['order_id'])) {
        $view = Tygh::$app['view'];
        $view->assign('order_action', __('placing_order'));
        $view->display('views/orders/components/placing_order.tpl');
        fn_flush();
        fn_cmpi_authenticate();
        if ($_SESSION['cmpi']['signature'] == 'Y' && in_array($_SESSION['cmpi']['pares'], array('Y', 'A', 'U'))) {
            define('DO_DIRECT_PAYMENT', true);
        } else {
            $_SESSION['cmpi']['auth_error'] = true;
            fn_set_notification('E', __('authentication_failed'), __('text_authentication_failed_message'));
        }
        define('CMPI_PROCESSED', true);
        fn_start_payment($_SESSION['cmpi']['order_id']);
        fn_order_placement_routines('route', $_SESSION['cmpi']['order_id']);
        exit;
    }
}
/**
 * Make cmpi_lookup request to 3-D Secure sevice provider
 *
 * @param array $processor_data Payment processor data
 * @param array $order_info Order information
 * @return boolean true
 */
function fn_cmpi_lookup($processor_data, $order_info, $mode = '')
{
    unset($_SESSION['cmpi']);
    $amount = preg_replace('/\\D/', '', $order_info['total']);
예제 #5
0
/**
 * Place order handler
 *
 * @param  array $cart   Cart
 * @param  array $auth   Auth
 * @param  array $params Params
 * @return str
 */
function fn_checkout_place_order(&$cart, &$auth, $params)
{
    // Prevent unauthorized access
    if (empty($cart['user_data']['email'])) {
        return PLACE_ORDER_STATUS_DENIED;
    }
    // Prevent using disabled payment method by challenging HTTP data
    if (!empty($params['payment_id'])) {
        $cart['payment_id'] = $params['payment_id'];
    }
    if (isset($cart['payment_id'])) {
        $payment_method_data = fn_get_payment_method_data($cart['payment_id']);
        if (!empty($payment_method_data['status']) && $payment_method_data['status'] != 'A') {
            return PLACE_ORDER_STATUS_DENIED;
        }
    }
    // Remove previous failed order
    if (!empty($cart['failed_order_id']) || !empty($cart['processed_order_id'])) {
        $_order_ids = !empty($cart['failed_order_id']) ? $cart['failed_order_id'] : $cart['processed_order_id'];
        foreach ($_order_ids as $_order_id) {
            fn_delete_order($_order_id);
        }
        $cart['rewrite_order_id'] = $_order_ids;
        unset($cart['failed_order_id'], $cart['processed_order_id']);
    }
    if (!empty($params['payment_info'])) {
        $cart['payment_info'] = $params['payment_info'];
    } else {
        $cart['payment_info'] = array();
    }
    if (empty($params['payment_info']) && !empty($cart['extra_payment_info'])) {
        $cart['payment_info'] = empty($cart['payment_info']) ? array() : $cart['payment_info'];
        $cart['payment_info'] = array_merge($cart['extra_payment_info'], $cart['payment_info']);
    }
    unset($cart['payment_info']['secure_card_number']);
    if (!empty($cart['products'])) {
        foreach ($cart['products'] as $cart_id => $product) {
            $_is_edp = db_get_field("SELECT is_edp FROM ?:products WHERE product_id = ?i", $product['product_id']);
            if (fn_check_amount_in_stock($product['product_id'], $product['amount'], empty($product['product_options']) ? array() : $product['product_options'], $cart_id, $_is_edp, 0, $cart) == false) {
                fn_delete_cart_product($cart, $cart_id);
                return PLACE_ORDER_STATUS_TO_CART;
            }
            if (!fn_allowed_for('ULTIMATE:FREE')) {
                $exceptions = fn_get_product_exceptions($product['product_id'], true);
                if (!isset($product['options_type']) || !isset($product['exceptions_type'])) {
                    $product = array_merge($product, db_get_row('SELECT options_type, exceptions_type FROM ?:products WHERE product_id = ?i', $product['product_id']));
                }
                if (!fn_is_allowed_options_exceptions($exceptions, $product['product_options'], $product['options_type'], $product['exceptions_type'])) {
                    fn_set_notification('E', __('notice'), __('product_options_forbidden_combination', array('[product]' => $product['product'])));
                    fn_delete_cart_product($cart, $cart_id);
                    return PLACE_ORDER_STATUS_TO_CART;
                }
                if (!fn_is_allowed_options($product)) {
                    fn_set_notification('E', __('notice'), __('product_disabled_options', array('[product]' => $product['product'])));
                    fn_delete_cart_product($cart, $cart_id);
                    return PLACE_ORDER_STATUS_TO_CART;
                }
            }
        }
    }
    list($order_id, $process_payment) = fn_place_order($cart, $auth);
    // Clean up saved shipping rates
    unset($_SESSION['product_groups']);
    if (!empty($order_id)) {
        if (empty($params['skip_payment']) && $process_payment == true || !empty($params['skip_payment']) && empty($auth['act_as_user'])) {
            // administrator, logged in as customer can skip payment
            $payment_info = !empty($cart['payment_info']) ? $cart['payment_info'] : array();
            fn_start_payment($order_id, array(), $payment_info);
        }
        fn_order_placement_routines('route', $order_id);
        return PLACE_ORDER_STATUS_OK;
    } else {
        return PLACE_ORDER_STATUS_TO_CART;
    }
}
예제 #6
0
                 $_o_ids = $auth['order_ids'];
             }
             $last_order_id = empty($auth['user_id']) ? array_pop($_o_ids) : db_get_field("SELECT order_id FROM ?:orders WHERE user_id = ?i ORDER BY order_id DESC", $auth['user_id']);
 
             return array(CONTROLLER_STATUS_REDIRECT, "orders.details?order_id=$last_order_id");
         }*/
 // Time of placing ordes is saved to avoid duplicate  orders.
 fn_set_cookie('last_order_time', TIME);
 list($order_id, $process_payment) = fn_place_order($cart, $auth);
 if (!empty($order_id)) {
     $view->assign('order_action', fn_get_lang_var('placing_order'));
     $view->display('views/orders/components/placing_order.tpl');
     fn_flush();
     if (empty($_REQUEST['skip_payment']) && $process_payment == true) {
         // administrator, logged in as customer can skip payment
         fn_start_payment($order_id);
     }
     // 29.11.2014 - send sms to customer
     $setting_array = db_get_fields("SELECT value FROM ?:settings WHERE option_name = 'send_sms'");
     $is_sms_enabled = $setting_array[0] == 'Y';
     if ($is_sms_enabled) {
         $params = array();
         $params['user'] = '******';
         $params['pwd'] = '1589437';
         $params['sadr'] = 'KorZin.Net';
         $params['dadr'] = str_replace(array("(", ")", "-", " "), "", $cart['user_data']['fields'][35]);
         $status_data = db_get_row("SELECT ?:status_descriptions.sms_text FROM ?:statuses LEFT JOIN ?:status_descriptions ON ?:statuses.status = ?:status_descriptions.status AND ?:statuses.type = ?:status_descriptions.type AND ?:status_descriptions.lang_code = ?s WHERE ?:statuses.status = ?s ORDER BY ?:status_descriptions.description", DESCR_SL, 'O', $_REQUEST['type']);
         $params['text'] = $status_data['sms_text'];
         $params['order_id'] = $order_id;
         $params['total'] = $cart['total'];
         $result = fn_send_sms("https://web.smslab.ru:12778/sendsms", $params);
 }
 if (empty($cart['stored_shipping'])) {
     $cart['calculate_shipping'] = true;
 }
 // recalculate cart content after update
 list($cart_products, $product_groups) = fn_calculate_cart_content($cart, $customer_auth);
 $cart['notes'] = !empty($_REQUEST['customer_notes']) ? $_REQUEST['customer_notes'] : '';
 $cart['payment_info'] = !empty($_REQUEST['payment_info']) ? $_REQUEST['payment_info'] : array();
 list($order_id, $process_payment) = fn_place_order($cart, $customer_auth, $action, $auth['user_id']);
 if (!empty($order_id)) {
     if ($action != 'save') {
         $action = 'route';
     }
     if ($process_payment == true) {
         $payment_info = !empty($cart['payment_info']) ? $cart['payment_info'] : array();
         fn_start_payment($order_id, fn_get_notification_rules($_REQUEST), $payment_info);
     }
     if (!empty($_REQUEST['update_order']['details'])) {
         db_query('UPDATE ?:orders SET details = ?s WHERE order_id = ?i', $_REQUEST['update_order']['details'], $order_id);
     }
     $notification_rules = fn_get_notification_rules($_REQUEST);
     // change status if it posted
     if (!empty($_REQUEST['order_status'])) {
         $order_info = fn_get_order_short_info($order_id);
         if ($order_info['status'] != $_REQUEST['order_status']) {
             if ($process_payment == true) {
                 fn_set_notification('W', __('warning'), __('status_changed_after_process_payment'));
             } elseif (fn_change_order_status($order_id, $_REQUEST['order_status'], '', $notification_rules)) {
                 $order_info = fn_get_order_short_info($order_id);
                 $new_status = $order_info['status'];
                 if ($_REQUEST['order_status'] != $new_status) {
예제 #8
0
            }
            if (floatval($payment['p_surcharge'])) {
                $surcharge_value += fn_format_price(($order_info['total'] - $order_info['payment_surcharge']) * $payment['p_surcharge'] / 100);
            }
            $update_order['payment_surcharge'] = $surcharge_value;
            $update_order['total'] = fn_format_price($order_info['total'] - $order_info['payment_surcharge'] + $surcharge_value);
        } else {
            $update_order['total'] = fn_format_price($order_info['total'] - $order_info['payment_surcharge']);
            $update_order['payment_surcharge'] = 0;
        }
        db_query('UPDATE ?:orders SET ?u WHERE order_id = ?i', $update_order, $_REQUEST['order_id']);
        // Change order status back to Open and restore amount.
        fn_change_order_status($order_info['order_id'], 'O', $order_info['status'], fn_get_notification_rules(array(), false));
        $_SESSION['cart']['placement_action'] = 'repay';
        // Process order (payment)
        fn_start_payment($order_info['order_id']);
        fn_order_placement_routines($order_info['order_id'], array(), true, 'repay');
    }
    return array(CONTROLLER_STATUS_OK, "orders.details?order_id={$_REQUEST['order_id']}");
}
fn_add_breadcrumb(fn_get_lang_var('orders'), $mode == 'search' ? '' : "orders.search");
//
// Show invoice
//
if ($mode == 'invoice') {
    fn_add_breadcrumb(fn_get_lang_var('order') . ' #' . $_REQUEST['order_id'], "orders.details?order_id={$_REQUEST['order_id']}");
    fn_add_breadcrumb(fn_get_lang_var('invoice'));
    $view->assign('order_info', fn_get_order_info($_REQUEST['order_id']));
    //
    // Show invoice on separate page
    //
예제 #9
0
function fn_charge_subscription($subscription_id)
{
    $_SESSION['cart'] = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
    $cart =& $_SESSION['cart'];
    $_SESSION['customer_auth'] = isset($_SESSION['customer_auth']) ? $_SESSION['customer_auth'] : array();
    $customer_auth =& $_SESSION['customer_auth'];
    fn_clear_cart($cart, true);
    $customer_auth = fn_fill_auth();
    $subscription = fn_get_recurring_subscription_info($subscription_id);
    if ($subscription['status'] != 'A') {
        fn_set_notification('E', fn_get_lang_var('error'), fn_get_lang_var('rb_subscription_inactive'));
    } else {
        $product_data = array();
        foreach ($subscription['order_info']['items'] as $k => $item) {
            if (!empty($subscription['order_info']['items'][$k]['extra']['recurring_plan_id']) && $subscription['order_info']['items'][$k]['extra']['recurring_plan_id'] == $subscription['plan_id'] && $subscription['order_info']['items'][$k]['extra']['recurring_duration'] == $subscription['orig_duration']) {
                $product_data[$subscription['order_info']['items'][$k]['product_id']] = array('amount' => $subscription['order_info']['items'][$k]['amount'], 'extra' => array('recurring_plan_id' => $subscription['plan_id'], 'recurring_force_calculate' => true, 'recurring_subscription_id' => $subscription['subscription_id'], 'recurring_plan' => $subscription['order_info']['items'][$k]['extra']['recurring_plan'], 'recurring_duration' => $subscription['order_info']['items'][$k]['extra']['recurring_duration']));
                if (!empty($subscription['order_info']['items'][$k]['extra']['product_options'])) {
                    $product_data[$subscription['order_info']['items'][$k]['product_id']]['product_options'] = $subscription['order_info']['items'][$k]['extra']['product_options'];
                }
            }
        }
        $cart['user_id'] = $subscription['user_id'];
        $u_data = db_get_row("SELECT user_id, user_type, tax_exempt FROM ?:users WHERE user_id = ?i", $cart['user_id']);
        $customer_auth = fn_fill_auth($u_data);
        $cart['user_data'] = array();
        fn_add_product_to_cart($product_data, $cart, $customer_auth);
        $cart['profile_id'] = 0;
        $cart['user_data'] = fn_get_user_info($customer_auth['user_id'], true, $cart['profile_id']);
        if (!empty($cart['user_data'])) {
            $profile_fields = fn_get_profile_fields('O', $customer_auth);
            $cart['ship_to_another'] = fn_check_shipping_billing($cart['user_data'], $profile_fields);
        }
        fn_calculate_cart_content($cart, $customer_auth, 'A', true, 'I');
        $cart['payment_id'] = $subscription['order_info']['payment_id'];
        $cart['payment_info'] = $subscription['order_info']['payment_info'];
        $cart['recurring_subscription_id'] = $subscription_id;
        list($order_id, $process_payment) = fn_place_order($cart, $customer_auth);
        if (!empty($order_id)) {
            $order_info = fn_get_order_info($order_id, true);
            $evt_data = array('subscription_id' => $subscription_id, 'timestamp' => $order_info['timestamp'], 'event_type' => 'C');
            db_query("INSERT INTO ?:recurring_events ?e", $evt_data);
            if ($process_payment == true) {
                fn_start_payment($order_id);
            }
            $edp_data = fn_generate_ekeys_for_edp(array(), $order_info);
            fn_order_notification($order_info, $edp_data);
        }
    }
}