Задача: нужно добавить в корзину товар, которого не существует в каталоге, с возможностью задать ему произвольные название и цену.
Все просто: так как методу CSaleBasket::Add нужно обязательно передать ID товара, мы можем сгенерировать случайное число с помощью PHP и использовать его в качестве ID.
CSaleBasket::Add не требуется наличие товара с таким ID в базе сайта. Если не хотите, чтобы сгенерированный ID совпал с уже существующим в базе, можно задать диапазон, который не будет использоваться. Например, от 10 до 11 миллиардов.
Добавление товара в корзину.
Теперь: там где вам нужно, на любом шаге или в любом обработчике добавляем код:
$pseudoId = rand(10000000000, 11000000000);
$arFields = array(
"PRODUCT_ID" => $pseudoId,
"PRODUCT_PRICE_ID" => '1',
"PRICE" => '1000',
"CURRENCY" => "RUB",
"WEIGHT" => '',
"QUANTITY" => 1,
"LID" => LANG,
"DELAY" => "N",
"CAN_BUY" => "Y",
"NAME" => "Абракадабра " . $pseudoId,
"CALLBACK_FUNC" => "",
"MODULE" => "",
"NOTES" => "",
"ORDER_CALLBACK_FUNC" => "",
"DETAIL_PAGE_URL" => "",
"VAT_INCLUDED" -> "N" // Не добавляем НДС
);
$arProps = array();
$arFields["PROPS"] = $arProps;
CSaleBasket::Add($arFields);
Здесь я добавил в название псевдотовара сгенерированный ID, чтобы проверить работоспособность и убедиться, что при каждом добавлении создается новый товар. Я запустил скрипт три раза, в результате в корзине появились три разных товара (цену и количество менял вручную).
Заказ тоже оформился правильно, с содержимым, включающим несуществующие товары: