Задача: нужно добавить в корзину товар, которого не существует в каталоге, с возможностью задать ему произвольные название и цену.
Все просто: так как методу 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" => ""
);
$arProps = array();
$arFields["PROPS"] = $arProps;
CSaleBasket::Add($arFields);
Здесь я добавил в название псевдотовара сгенерированный ID, чтобы проверить работоспособность и убедиться, что при каждом добавлении создается новый товар. Я запустил скрипт три раза, в результате в корзине появились три разных товара (цену и количество менял вручную).
![Добавление в корзину и заказ не существующего товара в 1С-Битрикс 2](/upload/medialibrary/3d0/57mq7dmscgzsx4qc2rdg9qep55c6cc01/p2.jpg)
Заказ тоже оформился правильно, с содержимым, включающим несуществующие товары:
![Добавление в корзину и заказ не существующего товара в 1С-Битрикс 1](/upload/medialibrary/92c/08omp8ldu9p3n7flp4mz5mfh6sbi2lm8/p1.jpg)