2010-07-23 49 views
8

我有订阅服务,人们每月支付,所以我已经设置了一个带有定期配置文件的“虚拟产品”。同时,我想拥有它,这样他们可以添加不同的一次性产品。为了实现这一点,我尝试用所有不同的一次性产品创建“捆绑产品”,并将“虚拟产品”添加到“捆绑产品”中。定期配置文件和捆绑项目

但是,当我去检查它说:“名义项目可以单独购买。要继续,请从报价中删除其他项目。“我如何让人们同时订阅服务和购买产品?

注意:我使用Paypal网站Payment Pro作为我的商家帐户。

+0

我讨厌碰撞,但任何人? – 2010-07-25 15:21:43

+0

评论不要碰你的问题,但编辑。如果您尚未解决此问题,请添加其他信息,或者如果您有问题,请添加答案。谢谢。 – 2011-06-19 16:47:28

+0

您使用的是Magento的哪个版本? – 2011-06-20 01:32:22

回答

2

不幸的是,这是Mage_Paypal代码中的硬编码限制。

可以在Mage_Sales_Model_Service_Quote::submitAll()看到它执行submitNominalItems()其中包含:

$this->_validate(); 
    $this->_submitRecurringPaymentProfiles(); 
    $this->_inactivateQuote(); 
    $this->_deleteNominalItems(); 

所以,它杀死名义提交项目后的车。我不完全确定它为什么这样做,但我认为这是由于在PayPal创建订阅的方式。

这里是防止项目添加到包含Mage_Sales_Model_Quote::addItem()标称值一车的代码:我正在使用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 Recurring Profiles with non-Paypal payment method),并且可以同时检出名义(又名订阅)和真实产品,但它确实使它变得相当复杂。

如果这是一个大问题,应该有可能重构Mage_Paypal代码来做到这一点,但这是一项复杂的任务,不能真正在一篇文章中得到解答。

+0

是的,它看起来像没有简单的方法解决这个问题:( – 2011-06-23 23:01:51

+0

嗨,它解决了这个问题,但它为同一产品创建了两个订单。我们如何解决这个问题? – Shivanand 2015-03-20 06:14:25

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的仍然处理多个标称的产品,但是,你使用你自己的风险。