Перейти к содержанию
Форум поддержки пользователей VamShop

Фиксим проблему изменения данных при оплате онлайн


Рекомендуемые сообщения

Сценарий следующий:

Человек выбирает доставку А. за 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

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, надо будет потестировать.

Если всё нормально, наверное можно будет по умолчанию в VamShop добавить.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...