Joomshopping и очистка корзины при оплате

Joomshopping отличный компонент для интернет магазина на joomla. Но есть недочет (а может так и задумано!) в реализации работы с корзиной. Если вы произведете платеж в любой системе оплаты, будь то yandex money или yandex money, а может даже агрегатор robokassa, вы просто обязаны вернуться назад для очистки корзины. А все ли возвращаются?! Нет, не все. И что будет с корзиной? Да ничего. Она будет наполнена тем что уже оплачено. Это связано с тем, что корзина хранится в куках. Сайт платежной системы обращается к вашему сайту, но к кукам доступа нет,поэтому все так и происходит. Думаем логически! Не можем чистить куки со стороны, значит будем чистить на месте. А когда? А в первый подходящий момент. Оказалась одна проблема. Плагин платежки был закодирован, а времени было немного, поэтому пришлось на скоряк делать костыль...

Поехали. Находим файл /components/com_jshopping/lib/factory.php, в нем находим функцию getConfig(), она обычно идет в начале класса JSFactory. Идем в конец функции и вставляем следующий код перед return $config;

//чистим корзину  если заказ закрыт
	$session = JFactory::getSession();
    $order_id = $session->get('jshop_end_order_id');
	if ($order_id){
		$db = JFactory::getDBO();
		$query = "SELECT * FROM shop_jshopping_orders where order_id={$order_id}";
		$res = $db->setQuery($query);
		$ord = $db->loadObjectList();
		$ord = $ord[0];
		if ($ord->order_status == 6 && $ord->payment_method_id == 14){//id статуса, обычно статус оплаты! Замените на код вашего, если не совпадает!!! а также  id метода оплаты, тоже измените на ваш!
			$session = JFactory::getSession();
			$session->set('check_params', null);
			$session->set('cart', null);
			$session->set('jhop_max_step', null);
			$session->set('jshop_price_shipping_tax_percent', null);
			$session->set('jshop_price_shipping', null);
			$session->set('jshop_price_shipping_tax', null);
			$session->set('pm_params', null);
			$session->set('payment_method_id', null);
			$session->set('jshop_payment_price', null);
			$session->set('shipping_method_id', null);
			$session->set('sh_pr_method_id', null);
			$session->set('jshop_price_shipping_tax_percent', null);
			$session->set('jshop_end_order_id', null);
			$session->set('jshop_send_end_form', null);
			$session->set('show_pay_without_reg', 0);
		}
	}
	//

Сохраняем и проверяем, после оплаты обновление или переход на другую страницу очистят корзину.

P. S. Костыль, он и в Африке костыль. Магазин этот в связи с кучей доработок еще предшествующими разработчиками при любом обновлении потребует кардинальной доработки, поэтому я заведомо знал, что обновений уже не будет. Имейте в виду, что обновление ядра магазина вашу дописку срубит под корень, а по возможности ищите другие решения.
#joomla
#joomshopping

One thought on “Joomshopping и очистка корзины при оплате”

  1. Виталий спасибо за Ваш труд! Вот действительно, «встретишь там где не ожидаешь»))) Дело в том, что я перерыл все специализированные форумы о joomshoppinge но ни где не нашел решения этого «косяка». А на Ваш сайт забрёл по другой теме и на тебе — «Joomshopping и очистка корзины при оплате»! Удачи и творческих успехов Вам!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *