Вячеслав, решение тут простое,
задайте каждому товару раздел.
создайте два типа доставки, в ограничениях укажите раздел для конкретной доставки
(формально доставки могут не отличаться, важно именно привязка раздела к типу доставки)
--
Создайте Оплаты, а уже в них можно сделать ограничение на тип доставки.
Т.е. к оплате станут доступны только те товары, которые являются Сувенирами (потому что они относятся к своему типу доставки). Тоже будет и для других разделов, типа Услуг.
Далее: в шаблон сайта вешаем проверку:
Если в корзине есть товар, то получим его категорию. Если мы находимся на странице другого товара, то сравним эти две категории. Если они одинаковые, то показываем кнопку "Купить", иначе блокируем ее с текстом "Нельзя потому что....."
Теперь чтобы купить разные товары и совершить разные оплаты, нужно делать отдельные заказы, история будет в профиле, как вы хотели....
Ну, и несколько скринов на примере Почты России и платежной системы Пэйпэл
На скрине видно, что отдельные товары из раздела Аксессуары привязаны к доставке Почта, А в платежных системах установлена оплата только для товаров, чья доставка входит в тип Почты.
--
Корзину текущего пользователя можно
получить так:
use Bitrix\Sale;
$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());
Что может быть проще?