У вас параметры какие-то в корзину отправляются?
Если да, то и тут тоже нужно чтобы они отправлялись, а не пустой массив.
Не разбирался почему так, но у нас на сайте начиная с 17 версии если в Add2BasketByProductID передавать $arParams пустым, то перестает работать - похоже на ваш случай.
А вообще лучше начинать переходить на d7 c такими вещами. Конечно обертка удобнее, но становится менее работоспособней.
вот кусок на нашем проекте
[CODE]
$fuser=\Bitrix\Sale\Fuser::getIdByUserId($arUser['ID']);
// Получение корзины для текущего пользователя
$basket = \Bitrix\Sale\Basket::loadItemsForFUser( $fuser, 's1' );
$arParams['CATALOG_XML_ID']=array(
'NAME' => 'Catalog XML_ID',
'CODE' => 'CATALOG.XML_ID',
'VALUE' => $obEl['IBLOCK_EXTERNAL_ID']
);
$arParams['PRODUCT_XML_ID']=array(
"NAME" => "Product XML_ID",
"CODE" => "PRODUCT.XML_ID",
"VALUE" => $obEl['XML_ID']
);
$item = $basket->createItem('catalog', $obEl['ID']); //создаём новый товар в корзине
$item->setFields(array(
'QUANTITY' => 1,
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => 's1',
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
"CATALOG_XML_ID" => $obEl['IBLOCK_EXTERNAL_ID'],
"PRODUCT_XML_ID" => $obEl['XML_ID'],
'CUSTOM_PRICE'=>'Y',//используется custom, так как у нас идет подмена цены на скидочную, по своим правилам
'PRICE' => $PlProductInfo['PRICE']
));
$item->getPropertyCollection()->setProperty($arParams);
//Сохранение изменений корзины
$basket->save();
[/CODE]