4

我创建了一个自定义模块来为客户提供一些折扣费用。我已参考此链接为客户费用折扣创建自定义模块。

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

我的问题是订单小计和总计未反映在 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;

    }

}

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

我需要使用贝宝行项目添加折扣费用,并且将正确计算小计。

任何帮助非常感谢。

谢谢。

4

2 回答 2

3

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

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

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

于 2013-04-14T06:27:59.217 回答
1

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

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;
    }
}
于 2015-08-23T16:09:44.890 回答