Готовые тиражные решения на 1С-Битрикс
Техническая поддержка:
+7-908-208-1965
Отдел продаж, с 7:00 до 18:00 (по Москве)
Звонок по России бесплатный
Вы также можете заказать звонок

FAQ Киоск

15:19:53 - 03.12.2016

1. Что входит в состав модуля?
В состав модуля входят следующие компоненты:
catalog.basket - компонент отвечающий за отображение товаров в корзине и процедуру оформления заказа
catalog.basket.small - компонент отвечающий за отображение количества товаров в корзине, а так же является обработчиком события добавления товара в корзину. Поэтому данный компонент должен присутствовать на всех страницах, на которых нужен функционал добавления товара в корзине.
market.yandex_market - компонент позволяет генерировать xml для выгрузки товаров в Яндекс.Маркет (находится в папке /ys-ym/ относительно корня сайта). Компонент выводит настройки если вы админ и выводит XML если вы гость. Предварительно зарегистрируйтесь в системе Яндекс.маркет.
2. Что происходит в процессе установки модуля?
При первой установке модуля "Киоск", автоматически создаются разделы:
/account/orders/ - отображение заказов пользователя;
/account/cart/ - корзина;

После установки модуля во вкладке “Сервисы” будет создано меню настройки модуля “Киоск”.

Модуль создаёт два типа почтовых событий и по одному почтовому шаблону для каждого из них: SALE_ORDER и SALE_ORDER_ADMIN. Первый используется для отправки писем клиенту об успешном оформлении заказа. Второй используется для отправки аналогичного письма администратору сайта (указывается в параметрах компонента yenisite:catalog.basket).


3. Какие настройки нужно обязательно сделать в административном разделе?
1) Отмечаем инфоблоки, которые являются торговыми каталогами нажимаем кнопку “Сохранить”

В инфоблоке, указанном как торговый каталог, создается числовое свойство MARKET_QUANTITY для хранения количества товара и PRICE_BASE для хранения цены (тип цены PRICE_BASE создается по умолчанию, для его редактирования и создания новых типов цен см. пункт "Как создать несколько типов цен").
Если в настройках Киоска включить количественный учет для каталога товаров, значение в этом поле будет автоматически уменьшаться при оформлении заказа с помощью большой корзины Киоска.

2) Далее необходимо заполнить цены и количество каждого товара

4. Как вывести малую/летающую корзину в публичной части сайта?
Малая корзина отвечает за добавления товара в корзину и поэтому она должна находится перед компонентом каталога.
Для вызова компонента малой корзины используйте следующий код:
&lt? $APPLICATION->IncludeComponent(
	"yenisite:catalog.basket.small", 
	"", 
	array(), 
	false
);?&gt
				

Для отображения малой корзины на всех страницах сайта необходимо поместить ее в header.php вашего шаблона.
Если же хотите отображать корзину только на страницах каталога, то ее необходимо поместить в файл, где непосредственно вызывается компонент каталога (например: /catalog/index.php).
В состав решения входит шаблон bitronic, для малой корзины. Он делает корзину “летающей” и позволяет выбирать количество товара прямо в корзине.

5. Как вывести кнопки для добавления товара в корзину (без AJAX, универсально для любого шаблона)?
Для работы с каталогом, необходимо использовать стандартный компонент bitrix:catalog
Внимание! Настоятельно рекомендуем скопировать шаблон компонента в шаблон сайта для внесения последующих правок.

Добавление кнопок в список элементов (bitrix:catalog.section)

После того как вы скопировали шаблон комплексного компонента bitrix:catalog в шаблон сайта, необходимо найти следующий файл:

bitrix/templates/ВАШ_ШАБЛОН/components/bitrix/catalog/bitrix/.default/bitrix/catalog.section/.default/template.php

Далее в этом файле ищем часть где выводятся элементы каталога.

Для справки: каждый компонент по завершению своей работы формирует массив результатов. Обычно массив результатов обозначается как $arResult. Компонент bitrix:catalog по умолчанию имеет вложенный массив элементов $arResult[‘ITEMS’]. В нем хранятся данные об элементах (товарах), которые в последующем выводятся в шаблон компонента.

Вывод элементов в шаблоне осуществляется примерно следующим образом:
foreach ($arResult[‘ITEMS’] as $arItem) //цикл для перебора всех элементов в массиве
{
	if ($arItem[‘CAN_BUY’]) //если элемент разрешен к покупке
	{
		//Выводим кнопки “купить” и “в корзину”
	}
}

					

Теперь вставляем код вызова кнопок "купить" и "в корзину" внутри этого цикла, в необходимом месте верстки

foreach ($arResult[‘ITEMS’] as $arItem) //цикл для перебора всех элементов в массиве
{
	if ($arItem[‘CAN_BUY’]) //если элемент разрешен к покупке
	{
		//Выводим кнопки “купить” и “в корзину”
		&ltnoindex&gt 
			&lta href="<?echo $arElement["BUY_URL"]?&gt" rel="nofollow"&gt //Кнопка "купить"
				&lt?echo GetMessage("CATALOG_BUY")?&gt
			&lt/a&gt 
			&lta href="<?echo $arElement["ADD_URL"]?&gt" rel="nofollow"&gt //Кнопка "добавить в корзину"
				&lt?echo GetMessage("CATALOG_ADD")?&gt
			&lt/a&gt 
		&lt/noindex&gt
	}
}
			

Если ничего не выводится, то скорей всего в языковых файлах не определены следующие константы:

$MESS["CATALOG_BUY"] = "Купить";
$MESS["CATALOG_ADD"] = "В корзину";

6. Как интегрировать Киоск в стандартный AJAX в новых шаблонах каталога?

bitrix:catalog.element

в шаблоне компонента детальной страницы находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$prices = CMarketPrice::GetItemPriceValues($arResult["ID"], $arResult['PRICES']);
	if(count($prices)>0)
		unset ($arResult["PRICES"]);
	$minPrice = false;
	foreach ($prices as $k => $pr) {
		$pr = floatval($pr);
		$arResult["PRICES"][$k]["VALUE"] = $pr;
		$arResult["PRICES"][$k]["PRINT_VALUE"] = $pr;
		if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
			$minPrice = $pr;
			$minPriceId = $k;
		}
	}
	if ($minPrice !== false) {
		$arResult['MIN_PRICE']['PRICE_ID'] = $minPriceId;
		$arResult['MIN_PRICE']['VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
		$arResult['CAN_BUY'] = true;
	}
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);
	$arResult['CATALOG_QUANTITY'] = intval($arResult['PROPERTIES']['MARKET_QUANTITY']['VALUE']);
	
	if ($arResult['CHECK_QUANTITY'] && $arResult['CATALOG_QUANTITY'] <= 0) {
		$arResult['CAN_BUY'] = false;
	}
	$arResult['CATALOG_TYPE'] = 1; //simple product
}

Что делает этот код.

  • Выборка минимальной цены из имеющихся в Киоске с учётом права на просмотр.
  • Проверка количественного учёта.
  • Установка типа продукта для корректной работы шаблона и скриптов.

bitrix:catalog.section

в шаблоне компонента страницы раздела каталога находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);
	
	foreach ($arResult['ITEMS'] as $index => &$arItem) {
		$prices = CMarketPrice::GetItemPriceValues($arItem['ID'], $arItem['PRICES']);
		if (count($prices) > 0) {
			unset($arItem['PRICES']);
		}
		$minPrice = false;
		foreach ($prices as $k => $pr) {
			$pr = floatval($pr);
			$arItem['PRICES'][$k]['VALUE'] = $pr;
			$arItem['PRICES'][$k]['PRINT_VALUE'] = $pr;
			if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
				$minPrice = $pr;
			}
		}
		if ($minPrice !== false) {
			$arItem['MIN_PRICE']['VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
			$arItem['CATALOG_MEASURE_RATIO'] = 1;
			$arItem['CAN_BUY'] = true;
		}
		$arItem['CHECK_QUANTITY'] = $arResult['CHECK_QUANTITY'];
		$arItem['CATALOG_QUANTITY'] = CMarketCatalogProduct::GetQuantity($arItem['ID'], $arItem['IBLOCK_ID']);
		
		if ($arItem['CHECK_QUANTITY'] && $arItem['CATALOG_QUANTITY'] <= 0) {
			$arItem['CAN_BUY'] = false;
		}
		$arItem['CATALOG_TYPE'] = 1; //simple product
	}
	unset($arItem);
}

bitrix:catalog.top

в шаблоне компонента страницы топа каталога находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);

	foreach ($arResult['ITEMS'] as &$itemSection)
	{
		foreach ($itemSection as $index => &$arItem) {
			$prices = CMarketPrice::GetItemPriceValues($arItem['ID'], $arItem['PRICES']);
			if (count($prices) > 0) {
				unset($arItem['PRICES']);
			}
			$minPrice = false;
			foreach ($prices as $k => $pr) {
				$pr = floatval($pr);
				$arItem['PRICES'][$k]['VALUE'] = $pr;
				$arItem['PRICES'][$k]['PRINT_VALUE'] = $pr;
				if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
					$minPrice = $pr;
				}
			}

			if ($minPrice !== false) {
				$arItem['MIN_PRICE']['VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
				$arItem['CATALOG_MEASURE_RATIO'] = 1;
				$arItem['CAN_BUY'] = true;
			}
			$arItem['CHECK_QUANTITY'] = $arResult['CHECK_QUANTITY'];
			$arItem['CATALOG_QUANTITY'] = CMarketCatalogProduct::GetQuantity($arItem['ID'], $arItem['IBLOCK_ID']);
			
			if ($arItem['CHECK_QUANTITY'] && $arItem['CATALOG_QUANTITY'] <= 0) {
				$arItem['CAN_BUY'] = false;
			}
			$arItem['CATALOG_TYPE'] = 1; //simple product
		}
		unset($arItem);
	}
}

bitrix:catalog

в параметрах комплексного компонента необходимо указать путь к странице, на которой расположен компонент с большой корзиной Киоска:



7. Где и в каком виде хранятся заказы клиентов?

Заказы клиентов хранятся в инфоблоке "Заказы" (тип инфоблока "yenisite_market")

Каждый элемент данного инфоблока - отдельный заказ



8. Может ли Киоск оповещать о создании нового заказа? Куда приходят письма?

Да, Киоск оповещает о создании нового заказа как клиента, так и администратора интернет магазина

Адрес администратора необходимо указывать в настройках компонента yenisite:catalog.basket (большая корзина)

9. Как добавить свойство в умный фильтр?

Для этого необходимо зайти в параметры редактирования соответствующего свойства:

Далее сделать следующие настройки:

10. Как создать несколько типов цен?

Прежде чем создать новый тип цены, необходимо добавить свойство в инфоблок каталога для его хранения:


Далее переходим в раздел "типы цен" (Сервисы->Киоск->Типы цен)

И добавляем новый тип цены


В форме добавления необходимо указать следующие параметры:

  • Название типа цены
  • Символьный код - должен соответствовать символьному коду свойства, которое создали для хранения данного типа цены
  • Выбрать необходимые группы пользователей, которым будет доступна данный тип цены


11. Как настроить, чтобы разные группы пользователей видели разные типы цен?
В каждом типе цены нужно указать, каким группам пользователей он доступен (см. предыдущий пункт). Для того, чтобы получить список цен, доступных текущему пользователю, используется метод CMarketPrice::GetItemPriceValues($elementID, $arPrices) - подробнее в третьем примере использования API.
12. Может ли Киоск работать на многосайтовости, что для этого нужно сделать?

Да, Киоск может работать на многосайтовости. Для этого необходимо, cкопировать папку /account/ в корневой каталог каждого сайта (где предполагается использование модуля Киоск)*

Далее при оформлении заказа происходит передача перменной SITE_ID в свойство заказа, которые в последующем фильтрутся для каждого сайта

* - данный раздел копируются только на один сайт (который стоит по умолчанию).
В файле /account/order/index.php в параметрах компонента bitrix:news.list (вывод списка заказов), происходит передача SITE_ID для фильтрации заказов по сайту. 

Так же необходимо отметить в шаблонах почтовых собыитий SALE_ORDER и SALE_ORDER_ADMIN галочку для использования их на новых сайтах.

Переходим в почтовое событие


Переходим в шаблон почтового события


И выбираем необходимые сайты уже в шаблоне



13. Как настроить добавление свойств в корзину (покупка с характеристикой)?

вывод свойств для покупки в комплексном компоненте bitrix:catalog и всех остальных компонентах каталога активируется с помощью четырёх параметров, которые находятся в группе "Добавление в корзину":

Описание параметров в официальной документации Битрикса.

Вид параметров в настройках компонента.

В качестве PRODUCT_PROPS_VARIABLE необходимо указать стандартное название переменной "prop". Необходимые для добавления характеристики появятся в arResult компонента. В шаблоне нужно вывести поля для выбора характеристик. Можно посмотреть, как это выглядит в стандартных шаблонах Битрикса. Все необходимые свойства товара должны передаваться на сервер в момент добавления в корзину в массиве prop[код_свойства] = ID значения.

При передаче запроса на добавление в корзину должен передаваться массив PROP, содержащий коды свойств в качестве ключей и ID элементов списка в качестве значений.

Передающиеся параметры.

Свойство инфоблока типа "Список".

Свойства, с которыми товар был добавлен в корзину, будут отображаться в шаблонах малой и большой корзины Киоска. В истории заказов в публичной части сайта (шаблон bitronic для компонента bitrix:news.detail). В письмах, которые отправляются администратору и покупателю после оформления заказа. А также в административной части в текстовом поле с описанием заказа.

14. Как подключить автоматический обработчик платёжной системы Платрон?

В первую очередь необходимо подключить свой сайт к платежной системе Платрон. Это можно сделать на следующей странице: https://www.platron.ru/info/connect/

После установки модуля "Киоск" в системе появится инфоблок "Платежные системы" типа "Справочники". В этом инфоблоке уже содержится запись для подключения платежной системы. Ее необходимо активировать:


У данного элемента НЕОБХОДИМО либо оставить название "Platron", либо задать символьный код "platron" (с версии 1.5.1)
Далее необходимо изменить элемент "Platron" и указать идентификатор магазина и кодовое слово, которые вы получите, подключив свой сайт к платежной системе.  
Теперь магазин готов к приему платежей через систему Платрон: Скриншот 1 Скриншот 2

15. Как именно работает «Количественный учёт» в Киоске?

В инфоблоке, указанном как торговый каталог, создается числовое свойство MARKET_QUANTITY для хранения количества товара. Если в настройках Киоска включить количественный учет для каталога товаров, значение в этом поле будет автоматически уменьшаться при оформлении заказа с помощью большой корзины Киоска.

Включение количественного учета


Форма редактирования товара


Получить текущий остаток товара можно с помощью метода CMarketCatalogProduct::GetQuantity($elementID, $iblockID), подробнее в четвёртом примере использования API.

Компонент большой корзины yenisite:catalog.basket для товаров, у которых включен количественный учёт, производит сверку между количеством положенным в корзину и имеющимся количеством в наличии на данный момент. Количество товара автоматически уменьшается до максимально возможного. Если это происходит в момент оформления заказа, например, когда кто-то другой уже оформил заказ с этим же товаром, оформление заказа прерывается и выдаётся сообщение о том, что содержимое корзины изменилось.


16. Проверить, является ли инфоблок торговым каталогом.
CMarketCatalog::IsCatalog($iblockID);

$iblockID - идентификатор проверяемого инфоблока

Метод возвращает 1, если инфоблок является торговым каталогом в Киоске. В противном случае - 0.

17. Проверить, включен ли количественный учёт для указанного инфоблока.
CMarketCatalog::UsesQuantity($iblockID);

$iblockID - идентификатор проверяемого инфоблока

Метод возвращает 1, если в указанном инфоблоке производится количественный учёт. В противном случае - 0.

18. Получить список цен, доступных текущему пользователю.
CMarketPrice::GetItemPriceValues($elementID, $arPrices);

$elementID - идентификатор элемента инфоблока (товара)

$arPrices - массив с ценами, где в качестве ключей массива выступают символьные коды типов цен, которые необходимо обработать. Например, массив со списком цен может задаваться в параметрах компонента. После чего, его нужно передать в этот метод, чтобы отсеять цены, недоступные текущему пользователю. В шаблоне компонента bitrix:catalog.element сюда можно передавать массив $arResult['PRICES'], в шаблоне компонентов bitrix:catalog.section и bitrix:catalog.top - массив $arItem['PRICES'] (из цикла перебора товаров). Если второй аргумент не указать, или передать пустой массив, будут выбраны все типы цен, доступные текущему пользователю.

Метод возвращает массив с парами ("КОД_ТИПА_ЦЕНЫ" => "СТОИМОСТЬ_ТОВАРА").

19. Получить доступное количество для указанного товара.
CMarketCatalogProduct::GetQuantity($elementID, $iblockID);

$elementID - идентификатор элемента инфоблока (товара)

$iblockID - идентификатор инфоблока с каталогом (необязателен, но его отсутствие приводит к дополнительному запросу к базе данных).

Метод возвращает целое число с количеством товара. При возникновении ошибки (товар не найден, отсутствует свойство с количеством) метод возвращает false.

20. Как поменять текст о новом заказе, который приходит на почту клиенту / админу
Для этого необходимо открыть файл как PHP:
/bitrix/components/yenisite/catalog.basket/lang/ru/component.php

Далее внутри файла видим два шаблона: http://screencast.com/t/3zrFSpmpogX
Соответственно $MESS ['TEXT'] -- шаблон, который уходит на почту клиенту и $MESS ['TEXT_ADMIN'] -- шаблон, который приходит на почту администратору.

ВНИМАНИЕ! Фразы в шаблоне, которые находятся между решеток менять нельзя! (пример: #FIO#) их можно только менять местами, т.к. это макросы для вставки данных о заказе.

1. Как передавать количество товара в корзину?
Для этого, в первую очередь, нужно в параметрах компонента каталога разрешить указывать количество товара: http://screencast.com/t/mmmpfp5OCvU
Затем это количество необходимо передавать при добавлении в корзину в GET параметре.
Пример ссылки: http://site.ru/catalog/element/71/?action=ADD2BASKET&id=71&quantity=3

Поясним как это сделать.

Для того что бы добавить кнопку купить, для покупки одной единицы товара, мы например, в код компонента bitrix:catalog.element, добавляли следующий код:

<noindex>
< a href="<?echo $arResult["BUY_URL"]?>" rel="nofollow"><?echo GetMessage("CATALOG_BUY")?></a > 
< a href="<?echo $arResult["ADD_URL"]?>" rel="nofollow"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></a > 
</noindex>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


В $arResult["BUY_URL"] содержится http://сайт/раздел каталога/файл.php?action=BUY&id=ИД_элемента
В $arResult["ADD_URL"] содержится http://сайт/раздел каталога/файл.php?action=ADD2BASKET&id=ИД_элемента

Как мы видим данные ссылки немногим отличаются от ссылки для кнопки с передаваемым количеством товара.

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

Для этого вместо тега <a>, для создания ссылки, мы будем использовать тег <form>, для установки формы на странице:
- В форме мы передаем все необходимые параметры, в том числе id товара (name="id") и его количество (name="quantity").
- Поля с именами action и id пользователь изменить не может. Для quantity (количество) пользователь может поставить необходимое ему число.
<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arResult["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>

<form action="<?echo $arResult["ADD_URL"]?>" method="get">
 <input type="text" value="ADD2BASKET" name="action" hidden />
 <input type="text" value="<?=$arResult["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></button>
</form>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


Код для компонента bitrix:catalog.section будет выглядеть так (соответствие может быть не полным - переменные содержащие параметры могут отличаться, все зависит от кастомизируемого шаблона): 

<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>

<form action="<?echo $arResult["ADD_URL"]?>" method="get">
 <input type="text" value="ADD2BASKET" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></button>
</form>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


Для передачи в корзину товара с выбором характеристик необходимо добавить в ссылке параметры вида:
prop[#КОД свойства#]
http://site.ru/catalog/element/71/?action=ADD2BASKET&id=71&quantity=3&prop[COLOR_REF]=purple&prop[SIZE]=50

На примере формы:
<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <input type="text" value="purple" name="prop[COLOR_REF]" />
 <input type="text" value="50" name="prop[SIZE]" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>
2. Class CMarketPrice
CMarketPrice::GetList($by = 'id', $order = 'desc');
Отдает все параметры всех типов цен, записанных в Сервисы -> Киоск -> Типы цен
Ответ формируется из таблицы yen_market_catalog_price, сортировка по полю $by (по дефолту "id") в порядке $order (по дефолту "desc").
$by - поле сортировки (необязательное)
$order - порядок сортировки (необязательное)

CMarketPrice::GetItemPriceValues($productID, $arPrices = array());
Возвращает массив (Тип цены => Значение для товара) все заполненные значения цен для конкретного товара для всех или указанных типов цен.
$productID - id товара (обязательное)
$arPrices - символьные коды типов цен; если передается пустой массив - array() - то для ответа учитываются все типы цен (необязательное)

CMarketPrice::GetPriceGroup($id);
Возвращает массив id групп пользователей, которым доступен указанный тип цены.
Доступность группам пользователей типа цены задается при создании или редактировании типов цен в Сервисы -> Киоск -> Типы цен.
Группы пользователей можно увидеть в Настройки -> Пользователи -> Группы пользователей.
$id - id или символьный код типа цен (обязательное)

CMarketPrice::IsCanAdd($id);
Проверка на доступность пользователю типа цены.
Возвращает 1 если пользователь состоит в группе пользователей которой доступен конкретный тип цен.
Возвращает 0 если пользователь НЕ состоит в группе пользователей которой доступен конкретный тип цен.
$id - id или символьный код типа цен (обязательное)


CMarketPrice::GetByCode($code);
Возвращает объект mysqli_result с параметрами указанного по символьному коду типа цен или false если такого типа цен не существует.
$code - символьный код типа цен (обязательное)
Пример:
$code = "PRICE_BASE";
$db_res = CMarketPrice::GetByCode($code);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::GetByID($id);
Возвращает объект mysqli_result с параметрами указанного по id типа цен или false если такого типа цен не существует.
$id - id типа цен (обязательное)
Пример:
$id = 1;
$db_res = CMarketPrice::GetByID($id);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::Update($id, $name, $code, $base, $group);
При помощи этой функции можно внести правки в уже существующие типы цен.
$id - id (обязательное) - по этому параметру вносятся изменения.
$name - название типа цен (обязательное)
$code - символьный код типа цен (обязательное)
$base - флаг базового типа цен (обязательное) - принимает значения "Y" и "N" (обязательное)
$group - массив содержащий перечисление групп пользователей для которых доступен данный тип цен (обязательное)
При изменении названия и/или символьного кода типа цен так же будут внесены изменения в название и/или код соответствующего свойства инфоблока каталога товаров.
А так же при присвоении $base значения "Y", тип цены с отмеченным базовым типом будет изменен, т.е. тип цены с отмеченным базовым типом, который был до вызова функции, примет значение $base = "N".
Попытка снять флаг базового типа цен будет проигнорирована - всегда должен быть один базовый тип цен.

CMarketPrice::GetBasePrice();
Возвращает объект mysqli_result с параметрами базового типа цен или false если нет ни одного типа цен
Пример:
$id = 1;
$db_res = CMarketPrice::GetByID($id);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::Delete($id);
Удаляет указанный тип цен.
$id - id типа цен (обязательное)

CMarketPrice::Add($name, $code, $base, $group);
При помощи этой функции можно внести правки в уже существующие типы цен.
$name - название типа цен (обязательное)
$code - символьный код типа цен (обязательное)
$base - флаг базового типа цен (обязательное) - принимает значения "Y" и "N" (обязательное)
$group - массив содержащий перечисление групп пользователей для которых доступен данный тип цен (обязательное)
Если символьный код ($code) нового типа цен будет совпадать с символьным кодом уже существующего типа цен, добавления не будет.
А так же при присвоении $base значения "Y", тип цены с отмеченным базовым типом будет изменен, т.е. тип цены с отмеченным базовым типом, который был до вызова функции, примет значение $base = "N".
3. Class CMarketCatalog
CMarketCatalog::GetList($by = "id", $order = "asc");
Возвращает объект mysqli_result с массивом содержащим id записи, id инфоблока и флаг количественного учета инфоблоков отмеченных как торговые каталоги.
Настройка возможна в административной части Сервисы -> Киоск -> Каталог товаров
Ответ формируется из таблицы yen_market_catalog сортировка по полю $by (по дефолту "id") в порядке $order (по дефолту "asc").
$by - поле сортировки (необязательное)
$order - порядок сортировки (необязательное)

CMarketCatalog::Add($iblock_id, $use_quantity = 0);
Причисляет инфоблок к торговым каталогам (аналогичен отметке "Является торговым каталогом" в Сервисы -> Киоск -> Каталог товаров).
Возвращает 0 если инфоблок уже является торговым каталогом или id добавленной записи в таблице, с инфоблоками являющимися торговыми каталогоми, yen_market_catalog.
$iblock_id - id инфоблока (обязательное)
$use_quantity - отметка включения количественного учета (необязательное), по дефолту количественный учет НЕ включен.

CMarketCatalog::Delete($id);
Снимает отметку "Является торговым каталогом" с инфоблока по id записи в таблице, с инфоблоками являющимися торговыми каталогами, yen_market_catalog.
$id - id инфоблока (обязательное), принимает значения id записи в таблице yen_market_catalog или - '*', тогда флаг "Является торговым каталогом" снимается со всех инфоблоков.

CMarketCatalog::IsCatalog($iblock_id);
Проверка инфоблока на принадлежность к торговым каталогам.
Возвращает 1 если инфоблок является торговым каталогом.
Возвращает 0 если инфоблок НЕ является торговым каталогом.
$iblock_id - id инфоблока (обязательное)

CMarketCatalog::UsesQuantity($iblock_id);
Проверка активности параметра "Количественный учет" для инфоблоков являющихся торговыми каталогами.
Возвращает 1 если параметр "Количественный учет" включен.
Возвращает 0 если параметр "Количественный учет" НЕ включен.
$iblock_id - id инфоблока (обязательное)
4. Class CMarketCatalogProduct
private CMarketCatalogProduct::_GetByID($element_id, $iblock_id);
Приватный метод.
Возвращает массив со значениями следующих параметров для конкретного товара ($element_id): Количество товара (число или false, если значение отсутствует), включен или нет "Количественный учет" (N/Y), 'CAN_BUY_ZERO' => 'N'.

private CMarketCatalogProduct::_GetQuantity($element_id, $iblock_id);
Приватный метод.
Возвращает количество товара (свойство MARKET_QUANTITY) или false, если значение отсутствует, для конкретного товара ($element_id).

private CMarketCatalogProduct::_TraceQuantity($delta, $element_id, $iblock_id);
Приватный метод.
Уменьшает количество товара (свойство MARKET_QUANTITY) на $delta для конкретного товара ($element_id).
Возвращает false, если не включен количественный учет для инфоблока $iblock_id.
Возвращает true, если уменьшение количества товара прошло штатно.

private CMarketCatalogProduct::__checkID(&$element_id, &$iblock_id);
Приватный метод.
Проверяет id товара и инфоблока на корректность и если это необходимо ищет и восстанавливает id инфоблока по id товара.
Возвращает true, если
$element_id<=0
или обнаружено отсутствие товара при восстановлении значения $iblock_id (если $iblock_id<=0).
Возвращает false, если id товара и инфоблока принимают положительное (корректное) значение.

CMarketCatalogProduct::GetByID($element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) id товара и инфоблока и передает эти значения приватному методу _GetByID.
Возвращает массив со значениями следующих параметров для конкретного товара ($element_id): Количество товара (число или false, если значение отсутствует), включен или нет "Количественный учет" (N/Y), 'CAN_BUY_ZERO' => 'N'.
$element_id - id товара (обязательное)
$iblock_id - id инфоблока (необязательное), если значение не задается или принимает значение <=0, то при проверке на корректность будет найдено и восстановлено по id товара (дополнительные запросы - увеличивают время выполнения)

CMarketCatalogProduct::GetQuantity($element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) id товара и инфоблока и передает эти значения приватному методу _GetQuantity.
Возвращает количество товара (свойство MARKET_QUANTITY) при успешном выполнении.
Возвращает false, если
значение свойства для конкретного товара ($element_id) отсутствует
или сам товар ($element_id) не существует.
$element_id - id товара (обязательное)
$iblock_id - id инфоблока (необязательное), если значение не задается или принимает значение <=0, то при проверке на корректность будет найдено и восстановлено по id товара (дополнительные запросы - увеличивают время выполнения)

CMarketCatalogProduct::TraceQuantity($delta, $element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) $delta, id товара и инфоблока и передает эти значения приватному методу _TraceQuantity.
Уменьшает количество товара (свойство MARKET_QUANTITY) на $delta для конкретного товара ($element_id).
Возвращает false, если
не включен количественный учет для инфоблока $iblock_id,
величина уменьшения количества товара - $delta <=0,
значение свойства для конкретного товара ($element_id) отсутствует
или сам товар ($element_id) не существует.
Возвращает true, если уменьшение количества товара прошло штатно.
5. Class CMarketBasket
CMarketBasket::Add($id, $props = array(), $quantity = 1);
Добавляет в корзину товар. Количество товаров в корзине записывается в $_SESSION по закодированным параметрам $id и $props.
$id - id товара (обязательное)
$props - код множественного свойства (или в случае свойства-справочникаXML_ID) товара (если есть)(необязательное)
$quantity - количество товара (необязательное)(ВНИМАНИЕ! При превышении данным параметром значения свойства MARKET_QUANTITY, ответственного за количество товара, MARKET_QUANTITY уйдет в минус)

CMarketBasket::DecodeBasketItems($key);
Раскодирует ключ использующийся для записи количества товаров в $_SESSION при добавлении в корзину.
Возвращает массив содержащий $id товара и $props - код(ы) множественного свойства товара.
$key - строка - закодированный товар (обязательное)

CMarketBasket::EncodeBasketItems($id, $props);
Возвращает ключ использующийся для записи количества товаров в $_SESSION при добавлении в корзину. Кодирует ключ из параметров $id и $props.
$id - id товара (обязательное)
$props - массив из кодов множественного свойства (или в случае свойства-справочникаXML_ID) товара, если у товара нет множественных свойств то необходимо задать пустой массив.

CMarketBasket::Delete($key);
Удаляет товар из корзины. Очищает $_SESSION по ключу $key.
$key - строка - закодированный товар (обязательное)

CMarketBasket::setQuantity($key, $quantity);
При присутствии товара, с указанным ключом, в корзине ($_SESSION['YEN_MARKET_BASKET']) - устанавливает для него количество добавленное в корзину равное $quantity.
$key - строка - закодированный ключ товара (обязательное)
$quantity - число - количество товара (обязательное)(ВНИМАНИЕ! Если $quantity<=0, тогда товар с указанным ключом удаляется из корзины)

CMarketBasket::getCartTotal();
Возвращает массив содержащий общую сумму товаров (SUM_FORMATTED), находящихся в корзине, а так же их суммарное количество (QUANTITY).
array('BUY' => array('SUM_FORMATTED' => XXX, 'QUANTITY' => YYY))

CMarketBasket::GetList($id, $iblock_id = false);
Возвращается объект CDBResult с массивом содержащим перечисление товаров находящихся в указанном заказе ($id).
$id - id заказа (обязательное)
$iblock_id - id инфоблока заказов (необязательное). Если значение не задано, id инфоблока определяется по символьному коду YENISITE_MARKET_ORDER (дополнительные запросы - увеличивают время выполнения)
6. Class CMarketOrderProperties
CMarketOrderProperties::GetList($arSort);
Возвращает объект CDBResult с массивом активных свойств инфоблока заказов. Инфоблок заказов определяется по символьному коду YENISITE_MARKET_ORDER.
$arSort - Массив для сортировки, имеющий вид by1=>order1[,by2=>order2 [, ..]], (обязательное) где: by - поле сортировки, может принимать значения:
id - код;
block_id - код информационного блока, которому принадлежит свойство; name - название;
name - название;
active - активность;
sort - индекс сортировки;
timestamp_x - дата последнего изменения
searchable - по признаку участия значения свойства в поиске;
filtrable - по признаку участия свойства в фильре на странице списка элементов;
order - порядок сортировки, может принимать значения:
asc - по возрастанию;
desc - по убыванию;

CMarketOrderProperties::Add($name, $code, $type = "S", $multiple = "N");
Добавляет новое свойство в инфоблок заказов.
Возвращает id свойства если добавление проведено успешно и 0, если инфоблок заказов (YENISITE_MARKET_ORDER) не существует или свойство с указанным символьным кодом ($code) уже существует или добавление свойтсва оказалось неудачным.
$name - название свойства (обязательное)
$code - символьный код свойства (обязательное)
$type = "S" - тип свойства (необязательное), по дефолту тип - строка
$multiple = "N" - отметка о множественности свойства (необязательное), по умолчанию - свойство не множественное
7. Class CMarketOrder
CMarketOrder::GetByID($id);
Возвращает массив свойств конкретного заказа ($id), в том числе и данные о платежной системе.
$id - id заказа (обязательное)

CMarketOrder::GetList($arOrder = array("SORT"=>"ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array());
Возвращает список активных заказов.
Использует CIBlockElement::GetList.
Устанавливает базовый фильтр:
$baseFilter = array(
"IBLOCK_CODE" => "YENISITE_MARKET_ORDER",
"ACTIVE" => "Y",
"PROPERTY_SITE_ID" => SITE_ID
);
Базовый фильтр ($baseFilter) и фильтр заданный в параметрах ($arFilter) склеиваются и попадают в вызов CIBlockElement::GetLis.
Остальные параметры передаются для вызова CIBlockElement::GetLis без изменений. О них можно прочитать в документации для разработчиков 1C-Битрикс: Управление сайтом https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php.

CMarketOrder::SetStatus($id,$status);
Устанавливает статус конкретного заказа ($id).
$id - id заказа (обязательное)
$status - принимает значение "PAYED", переводя заказ в статус - Оплачен.

CMarketOrder::GetStatus($id);
Определяет статус оплаты конкретного заказа ($id).
Возвращает PAYED, если заказ был оплачен и NOT_PAYED, если не был.
$id - id заказа (обязательное)

CMarketOrder::CheckAccessToOrder($email, $id, $iblock_id);
Определяет доступность заказа для пользователя.
Проверка для зарегистрированного пользователя - выборка заказов по UserID и соответствие их $id проверяемого заказа.
Проверка для НЕ зарегистрированного пользователя - соответствие введенного $email (email или номер телефона) указанному при оформлении заказа $id.
Возвращает массив array(messege, error).
messege - объяснения для пользователя что и куда вводить
error - сообщения о неправильно введенных данных для пользователя
$id - id заказа (обязательное)
$iblock_id - id инфоблока заказов (обязательное)
$email - email или номер телефона для проверки доступности заказа для НЕ зарегистрированных пользователей
8. Class CMarketPayment
CMarketPayment::GetByName($name);
Возвращает массив с id платежной системы по ее названию или символьному коду.
$name - название или символьный код платежной системы (обязательное)
9. Как добавить проверку доступности заказа для пользователя?
В $ERROR пишем проверку доступности заказа для пользователя:
$ERROR = CMarketOrder::CheckAccessToOrder($_REQUEST['email'], $_REQUEST['ID'], $IBLOCK_ID);
ps. для начала достаточно передать только id заказа - для зарегистрированного пользователя ошибок не будет - для НЕ зарегистрированного выведется форма проверки доступа
И далее проверка на наличие ошибок в введенных данных у пользователя:
if(!empty($ERROR['error'])){
//Форма ввода id заказа и проверочных данных и вывод предупреждений для пользователя
//Например:
<form action="#" method="post">
<label>
<? foreach($ERROR['messege'] as $messege){ ?>
<p><?= $messege ?></p> // вывод сообщений для объяснения использования данной формы для пользователя 
<? } ?>
<? foreach($ERROR['error'] as $errorMessege){ ?>
<p><?= $errorMessege ?></p> // вывод сообщений об ошибочно введенных пользователем данных
<? } ?>
</label>
<div>
<input name="ID" value="<?= $_REQUEST['ID']?$_REQUEST['ID']:"" ?>"> //id заказа
<input name="email" value="<?= $_REQUEST['email']?$_REQUEST['email']:"" ?>"> // email или номер телефона
<span>
<button>OK</button>
</span>
</div>
</form>
}else{
//проверка пройдена, можно выводить детальную информацию о заказе
}

1. Как настроить возможность оплаты заказов через сервис Robokassa?
После установки модуля "Киоск" в системе появится инфоблок "Платежные системы" типа "Справочники" (Контент -> Справочники -> Платежные системы). В этом инфоблоке уже содержится запись для подключения платежной системы. Ее необходимо активировать.
Если модуль "Киоск" был обновлен до версии 1.7.0, тогда необходимо добавить элемент с именем и символьным кодом "robokassa".
http://screencast.com/t/HPKQOtAqHn7k

0. Указать в "Путь до обработчика" путь до обработчика робокассы, если его нет. По умолчанию "/bitrix/modules/yenisite.market/payment/roboxchange/payment.php"


1. Зарегистрируйтесь и оформите свой магазин на сайте робокассы https://auth.robokassa.ru/my/Account/

Пройдите регистрацию в системе ROBOKASSA (http://docs.robokassa.ru/ru#1049)

Создайте магазин в системе ROBOKASSA (http://docs.robokassa.ru/ru#1140)

Выполните техническую настройку (http://docs.robokassa.ru/ru#1160)


2. Обязательные значения для некоторых параметров для регистрации:
http://screencast.com/t/InGYJHKmwlg
Алгоритм расчета хеша - MD5
Метод отсылки данных по Result Url - GET или POST
Result Url - путь до обработчика result робокассы, по умолчанию http://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/result.php (например http://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/result.php)
Success Url - путь до обработчика success робокассы, по умолчанию http://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/success.php (например http://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/success.php)
Fail Url - путь до обработчика success робокассы, по умолчанию http://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/fail.php (например http://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/fail.php)

3. Перенесите некоторые параметры, заполненные при регистрации, создании магазина и технической настройке в параметры элемента робокассы у себя на сайте:
http://screencast.com/t/InGYJHKmwlg
Идентификатор магазина - Логин магазинa (robokassa)
Данное свойство множественное и имеет описание.
Каждый логин магазинa (robokassa) должен соответствовать отдельному идентификатору магазина, созданного вами на сайте робокассы. http://screencast.com/t/i6cS33P5n
В описание необходимо добавить идентификатор соответствующего сайта (например - s1).

Пароль #1 - Пароль магазина (robokassa)
Пароль #2 - Пароль магазина #2 (robokassa)
Пароль #1 - Тестовый пароль магазина (robokassa)
Пароль #2 - Тестовый пароль магазина #2 (robokassa)

Пароли должны быть ОДИНАКОВЫМИ для ВСЕХ магазинов, созданных вами на сайте робокассы.

Тестовый режим
1 - Включить тестовый режим (используется для отладки)
0 или пусто - Выключить тестовый режим
Прочее - ошибка

4. Настройте страницы вашего сайта для граничного взаимодействия пользователя с робокассой:

  При нажатии на кнопку Оформить заказ http://screencast.com/t/yQwWwK0Bx, пользователь попадает на страницу подтверждения создания заказа и кнопки оплаты http://screencast.com/t/1JYqgOF9. Что-бы изменить текст до кнопки оплаты робокассы: Создайте в публичке своего сайта файл \personal\order\payment.php (например Сайт.ru\personal\order\payment.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - http://screencast.com/t/yQwWwK0Bx.

  При ошибке оплаты робокассы или отказа от оплаты пользователь попадает на страницу Fail URL http://screencast.com/t/9wQ7fNKq7. Что-бы изменить текст: Создайте в публичке своего сайта файл \personal\order\fail.php (например Сайт.ru\personal\order\fail.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - http://screencast.com/t/aFyfcGa6Yf.

  При удачной оплате пользователь попадает на страницу Success URL http://screencast.com/t/n5YcwmqUv9dG. Что-бы изменить текст: Создайте в публичке своего сайта файл \personal\order\fail.php (например Сайт.ru\personal\order\fail.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - http://screencast.com/t/Z37McvVI7.

В своих страницах можно использовать переменную $inv_id - номер заказа.
Так же $out_summ - сумма заказа и $Email - E-mail.
В fail в success переменные можно извлечь из $_REQUEST.


5. Протестируйте работу обработчика робокассы на тестовом режиме (не взимается оплата).
По завершении проверки подайте заявку на активацию.