Как сделать обязательным поле ввода email и телефон при оформлении заказа. 54 ФЗ
Добрый день. Подключил к магазину яндекс-кассу. Модуль использовал из магазина приложений.
Столкнулся с проблемой онлайн оплаты при оформлении заказа на сайте. На последнем шаге-"оплатить через Яндекс" при нажатии на эту кнопку получал ошибку.
В службе поддержки Яндекс денег сообщили, что ошибка вызвана тем, что при оформлении тестового заказа я не указал свою почту и телефон, что является обязательным для выполнения 54 ФЗ. Фискальный чек при онлайн оплате должен быть отправлен покупателю на почту или телефон.
Прошу подсказать как сделать обязательными для заполнения поля телефон и почта.
код и настройки ТДС ИнтернетМагазинКорзина ниже
<?php
$Shop_Cart_Controller_Show = Core_Page::instance()->object;
$oShop = $Shop_Cart_Controller_Show->getEntity();
Shop_Payment_System_Handler::checkAfterContent($oShop);
// ------------------------------------------------
// Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы
// ------------------------------------------------
if (isset($_REQUEST['payment'])
|| isset($_GET['action']) && ($_GET['action'] == 'PaymentSuccess' || $_GET['action'] == 'PaymentFail'
|| isset($_REQUEST['pg_order_id'])
)
{
// Получаем ID заказа
if (isset($_REQUEST['order_id']))
{
$order_id = intval(Core_Array::getRequest('order_id'
);
}
//от Яндекса
elseif(isset($_GET['orderNumber']))
{
$order_id = intval(Core_Array::getGet('orderNumber'
);
}
//от PayPal
elseif(isset($_REQUEST['invoice']))
{
$oShop_Order = Core_Entity::factory('Shop_Order'
->getByGuid(Core_Array::getRequest('invoice'
);
$order_id = $oShop_Order ? intval($oShop_Order->id) : NULL;
}
//от IntellectMoney
elseif(isset($_REQUEST['orderId']))
{
$order_id = intval(Core_Array::getGet('orderId'
);
}
//от Platron
elseif(isset($_REQUEST['pg_order_id']))
{
$order_id = intval(Core_Array::getRequest('pg_order_id'
);
}
else
{
$order_id = intval(Core_Array::getRequest('InvId'
);
}
$oShop_Order = Core_Entity::factory('Shop_Order'
->find($order_id);
if (Core::moduleIsActive('siteuser'
)
{
$siteuser_id = 0;
$oSiteuser = Core_Entity::factory('Siteuser'
->getCurrent();
if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
else
{
$siteuser_id = FALSE;
}
// Если заказ принадлежит текущему авторизированному пользователю
if ($oShop_Order->siteuser_id == $siteuser_id)
{
if (Core_Array::getRequest('payment'
== 'success' || Core_Array::getRequest('action'
== 'PaymentSuccess' || Core_Array::getRequest('pg_order_id'
> 0)
{
?><h1>Подтверждение платежа</h1>
<p>Спасибо, информация об оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong>
получена.</p>
<?php
}
else
{
?><h1>Платеж не получен</h1>
<p>К сожалению при оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong> произошла ошибка.</p>
<?php
}
}
// Для случаев, когда отключен модуль "Пользователи сайта"
elseif ($siteuser_id === FALSE)
{
?><h1>Подтверждение платежа</h1>
<p>Благодарим за посещение нашего магазина!</p>
<?php
}
else
{
?><h1>Ошибка</h1>
<p>Неверный номер заказа!</p>
<?php
}
// Прерываем выполнение типовой динамической страницы
return TRUE;
}
Core_Session::start();
if (Core_Array::getPost('oneStepCheckout'
)
{
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
// Оформление в один шаг
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
foreach ($aShop_Cart as $oShop_Cart)
{
$Shop_Cart_Controller
->shop_item_id($oShop_Cart->shop_item_id)
->delete();
}
$shop_item_id = intval(Core_Array::getRequest('shop_item_id'
);
if ($shop_item_id)
{
Shop_Cart_Controller::instance()
->shop_item_id($shop_item_id)
->quantity(Core_Array::getRequest('count', 1))
->add();
}
$_SESSION['hostcmsOrder'] = array();
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = Core_Str::stripTags(strval(Core_Array::getPost('postcode'
));
$_SESSION['hostcmsOrder']['address'] = Core_Str::stripTags(strval(Core_Array::getPost('address'
));
$_SESSION['hostcmsOrder']['surname'] = Core_Str::stripTags(strval(Core_Array::getPost('surname'
));
$_SESSION['hostcmsOrder']['name'] = Core_Str::stripTags(strval(Core_Array::getPost('name'
));
$_SESSION['hostcmsOrder']['patronymic'] = Core_Str::stripTags(strval(Core_Array::getPost('patronymic'
));
$_SESSION['hostcmsOrder']['phone'] = Core_Str::stripTags(strval(Core_Array::getPost('phone'
));
$_SESSION['hostcmsOrder']['email'] = Core_Str::stripTags(strval(Core_Array::getPost('email'
));
$_SESSION['hostcmsOrder']['description'] = Core_Str::stripTags(strval(Core_Array::getPost('description'
));
// Additional order properties
$_SESSION['hostcmsOrder']['properties'] = array();
$oShop_Order_Property_List = Core_Entity::factory('Shop_Order_Property_List', $oShop->id);
$aProperties = $oShop_Order_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Св-во может иметь несколько значений
$aPropertiesValue = Core_Array::getPost('property_' . $oProperty->id);
if (!is_null($aPropertiesValue))
{
!is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue);
foreach ($aPropertiesValue as $sPropertyValue)
{
$_SESSION['hostcmsOrder']['properties'][] = array($oProperty->id, $sPropertyValue);
}
}
}
$shop_delivery_condition_id = strval(Core_Array::getPost('shop_delivery_condition_id', 0));
if (is_numeric($shop_delivery_condition_id))
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval($shop_delivery_condition_id);
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $_SESSION['hostcmsOrder']['shop_delivery_condition_id']);
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $oShop_Delivery_Condition->shop_delivery_id;
}
$_POST['step'] = 4;
}
switch (Core_Array::getPost('recount'
? 0 : Core_Array::getPost('step'
)
{
// Адрес доставки
case 1:
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
$Shop_Address_Controller_Show = new Shop_Address_Controller_Show($oShop);
$Shop_Address_Controller_Show->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'deliveryAddressXsl'
)
)
->show();
break;
// Способ доставки
case 2:
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = Core_Str::stripTags(strval(Core_Array::getPost('postcode'
));
$_SESSION['hostcmsOrder']['address'] = Core_Str::stripTags(strval(Core_Array::getPost('address'
));
$_SESSION['hostcmsOrder']['surname'] = Core_Str::stripTags(strval(Core_Array::getPost('surname'
));
$_SESSION['hostcmsOrder']['name'] = Core_Str::stripTags(strval(Core_Array::getPost('name'
));
$_SESSION['hostcmsOrder']['patronymic'] = Core_Str::stripTags(strval(Core_Array::getPost('patronymic'
));
$_SESSION['hostcmsOrder']['company'] = Core_Str::stripTags(strval(Core_Array::getPost('company'
));
$_SESSION['hostcmsOrder']['phone'] = Core_Str::stripTags(strval(Core_Array::getPost('phone'
));
$_SESSION['hostcmsOrder']['fax'] = Core_Str::stripTags(strval(Core_Array::getPost('fax'
));
$_SESSION['hostcmsOrder']['email'] = Core_Str::stripTags(strval(Core_Array::getPost('email'
));
$_SESSION['hostcmsOrder']['description'] = Core_Str::stripTags(strval(Core_Array::getPost('description'
));
$_SESSION['hostcmsOrder']['tin'] = Core_Str::stripTags(strval(Core_Array::getPost('tin'
));
$_SESSION['hostcmsOrder']['kpp'] = Core_Str::stripTags(strval(Core_Array::getPost('kpp'
));
// Additional order properties
$_SESSION['hostcmsOrder']['properties'] = array();
$oShop_Order_Property_List = Core_Entity::factory('Shop_Order_Property_List', $oShop->id);
$aProperties = $oShop_Order_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Св-во может иметь несколько значений
$aPropertiesValue = Core_Array::getPost('property_' . $oProperty->id);
if (!is_null($aPropertiesValue))
{
!is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue);
foreach ($aPropertiesValue as $sPropertyValue)
{
$_SESSION['hostcmsOrder']['properties'][] = array($oProperty->id, $sPropertyValue);
}
}
}
$Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop);
$Shop_Delivery_Controller_Show
->shop_country_id($_SESSION['hostcmsOrder']['shop_country_id'])
->shop_country_location_id($_SESSION['hostcmsOrder']['shop_country_location_id'])
->shop_country_location_city_id($_SESSION['hostcmsOrder']['shop_country_location_city_id'])
->shop_country_location_city_area_id($_SESSION['hostcmsOrder']['shop_country_location_city_area_id'])
->couponText(
Core_Str::stripTags(Core_Array::get(Core_Array::getSession('hostcmsOrder', array()), 'coupon_text'
)
)
->postcode($_SESSION['hostcmsOrder']['postcode'])
->setUp()
->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'deliveryXsl'
)
)
->show();
break;
// Форма оплаты
case 3:
$Shop_Payment_System_Controller_Show = new Shop_Payment_System_Controller_Show($oShop);
$shop_delivery_condition_id = strval(Core_Array::getPost('shop_delivery_condition_id', 0));
if (is_numeric($shop_delivery_condition_id))
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval($shop_delivery_condition_id);
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $_SESSION['hostcmsOrder']['shop_delivery_condition_id']);
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $oShop_Delivery_Condition->shop_delivery_id;
}
else
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = 0;
// в shop_delivery_condition_id тогда "10-123#", ID элемента массива в сессии, в котором
// хранится стоимость доставки, налог, название специфичного условия доставки
list($shopDeliveryInSession) = explode('#', $shop_delivery_condition_id);
if (isset($_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession]))
{
$aTmp = $_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession];
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $aTmp['shop_delivery_id'];
$_SESSION['hostcmsOrder']['shop_delivery_price'] = $aTmp['price'];
$_SESSION['hostcmsOrder']['shop_delivery_rate'] = $aTmp['rate'];
$_SESSION['hostcmsOrder']['shop_delivery_name'] = $aTmp['name'];
}
}
$Shop_Payment_System_Controller_Show
->shop_delivery_id(Core_Array::get($_SESSION['hostcmsOrder'], 'shop_delivery_id'
)
->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'paymentSystemXsl'
)
)
->show();
break;
// Окончание оформления заказа
case 4:
// Проверяем наличие товара в корзины
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
// А корзине есть товары или заполнен номер последнего заказа
if (count($aShop_Cart) || Core_Array::get($_SESSION, 'last_order_id'
)
{
$shop_payment_system_id
= $_SESSION['hostcmsOrder']['shop_payment_system_id']
= intval(Core_Array::getPost('shop_payment_system_id', 0));
// Оплата бонусами с лицевого счета
$_SESSION['hostcmsOrder']['partial_payment_by_personal_account'] = Core_Array::getPost('partial_payment_by_personal_account', 0);
// Если выбрана платежная система
if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
{
Shop_Payment_System_Handler::factory(
Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
)
->orderParams($_SESSION['hostcmsOrder'])
->execute();
}
else
{
?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
}
// Иначе не прерываем и выводим последний шаг - обычная корзина
break;
}
default:
$xslName = Core_Array::get(Core_Page::instance()->libParams, 'cartXsl'
;
$Shop_Cart_Controller_Show
->couponText(
Core_Str::stripTags(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'
)
)
->xsl(
Core_Entity::factory('Xsl'
->getByName($xslName)
)
->show();
}
// Блок авторизации пользователя
if (Core::moduleIsActive('siteuser'
&& is_null(Core_Array::getPost('oneStepCheckout'
))
{
$oSiteuser = Core_Entity::factory('Siteuser'
->getCurrent();
if (is_null($oSiteuser))
{
// Авторизация
$Siteuser_Controller_Show = new Siteuser_Controller_Show(
Core_Entity::factory('Siteuser'
);
$Siteuser_Controller_Show
->location(Core::$url['path'])
->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'userAuthorizationXsl'
)
)
->show();
// Регистрация
/*$Siteuser_Controller_Show = new Siteuser_Controller_Show(
Core_Entity::factory('Siteuser'
);
$Siteuser_Controller_Show->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'userRegistrationXsl'
)
)
->location(Core::$url['path'])
->fastRegistration(TRUE)
->properties(TRUE)
//->showMaillists(TRUE)
->show();*/
}
}
==================Настройки ТДС========================
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'
);
// Проверять остаток на складе при добавлении в корзину
$bCheckStock = FALSE;
Shop_Payment_System_Handler::checkBeforeContent($oShop);
// Добавление товара в корзину
if (Core_Array::getRequest('add'
)
{
// Запрещаем индексацию страницы корзины
Core_Page::instance()->response
->header('X-Robots-Tag', 'none'
;
$add = Core_Array::getRequest('add'
;
!is_array($add) && $add = array($add);
$count = Core_Array::getRequest('count', 1);
!is_array($count) && $count = array($count);
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
foreach ($add as $key => $shop_item_id)
{
$oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id(intval($shop_item_id))
->quantity(intval(Core_Array::get($count, $key, 1)))
->add();
}
}
// Ajax
if (Core_Array::getRequest('_', FALSE)
&& (Core_Array::getRequest('add'
|| Core_Array::getRequest('loadCart'
))
{
ob_start();
// Краткая корзина
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
$oShop
);
$Shop_Cart_Controller_Show
->xsl(
Core_Entity::factory('Xsl'
->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'littleCartXsl'
)
)
->couponText(Core_Array::get($_SESSION, 'coupon_text'
)
->show();
echo json_encode(ob_get_clean());
exit();
}
// Быстрый заказ в 1 клик
if (!is_null(Core_Array::getRequest('oneStepCheckout'
))
{
$shop_item_id = intval(Core_Array::getRequest('shop_item_id'
);
$Shop_Cart_Controller_Onestep = new Shop_Cart_Controller_Onestep($oShop);
// Генерация окна с заказом в 1 клик
if (!is_null(Core_Array::getRequest('showDialog'
)
&& Core_Array::getRequest('_', FALSE)
&& $shop_item_id
)
{
ob_start();
$oneStepXslName = Core_Array::get(Core_Page::instance()->libParams, 'oneStepXsl'
;
$iQuantity = Core_Array::getRequest('count', 1);
$Shop_Cart_Controller_Onestep
->xsl(
Core_Entity::factory('Xsl'
->getByName($oneStepXslName)
)
->shop_item_id($shop_item_id)
->quantity($iQuantity);
$Shop_Cart_Controller_Onestep->addEntity(
Core::factory('Core_Xml_Entity'
->name('count'
->value($iQuantity)
);
$Shop_Cart_Controller_Onestep->show();
echo json_encode(array('html' => ob_get_clean(), 'id' => $shop_item_id));
exit();
}
// Список доставок
if (!is_null(Core_Array::getRequest('showDelivery'
))
{
$shop_country_id = Core_Array::getRequest('shop_country_id', 0);
$shop_country_location_id = Core_Array::getRequest('shop_country_location_id', 0);
$shop_country_location_city_id = Core_Array::getRequest('shop_country_location_city_id', 0);
$shop_country_location_city_area_id = Core_Array::getRequest('shop_country_location_city_area_id', 0);
$oShop_Item = Core_Entity::factory('Shop_Item'
->find($shop_item_id);
if (!is_null($oShop_Item->id))
{
$aTotal = $Shop_Cart_Controller_Onestep->quantity(Core_Array::getRequest('count', 1))->calculatePrice($oShop_Item);
$aDelivery = $Shop_Cart_Controller_Onestep->showDelivery($shop_country_id, $shop_country_location_id, $shop_country_location_city_id, $shop_country_location_city_area_id, $aTotal['weight'], $aTotal['amount']);
echo json_encode(array('delivery' => $aDelivery));
exit();
}
}
// Список платежных систем
if (!is_null(Core_Array::getRequest('showPaymentSystem'
))
{
$shop_delivery_condition_id = strval(Core_Array::getGet('shop_delivery_condition_id', 0));
$aPaymentSystems = array();
if (is_numeric($shop_delivery_condition_id))
{
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $shop_delivery_condition_id);
$aPaymentSystems = $Shop_Cart_Controller_Onestep->showPaymentSystem($oShop_Delivery_Condition->shop_delivery_id);
}
echo json_encode(array('payment_systems' => $aPaymentSystems));
exit();
}
}
if (Core_Array::getGet('action'
== 'repeat'
{
$guid = Core_Array::getGet('guid'
;
if (strlen($guid))
{
$oShop_Order = $oShop->Shop_Orders->getByGuid($guid);
if (!is_null($oShop_Order))
{
$aShop_Order_Items = $oShop_Order->Shop_Order_Items->findAll();
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
foreach ($aShop_Order_Items as $oShop_Order_Item)
{
$oShop_Order_Item->shop_item_id && $oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id($oShop_Order_Item->shop_item_id)
->quantity($oShop_Order_Item->quantity)
->marking($oShop_Order_Item->marking)
->add();
}
}
}
}
if (!is_null(Core_Array::getGet('ajaxLoad'
))
{
$aObjects = array();
if (Core_Array::getGet('shop_country_id'
)
{
$oShop_Country_Location = Core_Entity::factory('Shop_Country_Location'
;
$oShop_Country_Location
->queryBuilder()
->where('shop_country_id', '=', intval(Core_Array::getGet('shop_country_id'
));
$aObjects = $oShop_Country_Location->findAll();
}
elseif (Core_Array::getGet('shop_country_location_id'
)
{
$oShop_Country_Location_City = Core_Entity::factory('Shop_Country_Location_City'
;
$oShop_Country_Location_City
->queryBuilder()
->where('shop_country_location_id', '=', intval(Core_Array::getGet('shop_country_location_id'
));
$aObjects = $oShop_Country_Location_City->findAll();
}
elseif (Core_Array::getGet('shop_country_location_city_id'
)
{
$oShop_Country_Location_City_Area = Core_Entity::factory('Shop_Country_Location_City_Area'
;
$oShop_Country_Location_City_Area
->queryBuilder()
->where('shop_country_location_city_id', '=', intval(Core_Array::getGet('shop_country_location_city_id'
));
$aObjects = $oShop_Country_Location_City_Area->findAll();
}
$aArray = array('…'
;
foreach ($aObjects as $Object)
{
//$aArray['_' . $Object->id] = $Object->name;
$aArray['_' . $Object->id] = $Object->getName();
}
echo json_encode($aArray);
exit();
}
// Удаляение товара из корзины
if (Core_Array::getGet('delete'
)
{
$shop_item_id = intval(Core_Array::getGet('delete'
);
if ($shop_item_id)
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($shop_item_id)
->delete();
}
}
// Запоминаем купон
if (!is_null(Core_Array::getRequest('coupon_text'
))
{
$_SESSION['hostcmsOrder']['coupon_text'] = trim(strval(Core_Array::getRequest('coupon_text'
));
}
if (Core_Array::getPost('recount'
|| Core_Array::getPost('step'
== 1)
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$aCart = $oShop_Cart_Controller->getAll($oShop);
// Склад по умолчанию
$oShop_Warehouse = $oShop->Shop_Warehouses->getDefault();
foreach ($aCart as $oShop_Cart)
{
$quantity = Core_Array::getPost('quantity_' . $oShop_Cart->shop_item_id);
// Количество было передано
if (!is_null($quantity))
{
$oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id($oShop_Cart->shop_item_id)
->quantity($quantity)
->postpone(is_null(Core_Array::getPost('postpone_' . $oShop_Cart->shop_item_id)) ? 0 : 1)
->shop_warehouse_id(
Core_Array::getPost('warehouse_' . $oShop_Cart->shop_item_id, !is_null($oShop_Warehouse) ? $oShop_Warehouse->id : 0)
)
->update();
}
}
}
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show($oShop);
Core_Page::instance()->object = $Shop_Cart_Controller_Show;
Столкнулся с проблемой онлайн оплаты при оформлении заказа на сайте. На последнем шаге-"оплатить через Яндекс" при нажатии на эту кнопку получал ошибку.
В службе поддержки Яндекс денег сообщили, что ошибка вызвана тем, что при оформлении тестового заказа я не указал свою почту и телефон, что является обязательным для выполнения 54 ФЗ. Фискальный чек при онлайн оплате должен быть отправлен покупателю на почту или телефон.
Прошу подсказать как сделать обязательными для заполнения поля телефон и почта.
код и настройки ТДС ИнтернетМагазинКорзина ниже
<?php
$Shop_Cart_Controller_Show = Core_Page::instance()->object;
$oShop = $Shop_Cart_Controller_Show->getEntity();
Shop_Payment_System_Handler::checkAfterContent($oShop);
// ------------------------------------------------
// Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы
// ------------------------------------------------
if (isset($_REQUEST['payment'])
|| isset($_GET['action']) && ($_GET['action'] == 'PaymentSuccess' || $_GET['action'] == 'PaymentFail'

|| isset($_REQUEST['pg_order_id'])
)
{
// Получаем ID заказа
if (isset($_REQUEST['order_id']))
{
$order_id = intval(Core_Array::getRequest('order_id'
);}
//от Яндекса
elseif(isset($_GET['orderNumber']))
{
$order_id = intval(Core_Array::getGet('orderNumber'
);}
//от PayPal
elseif(isset($_REQUEST['invoice']))
{
$oShop_Order = Core_Entity::factory('Shop_Order'
->getByGuid(Core_Array::getRequest('invoice'
);$order_id = $oShop_Order ? intval($oShop_Order->id) : NULL;
}
//от IntellectMoney
elseif(isset($_REQUEST['orderId']))
{
$order_id = intval(Core_Array::getGet('orderId'
);}
//от Platron
elseif(isset($_REQUEST['pg_order_id']))
{
$order_id = intval(Core_Array::getRequest('pg_order_id'
);}
else
{
$order_id = intval(Core_Array::getRequest('InvId'
);}
$oShop_Order = Core_Entity::factory('Shop_Order'
->find($order_id);if (Core::moduleIsActive('siteuser'
){
$siteuser_id = 0;
$oSiteuser = Core_Entity::factory('Siteuser'
->getCurrent();if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
else
{
$siteuser_id = FALSE;
}
// Если заказ принадлежит текущему авторизированному пользователю
if ($oShop_Order->siteuser_id == $siteuser_id)
{
if (Core_Array::getRequest('payment'
== 'success' || Core_Array::getRequest('action'
== 'PaymentSuccess' || Core_Array::getRequest('pg_order_id'
> 0){
?><h1>Подтверждение платежа</h1>
<p>Спасибо, информация об оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong>
получена.</p>
<?php
}
else
{
?><h1>Платеж не получен</h1>
<p>К сожалению при оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong> произошла ошибка.</p>
<?php
}
}
// Для случаев, когда отключен модуль "Пользователи сайта"
elseif ($siteuser_id === FALSE)
{
?><h1>Подтверждение платежа</h1>
<p>Благодарим за посещение нашего магазина!</p>
<?php
}
else
{
?><h1>Ошибка</h1>
<p>Неверный номер заказа!</p>
<?php
}
// Прерываем выполнение типовой динамической страницы
return TRUE;
}
Core_Session::start();
if (Core_Array::getPost('oneStepCheckout'
){
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
// Оформление в один шаг
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
foreach ($aShop_Cart as $oShop_Cart)
{
$Shop_Cart_Controller
->shop_item_id($oShop_Cart->shop_item_id)
->delete();
}
$shop_item_id = intval(Core_Array::getRequest('shop_item_id'
);if ($shop_item_id)
{
Shop_Cart_Controller::instance()
->shop_item_id($shop_item_id)
->quantity(Core_Array::getRequest('count', 1))
->add();
}
$_SESSION['hostcmsOrder'] = array();
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = Core_Str::stripTags(strval(Core_Array::getPost('postcode'
));$_SESSION['hostcmsOrder']['address'] = Core_Str::stripTags(strval(Core_Array::getPost('address'
));$_SESSION['hostcmsOrder']['surname'] = Core_Str::stripTags(strval(Core_Array::getPost('surname'
));$_SESSION['hostcmsOrder']['name'] = Core_Str::stripTags(strval(Core_Array::getPost('name'
));$_SESSION['hostcmsOrder']['patronymic'] = Core_Str::stripTags(strval(Core_Array::getPost('patronymic'
));$_SESSION['hostcmsOrder']['phone'] = Core_Str::stripTags(strval(Core_Array::getPost('phone'
));$_SESSION['hostcmsOrder']['email'] = Core_Str::stripTags(strval(Core_Array::getPost('email'
));$_SESSION['hostcmsOrder']['description'] = Core_Str::stripTags(strval(Core_Array::getPost('description'
));// Additional order properties
$_SESSION['hostcmsOrder']['properties'] = array();
$oShop_Order_Property_List = Core_Entity::factory('Shop_Order_Property_List', $oShop->id);
$aProperties = $oShop_Order_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Св-во может иметь несколько значений
$aPropertiesValue = Core_Array::getPost('property_' . $oProperty->id);
if (!is_null($aPropertiesValue))
{
!is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue);
foreach ($aPropertiesValue as $sPropertyValue)
{
$_SESSION['hostcmsOrder']['properties'][] = array($oProperty->id, $sPropertyValue);
}
}
}
$shop_delivery_condition_id = strval(Core_Array::getPost('shop_delivery_condition_id', 0));
if (is_numeric($shop_delivery_condition_id))
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval($shop_delivery_condition_id);
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $_SESSION['hostcmsOrder']['shop_delivery_condition_id']);
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $oShop_Delivery_Condition->shop_delivery_id;
}
$_POST['step'] = 4;
}
switch (Core_Array::getPost('recount'
? 0 : Core_Array::getPost('step'
){
// Адрес доставки
case 1:
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
$Shop_Address_Controller_Show = new Shop_Address_Controller_Show($oShop);
$Shop_Address_Controller_Show->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'deliveryAddressXsl'

)
)
->show();
break;
// Способ доставки
case 2:
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = Core_Str::stripTags(strval(Core_Array::getPost('postcode'
));$_SESSION['hostcmsOrder']['address'] = Core_Str::stripTags(strval(Core_Array::getPost('address'
));$_SESSION['hostcmsOrder']['surname'] = Core_Str::stripTags(strval(Core_Array::getPost('surname'
));$_SESSION['hostcmsOrder']['name'] = Core_Str::stripTags(strval(Core_Array::getPost('name'
));$_SESSION['hostcmsOrder']['patronymic'] = Core_Str::stripTags(strval(Core_Array::getPost('patronymic'
));$_SESSION['hostcmsOrder']['company'] = Core_Str::stripTags(strval(Core_Array::getPost('company'
));$_SESSION['hostcmsOrder']['phone'] = Core_Str::stripTags(strval(Core_Array::getPost('phone'
));$_SESSION['hostcmsOrder']['fax'] = Core_Str::stripTags(strval(Core_Array::getPost('fax'
));$_SESSION['hostcmsOrder']['email'] = Core_Str::stripTags(strval(Core_Array::getPost('email'
));$_SESSION['hostcmsOrder']['description'] = Core_Str::stripTags(strval(Core_Array::getPost('description'
));$_SESSION['hostcmsOrder']['tin'] = Core_Str::stripTags(strval(Core_Array::getPost('tin'
));$_SESSION['hostcmsOrder']['kpp'] = Core_Str::stripTags(strval(Core_Array::getPost('kpp'
));// Additional order properties
$_SESSION['hostcmsOrder']['properties'] = array();
$oShop_Order_Property_List = Core_Entity::factory('Shop_Order_Property_List', $oShop->id);
$aProperties = $oShop_Order_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Св-во может иметь несколько значений
$aPropertiesValue = Core_Array::getPost('property_' . $oProperty->id);
if (!is_null($aPropertiesValue))
{
!is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue);
foreach ($aPropertiesValue as $sPropertyValue)
{
$_SESSION['hostcmsOrder']['properties'][] = array($oProperty->id, $sPropertyValue);
}
}
}
$Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop);
$Shop_Delivery_Controller_Show
->shop_country_id($_SESSION['hostcmsOrder']['shop_country_id'])
->shop_country_location_id($_SESSION['hostcmsOrder']['shop_country_location_id'])
->shop_country_location_city_id($_SESSION['hostcmsOrder']['shop_country_location_city_id'])
->shop_country_location_city_area_id($_SESSION['hostcmsOrder']['shop_country_location_city_area_id'])
->couponText(
Core_Str::stripTags(Core_Array::get(Core_Array::getSession('hostcmsOrder', array()), 'coupon_text'
))
->postcode($_SESSION['hostcmsOrder']['postcode'])
->setUp()
->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'deliveryXsl'

)
)
->show();
break;
// Форма оплаты
case 3:
$Shop_Payment_System_Controller_Show = new Shop_Payment_System_Controller_Show($oShop);
$shop_delivery_condition_id = strval(Core_Array::getPost('shop_delivery_condition_id', 0));
if (is_numeric($shop_delivery_condition_id))
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval($shop_delivery_condition_id);
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $_SESSION['hostcmsOrder']['shop_delivery_condition_id']);
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $oShop_Delivery_Condition->shop_delivery_id;
}
else
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = 0;
// в shop_delivery_condition_id тогда "10-123#", ID элемента массива в сессии, в котором
// хранится стоимость доставки, налог, название специфичного условия доставки
list($shopDeliveryInSession) = explode('#', $shop_delivery_condition_id);
if (isset($_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession]))
{
$aTmp = $_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession];
$_SESSION['hostcmsOrder']['shop_delivery_id'] = $aTmp['shop_delivery_id'];
$_SESSION['hostcmsOrder']['shop_delivery_price'] = $aTmp['price'];
$_SESSION['hostcmsOrder']['shop_delivery_rate'] = $aTmp['rate'];
$_SESSION['hostcmsOrder']['shop_delivery_name'] = $aTmp['name'];
}
}
$Shop_Payment_System_Controller_Show
->shop_delivery_id(Core_Array::get($_SESSION['hostcmsOrder'], 'shop_delivery_id'
)->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'paymentSystemXsl'

)
)
->show();
break;
// Окончание оформления заказа
case 4:
// Проверяем наличие товара в корзины
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
// А корзине есть товары или заполнен номер последнего заказа
if (count($aShop_Cart) || Core_Array::get($_SESSION, 'last_order_id'
){
$shop_payment_system_id
= $_SESSION['hostcmsOrder']['shop_payment_system_id']
= intval(Core_Array::getPost('shop_payment_system_id', 0));
// Оплата бонусами с лицевого счета
$_SESSION['hostcmsOrder']['partial_payment_by_personal_account'] = Core_Array::getPost('partial_payment_by_personal_account', 0);
// Если выбрана платежная система
if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
{
Shop_Payment_System_Handler::factory(
Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
)
->orderParams($_SESSION['hostcmsOrder'])
->execute();
}
else
{
?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
}
// Иначе не прерываем и выводим последний шаг - обычная корзина
break;
}
default:
$xslName = Core_Array::get(Core_Page::instance()->libParams, 'cartXsl'
;$Shop_Cart_Controller_Show
->couponText(
Core_Str::stripTags(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'
))
->xsl(
Core_Entity::factory('Xsl'
->getByName($xslName))
->show();
}
// Блок авторизации пользователя
if (Core::moduleIsActive('siteuser'
&& is_null(Core_Array::getPost('oneStepCheckout'
)){
$oSiteuser = Core_Entity::factory('Siteuser'
->getCurrent();if (is_null($oSiteuser))
{
// Авторизация
$Siteuser_Controller_Show = new Siteuser_Controller_Show(
Core_Entity::factory('Siteuser'

);
$Siteuser_Controller_Show
->location(Core::$url['path'])
->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'userAuthorizationXsl'

)
)
->show();
// Регистрация
/*$Siteuser_Controller_Show = new Siteuser_Controller_Show(
Core_Entity::factory('Siteuser'

);
$Siteuser_Controller_Show->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'userRegistrationXsl'

)
)
->location(Core::$url['path'])
->fastRegistration(TRUE)
->properties(TRUE)
//->showMaillists(TRUE)
->show();*/
}
}
==================Настройки ТДС========================
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'
);// Проверять остаток на складе при добавлении в корзину
$bCheckStock = FALSE;
Shop_Payment_System_Handler::checkBeforeContent($oShop);
// Добавление товара в корзину
if (Core_Array::getRequest('add'
){
// Запрещаем индексацию страницы корзины
Core_Page::instance()->response
->header('X-Robots-Tag', 'none'
;$add = Core_Array::getRequest('add'
;!is_array($add) && $add = array($add);
$count = Core_Array::getRequest('count', 1);
!is_array($count) && $count = array($count);
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
foreach ($add as $key => $shop_item_id)
{
$oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id(intval($shop_item_id))
->quantity(intval(Core_Array::get($count, $key, 1)))
->add();
}
}
// Ajax
if (Core_Array::getRequest('_', FALSE)
&& (Core_Array::getRequest('add'
|| Core_Array::getRequest('loadCart'
)){
ob_start();
// Краткая корзина
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
$oShop
);
$Shop_Cart_Controller_Show
->xsl(
Core_Entity::factory('Xsl'
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'littleCartXsl'

)
)
->couponText(Core_Array::get($_SESSION, 'coupon_text'
)->show();
echo json_encode(ob_get_clean());
exit();
}
// Быстрый заказ в 1 клик
if (!is_null(Core_Array::getRequest('oneStepCheckout'
)){
$shop_item_id = intval(Core_Array::getRequest('shop_item_id'
);$Shop_Cart_Controller_Onestep = new Shop_Cart_Controller_Onestep($oShop);
// Генерация окна с заказом в 1 клик
if (!is_null(Core_Array::getRequest('showDialog'
)&& Core_Array::getRequest('_', FALSE)
&& $shop_item_id
)
{
ob_start();
$oneStepXslName = Core_Array::get(Core_Page::instance()->libParams, 'oneStepXsl'
;$iQuantity = Core_Array::getRequest('count', 1);
$Shop_Cart_Controller_Onestep
->xsl(
Core_Entity::factory('Xsl'
->getByName($oneStepXslName))
->shop_item_id($shop_item_id)
->quantity($iQuantity);
$Shop_Cart_Controller_Onestep->addEntity(
Core::factory('Core_Xml_Entity'

->name('count'
->value($iQuantity));
$Shop_Cart_Controller_Onestep->show();
echo json_encode(array('html' => ob_get_clean(), 'id' => $shop_item_id));
exit();
}
// Список доставок
if (!is_null(Core_Array::getRequest('showDelivery'
)){
$shop_country_id = Core_Array::getRequest('shop_country_id', 0);
$shop_country_location_id = Core_Array::getRequest('shop_country_location_id', 0);
$shop_country_location_city_id = Core_Array::getRequest('shop_country_location_city_id', 0);
$shop_country_location_city_area_id = Core_Array::getRequest('shop_country_location_city_area_id', 0);
$oShop_Item = Core_Entity::factory('Shop_Item'
->find($shop_item_id);if (!is_null($oShop_Item->id))
{
$aTotal = $Shop_Cart_Controller_Onestep->quantity(Core_Array::getRequest('count', 1))->calculatePrice($oShop_Item);
$aDelivery = $Shop_Cart_Controller_Onestep->showDelivery($shop_country_id, $shop_country_location_id, $shop_country_location_city_id, $shop_country_location_city_area_id, $aTotal['weight'], $aTotal['amount']);
echo json_encode(array('delivery' => $aDelivery));
exit();
}
}
// Список платежных систем
if (!is_null(Core_Array::getRequest('showPaymentSystem'
)){
$shop_delivery_condition_id = strval(Core_Array::getGet('shop_delivery_condition_id', 0));
$aPaymentSystems = array();
if (is_numeric($shop_delivery_condition_id))
{
$oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $shop_delivery_condition_id);
$aPaymentSystems = $Shop_Cart_Controller_Onestep->showPaymentSystem($oShop_Delivery_Condition->shop_delivery_id);
}
echo json_encode(array('payment_systems' => $aPaymentSystems));
exit();
}
}
if (Core_Array::getGet('action'
== 'repeat'
{
$guid = Core_Array::getGet('guid'
;if (strlen($guid))
{
$oShop_Order = $oShop->Shop_Orders->getByGuid($guid);
if (!is_null($oShop_Order))
{
$aShop_Order_Items = $oShop_Order->Shop_Order_Items->findAll();
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
foreach ($aShop_Order_Items as $oShop_Order_Item)
{
$oShop_Order_Item->shop_item_id && $oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id($oShop_Order_Item->shop_item_id)
->quantity($oShop_Order_Item->quantity)
->marking($oShop_Order_Item->marking)
->add();
}
}
}
}
if (!is_null(Core_Array::getGet('ajaxLoad'
)){
$aObjects = array();
if (Core_Array::getGet('shop_country_id'
){
$oShop_Country_Location = Core_Entity::factory('Shop_Country_Location'
;$oShop_Country_Location
->queryBuilder()
->where('shop_country_id', '=', intval(Core_Array::getGet('shop_country_id'
));$aObjects = $oShop_Country_Location->findAll();
}
elseif (Core_Array::getGet('shop_country_location_id'
){
$oShop_Country_Location_City = Core_Entity::factory('Shop_Country_Location_City'
;$oShop_Country_Location_City
->queryBuilder()
->where('shop_country_location_id', '=', intval(Core_Array::getGet('shop_country_location_id'
));$aObjects = $oShop_Country_Location_City->findAll();
}
elseif (Core_Array::getGet('shop_country_location_city_id'
){
$oShop_Country_Location_City_Area = Core_Entity::factory('Shop_Country_Location_City_Area'
;$oShop_Country_Location_City_Area
->queryBuilder()
->where('shop_country_location_city_id', '=', intval(Core_Array::getGet('shop_country_location_city_id'
));$aObjects = $oShop_Country_Location_City_Area->findAll();
}
$aArray = array('…'
;foreach ($aObjects as $Object)
{
//$aArray['_' . $Object->id] = $Object->name;
$aArray['_' . $Object->id] = $Object->getName();
}
echo json_encode($aArray);
exit();
}
// Удаляение товара из корзины
if (Core_Array::getGet('delete'
){
$shop_item_id = intval(Core_Array::getGet('delete'
);if ($shop_item_id)
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($shop_item_id)
->delete();
}
}
// Запоминаем купон
if (!is_null(Core_Array::getRequest('coupon_text'
)){
$_SESSION['hostcmsOrder']['coupon_text'] = trim(strval(Core_Array::getRequest('coupon_text'
));}
if (Core_Array::getPost('recount'
|| Core_Array::getPost('step'
== 1){
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$aCart = $oShop_Cart_Controller->getAll($oShop);
// Склад по умолчанию
$oShop_Warehouse = $oShop->Shop_Warehouses->getDefault();
foreach ($aCart as $oShop_Cart)
{
$quantity = Core_Array::getPost('quantity_' . $oShop_Cart->shop_item_id);
// Количество было передано
if (!is_null($quantity))
{
$oShop_Cart_Controller
->clear()
->checkStock($bCheckStock)
->shop_item_id($oShop_Cart->shop_item_id)
->quantity($quantity)
->postpone(is_null(Core_Array::getPost('postpone_' . $oShop_Cart->shop_item_id)) ? 0 : 1)
->shop_warehouse_id(
Core_Array::getPost('warehouse_' . $oShop_Cart->shop_item_id, !is_null($oShop_Warehouse) ? $oShop_Warehouse->id : 0)
)
->update();
}
}
}
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show($oShop);
Core_Page::instance()->object = $Shop_Cart_Controller_Show;
Как правило такую проверку реализуют через jquery.validate
«Не выходи из комнаты, не совершай ошибку…»
Авторизация