К сожалению, это жестко ограниченное ограничение в коде Mage_Paypal.
Вы можете видеть в Mage_Sales_Model_Service_Quote::submitAll()
, что он выполняет submitNominalItems()
, который содержит:
$this->_validate();
$this->_submitRecurringPaymentProfiles();
$this->_inactivateQuote();
$this->_deleteNominalItems();
Таким образом, он убивает корзину после отправки именных предметов.Я не совсем уверен, почему это происходит, но я предполагаю, что это связано с тем, как подписки создаются в Paypal.
Вот код, который предотвращает добавление товаров в корзину, которая содержит номиналы в Mage_Sales_Model_Quote::addItem()
:
if ($item->isNominal() && $this->hasItems() || $this->hasNominalItems()) {
Mage::throwException(Mage::helper('sales')->__('Nominal item can be purchased standalone only. To proceed please remove other items from the quote.'));
}
В настоящее время я работаю над использованием периодических профилей Magento для других провайдеров платежей (это фоновая задача: Повторяющиеся профили Magento с не-Paypal методом оплаты )Можно оформить как номинальные (так называемые подписки), так и реальные продукты одновременно, но это делает его немного более сложным.
Если это большое дело, то должна быть возможность рефакторинга кода Mage_Paypal, чтобы сделать это, но это сложная задача, на которую невозможно ответить в одном посте.