Повторяющийся профиль и связанный элемент

У меня есть услуга подписки, за которую люди платят ежемесячно, поэтому я настроил "виртуальный продукт" с повторяющимся профилем. В то же время, я хочу иметь его, чтобы они могли добавлять разные одноразовые продукты. Для этого я попытался создать " связанный продукт "со всеми различными одноразовыми продуктами и добавить" виртуальный продукт "к этому"связанному продукту".

однако, когда я иду на проверку, он говорит: "номинальный элемент можно приобрести только автономно. Чтобы продолжить, пожалуйста удалите другие элементы из цитаты."Как я могу позволить людям подписаться на услугу и одновременно приобрести продукты?

Примечание: Я использую Paypal Website Payment Pro в качестве своего торгового счета.

2 ответов


к сожалению, это жестко закодированное ограничение в коде 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, чтобы сделать это, но это сложно задача, на которую невозможно ответить в одном сообщении.


вот комментарий от кода Magento:

/** * Временное решение для процесса покупки: слишком опасно покупать более одного номинального элемента * или смесь номинальных и не номинальных предметов, хотя технически это возможно. * * Проблема в том, что в настоящее время он реализуется как последовательная подача номинальная товаров и заказа в один клик. * Это делает логически невозможным процесс покупка failsafe. * Правильное решение состоит в том, чтобы отправлять товары один за другим с подтверждением клиента каждый раз. */

на самом деле вы можете удалить код ниже:

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 по-прежнему обрабатывает несколько номинальных продуктов, однако вы используете это на свой страх и риск.