KoVaLsKy 59 Posted July 6, 2018 Report Share Posted July 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 Link to post Share on other sites
support 447 Posted July 6, 2018 Report Share Posted July 6, 2018 Спасибо, надо будет потестировать. Если всё нормально, наверное можно будет по умолчанию в VamShop добавить. Link to post Share on other sites
Recommended Posts