时间:2010-07-23 17:39:56

标签: magento paypal paypal-subscriptions

2 个答案:

答案 0 :(得分:3)

以下是Magento代码的评论:

  

/ **            *购买过程的临时解决方法:购买多个名义商品太危险了            *或标称和非标称物品的混合物,尽管技术上可行。            *            *问题在于,目前只需点击一下即可实现名义商品和订单的顺序提交。            *在逻辑上不可能使购买过程失败。            *正确的解决方案是每次都通过客户确认逐一提交项目。            * /

实际上您可以删除以下代码:

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仍处理多种名义产品,但是,您自己承担风险。

答案 1 :(得分: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的Recurring Profiles(它的后台任务:Magento Recurring Profiles with non-Paypal payment method)并且可以同时检出名义(即订阅)和真实产品,但确实让它变得更加复杂。

如果这是一个大问题,应该可以重构Mage_Paypal代码来执行此操作,但这是一项复杂的任务,无法在一个帖子中真正回答。