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']);
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; }
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'; }
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']);
/** * 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; } }
$_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) {
} 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 //
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); } } }