【问题标题】:Magento Observer for paypal_prepare_line_items to Adding New Item with paypal and Sub Total Deductions用于 paypal_prepare_line_items 的 Magento 观察者使用 paypal 和 Sub Total Deductions 添加新项目
【发布时间】:2013-01-22 14:28:04
【问题描述】:

我创建了一个自定义模块来为客户提供一些折扣费用。 我已推荐此link 为客户费用折扣创建自定义模块。

在这种情况下,当客户有自己的折扣点时,他们将应用购物车页面中的折扣点来减少小计和总计。更改在购物车和结帐页面等中运行良好。

我的问题是订单小计和总计未反映在 Paypal 支付网关行项目中。

因此,我编写了 Event Observer 以使用 Sub total 减去折扣费用并将新行添加到 paypal 行项目。

下面的代码我尝试为折扣费用和小计扣除添加新行

<events>
        <paypal_prepare_line_items>
                <observers>
                    <modulename>
                        <type>singleton</type>
                        <class>modulename/observer</class>
                        <method>prepareItems</method>
                    </modulename>
                </observers>
         </paypal_prepare_line_items>
</events>

而观察者核心是

<?php 
class Mycompany_Modulename_Model_Observer extends Mage_Core_Model_Abstract
{
    const TOTAL_FEE = 'Fee';
    const TOTAL_SUBTOTAL = 'subtotal';

    public function prepareItems($observer)
    {   
        $cart = $observer->getPaypalCart();

        if($cart->getSalesEntity()->getFeeAmount())
        {

            $name = 'Custom Discount';
            $qty = '1';
            $amount = -1.00 * $cart->getSalesEntity()->getFeeAmount();
            $identifier = NULL;

            $cart->_shouldRender = true;

            $item = new Varien_Object(array(
                'name'   => $name,
                'qty'    => $qty,
                'amount' => (float)$amount,
            ));

            $cart->_items[] = $item;

            $cart->updateTotal();

        }

        return;

    }

}

谁能指出我正确的解决方案?

我需要在 paypal 行项目中添加折扣费用,并且会正确计算小计。

任何帮助非常感谢。

谢谢。

【问题讨论】:

    标签: magento


    【解决方案1】:

    你可能已经想通了。 但你不能做你正在尝试的事情,我不认为你可以访问_items。而是这样做:

    $cart->addItem($name, $qty, $amount);

    我认为不需要调用 updateTotal,我已经完成了前面的操作,并且金额已添加到 Paypal 标准方法的总金额中。我还没有测试过使用 API 而不是简单表单的其他方法。

    【讨论】:

      【解决方案2】:

      这是应该解决您的问题的观察者类代码:

      class Mycompany_Modulename_Model_Observer
      {
          public function prepareItems(Varien_Event_Observer $observer)
          {        
              $label = SOME_LABEL;
              $qty = SOME_QTY;
              $feeAmount = SOME_FEE_AMOUNT;
              $itemNumber = SOME_IDENTIFIER_OR_SKU;
      
              /* @var $cart Mage_Paypal_Model_Cart */
              $cart = $observer->getEvent()->getPaypalCart();
      
              $cart->addItem($label, $qty, $feeAmount, $itemNumber);
      
              return $this;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 2011-03-10
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多