8

我有一个人们按月付费的订阅服务,所以我设置了一个带有重复配置文件的“虚拟产品”。同时,我想拥有它,这样他们就可以添加不同的一次性产品。为了实现这一点,我尝试使用所有不同的一次性产品创建一个“捆绑产品”,并将“虚拟产品”添加到该“捆绑产品”中。

但是,当我去结账时,它说“标称物品只能单独购买。要继续,请从报价中删除其他项目。” 如何让人们同时订阅服务和购买产品?

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

4

2 回答 2

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 仍然处理多种名义产品,但是,您使用它需要您自担风险。

于 2012-10-03T11:41:25.080 回答
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 的定期配置文件(它是一项后台任务:使用非 Paypal 付款方式的 Magento 定期配置文件),并且可以同时结帐名义(又名订阅)和真实产品时间,但它确实使它变得更加复杂。

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

于 2011-06-20T01:39:39.370 回答