KoVaLsKy 59 Опубликовано 6 июля, 2018 Жалоба Share Опубликовано 6 июля, 2018 Сценарий следующий: Человек выбирает доставку А. за N рублей и оплату через онлайн платежные системы Уходит на страницу оплаты (или у него открывается виджет оплаты) Возвращается и решает сменить модуль оплаты \ вариант доставки, в "Итого" на странице оформления заказа данные меняются, НО Тут появляется наша проблема: Заказ уже создан, модули доставки, оплаты и итоговая стоимость вписаны, т.е как минимум оплата не пройдет, как максимум - все данные будут расходиться. Решение: Открываем includes/classes/order_total.php Находим строку $output_string .= ' <tr>'."\n".' <td align="right" class="main code='.$GLOBALS[$class]->code.' val='.$GLOBALS[$class]->output[$i]['value'].'">'.$GLOBALS[$class]->output[$i]['title'].'</td>'."\n".' <td align="right" class="main">'.$GLOBALS[$class]->output[$i]['text'].'</td>'."\n".' </tr>'; Сразу ПОСЛЕ нее вставляем if($GLOBALS[$class]->code == 'ot_total'){ $_SESSION['var_ot_total_cost'] = $GLOBALS[$class]->output[$i]['value']; } //kovalsky if($GLOBALS[$class]->code == 'ot_shipping'){ $_SESSION['var_ot_shipping_cost'] = $GLOBALS[$class]->output[$i]['value']; //kovalsky $_SESSION['var_ot_shipping_title'] = $GLOBALS[$class]->output[$i]['title']; //kovalsky $_SESSION['var_ot_shipping_class'] = $_SESSION['shipping']['id'];//kovalsky } Теперь при каждом изменении доставки\оплаты у нас в сессию "вбивается" итоговая стоимость заказа, способ доставки, стоимость доставки и его описание. Теперь в платежных модулях находим function process_button() { и внутри данной функции, желательно до вызова класса order вставялем if (vam_db_num_rows($old_orders_query) == 1) { // Если заказ уже создан $old_orders = vam_db_fetch_array($old_orders_query); $shipping_class = $old_orders['shipping_class']; if($shipping_class != $_SESSION['var_ot_shipping_class']){ //Если изменился способ доставки vam_db_query("update " . TABLE_ORDERS . " set shipping_class = '" . $_SESSION['var_ot_shipping_class'] . "', shipping_method = '" . $_SESSION['var_ot_shipping_title'] . "' where orders_id = '" . (int)$order_id . "'"); } $ot_shipping_query = vam_db_query("select value from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . $order_id . "' and class = 'ot_shipping'"); $ot_shipping = vam_db_fetch_array($ot_shipping_query); if($ot_shipping['value'] != $_SESSION['var_ot_shipping_cost']){ //Если изменилась стоимость доставки vam_db_query("update " . TABLE_ORDERS_TOTAL . " set value = '" . $vamPrice->Format($_SESSION['var_ot_shipping_cost'],false) . "', text = '" . $vamPrice->Format($_SESSION['var_ot_shipping_cost'],true) . "' where orders_id = '" . (int)$order_id . "' and class = 'ot_shipping' "); } $ot_total_query = vam_db_query("select value from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . $order_id . "' and class = 'ot_total'"); $ot_total = vam_db_fetch_array($ot_shipping_query); if($ot_total['value'] != $_SESSION['var_ot_total_cost']){ //Если изменилась итоговая стоимость покупки $ot_text = '<b>' . $vamPrice->Format($_SESSION['var_ot_total_cost'],true) . '</b>'; vam_db_query("update " . TABLE_ORDERS_TOTAL . " set value = '" . $vamPrice->Format($_SESSION['var_ot_total_cost'],false) . "', text = '" . $ot_text . "' where orders_id = '" . (int)$order_id . "' and class = 'ot_total' "); } } Данный код меняет информацию в таблице с заказами и в таблице с итогами заказа при вызове формы оплаты. P.S фикс придумали вместе с @Nexoos Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 июля, 2018 Жалоба Share Опубликовано 6 июля, 2018 Спасибо, надо будет потестировать. Если всё нормально, наверное можно будет по умолчанию в VamShop добавить. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения