//название товара не пишем
Bitrix\Main\Loader::includeModule("catalog");
$fields = [
'PRODUCT_ID' => $item[offer_id], // ID товара, обязательно
'QUANTITY' => $item[quantity],
'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
'PRICE' => $item[price], //твоя кастомная цена
'CUSTOM_PRICE' => 'Y',
];
$r = Bitrix\Catalog\Product\Basket::addProduct($fields);
if (!$r->isSuccess()) {
var_dump($r->getErrorMessages());
}
Для изменения существующего заказа нужно:
$order = \Bitrix\Sale\Order::load(38); //загрузим заказ
.....//добавляем товары или производим другие действия
$order->save(); //сохраняем заказ
В вашем коде я не увидел, что для каждого товара вы устанавливаете новую цену