function fn_process_paypal_ipn($order_id, $data) { $order_info = fn_get_order_info($order_id); if (!empty($order_info) && !empty($data['txn_id']) && (empty($order_info['payment_info']['txn_id']) || $data['payment_status'] != 'Completed' || $data['payment_status'] == 'Completed' && $order_info['payment_info']['txn_id'] !== $data['txn_id'])) { //Can't check refund transactions. if (isset($data['txn_type']) && !fn_validate_paypal_order_info($data, $order_info)) { return false; } $pp_settings = fn_get_paypal_settings(); fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); fn_form_cart($order_id, $cart, $customer_auth); if ($pp_settings['override_customer_info'] == 'Y') { $cart['user_data'] = fn_paypal_get_customer_info($data); } $cart['order_id'] = $order_id; $cart['payment_info'] = $order_info['payment_info']; $cart['payment_info']['protection_eligibility'] = !empty($data['protection_eligibility']) ? $data['protection_eligibility'] : ''; $cart['payment_id'] = $order_info['payment_id']; if (!empty($data['memo'])) { //Save customer notes $cart['notes'] = $data['memo']; } if ($data['payment_status'] == 'Completed') { //save uniq ipn id to avoid double ipn processing $cart['payment_info']['txn_id'] = $data['txn_id']; } if (!empty($data['payer_email'])) { $cart['payment_info']['customer_email'] = $data['payer_email']; } if (!empty($data['payer_id'])) { $cart['payment_info']['client_id'] = $data['payer_id']; } // mark order as incomplete to increase inventory fn_change_order_status($order_id, STATUS_INCOMPLETED_ORDER); //Sometimes, for some reasons cart_id in product products calculated incorrectly, so we need recalculate it. $cart['change_cart_products'] = true; // Store shipping rates fn_store_shipping_rates($order_id, $cart, $customer_auth); fn_calculate_cart_content($cart, $customer_auth); $cart['payment_info']['order_status'] = $pp_settings['pp_statuses'][strtolower($data['payment_status'])]; list($order_id, ) = fn_update_order($cart, $order_id); if ($order_id) { fn_change_order_status($order_id, $pp_settings['pp_statuses'][strtolower($data['payment_status'])]); if (in_array($pp_settings['pp_statuses'][strtolower($data['payment_status'])], fn_get_order_paid_statuses())) { db_query('DELETE FROM ?:user_session_products WHERE order_id = ?i AND type = ?s', $order_id, 'C'); } if (fn_allowed_for('MULTIVENDOR')) { $child_order_ids = db_get_fields("SELECT order_id FROM ?:orders WHERE parent_order_id = ?i", $order_id); if (!empty($child_order_ids)) { foreach ($child_order_ids as $child_order_id) { fn_update_order_payment_info($child_order_id, $cart['payment_info']); } } } } return true; } }
if ($mode == 'customer_info') { if (!empty($_REQUEST['profile_id'])) { $user_data = fn_get_user_info($customer_auth['user_id'], true, $_REQUEST['profile_id']); Tygh::$app['view']->assign('user_data', $user_data); } return array(CONTROLLER_STATUS_OK, 'order_management' . $suffix); } // // Edit order // if ($mode == 'edit' && !empty($_REQUEST['order_id'])) { fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); $cart_status = md5(serialize($cart)); fn_form_cart($_REQUEST['order_id'], $cart, $customer_auth); fn_store_shipping_rates($_REQUEST['order_id'], $cart, $customer_auth); if ($cart_status == md5(serialize($cart))) { // Order info was not found or customer does not have enought permissions return array(CONTROLLER_STATUS_DENIED, ''); } $cart['order_id'] = $_REQUEST['order_id']; return array(CONTROLLER_STATUS_REDIRECT, 'order_management.update'); // // Create new order // } elseif ($mode == 'new') { fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); return array(CONTROLLER_STATUS_REDIRECT, 'order_management.add'); // // Update order page