Вот
тут мной было сделано подобное. Реализовано добавлением отдельных товаров.
Добавляйте основной товар в корзину, при добавлении дополнительных (услуг) указывайте в характеристике к какому товару добавлена эта услуга. При удалении товара из корзину удаляйте и дополнительные товары тоже.
Bitrix\Main\Loader::includeModule("catalog");
$fields = [
'PRODUCT_ID' => 98, // ID товара, обязательно
'QUANTITY' => 1, // количество, обязательно
'PROPS' => [
['NAME' => 'Test prop', 'CODE' => 'TEST_PROP', 'VALUE' => 'test value'],
],
];
$r = Bitrix\Catalog\Product\Basket::addProduct($fields);
if (!$r->isSuccess()) {
var_dump($r->getErrorMessages());
}
В примере, который я указывал, сейчас не видно удаление доп. услуг при удалении товаров, но это они уже сами потом переделали корзину на стандартную и не сохранили этот функционал...