magento - 运送到多个地址,但保留一次付款

时间:2012-02-28 18:59:24

标签: magento shipping

我正在尝试找到一种方法,允许将订单拆分为多个送货地址,但是要将费用作为一次性付款保留给客户,而不是单独为每个货件收取费用。有没有办法做到这一点?目前,由于magento将订单分成许多较小的订单,因此客户多次收费,对应于他们的“多个订单”。这是信用卡公司方面的一个问题,因为他们对卡上的这么多连续费用产生了怀疑。 有什么想法吗?

2 个答案:

答案 0 :(得分:3)

嗯,我不能提供完整的解决方案,因为老实说,解决方案需要花费相当多的时间和测试,但我会提供全面的信息,让您可以朝着正确的方向前进

基本上,提前 - 在默认的Magento中没有选项。

相反,我们将重写一个名为Mage_Checkout_Model_Type_Multishipping的模型。如果您正在使用正确的方式重写模型,请阅读this post by Inchoo

但是如果你很懒惰并且正在寻找一种快速的重写方法,那么请将整个文件app/code/core/Mage/Checkout/Model/Type/Multishipping.php复制到app/code/local/Mage/Checkout/Model/Type/Multishipping.php

完成上述两项中的任何一项后,您可以继续将我们需要的内容重写到此课程中。查看line 498周围的函数:

public function createOrders()
{
    $orderIds = array();
    $this->_validate();
    $shippingAddresses = $this->getQuote()->getAllShippingAddresses();
    $orders = array();

    if ($this->getQuote()->hasVirtualItems()) {
        $shippingAddresses[] = $this->getQuote()->getBillingAddress();
    }

    try {
        foreach ($shippingAddresses as $address) {
            $order = $this->_prepareOrder($address);

            $orders[] = $order;
        ....
        } 

    foreach ($orders as $order) {
            $order->place();
            $order->save();
       ...
    }

    ....

    Mage::dispatchEvent('checkout_submit_all_after', array('orders' => $orders, 'quote' => $this->getQuote()));

        return $this;
    } catch (Exception $e) {
        Mage::dispatchEvent('checkout_multishipping_refund_all', array('orders' => $orders));
        throw $e;
    }
 }

所以我们可以清楚地看到它正在尝试为每个地址创建一个订单然后(最重要的部分),触发由支付模块监控的checkout_submit_all_after事件(订单和报价信息通过所有可用/有效支付模块和报价中设置的支付方法将确定接收调度事件的某个支付模块是否可以处理它。)

考虑到这一点,你现在可以有几个选择:

1。)如果您只能使用一个订单,那么尝试重写createOrders例程,将所有项目再次组合成一个订单->place(),然后传递到dispatchEvent以获得良好的衡量标准。

2。)如果您需要多个订单,那么这就是它变得错综复杂的地方,因为您可以做以下任何一种情况的可能性很小:

  • 首先创建付款,然后将其链接到订单(几乎不可能)
  • 创建订单另一个'组合'订单,您将在其中传递到dispatchEvent。听起来很肮脏和/或错,所以不要打扰吗?

所以是的,你们这些人在这里要求很多,所以我能做的最好的事情就是要先了解一下你可以先造成严重伤害的地方。我自己做,但它高于我的工资等级。

一些额外的指示:

  • 在订单创建后立即注意会话方法,知道他们在哪里领导
  • 还要警惕所有发送的事件。他们都有为什么他们在那里以及他们在哪里。
祝你好运!

答案 1 :(得分:1)

确保启用此选项:

enter image description here

如果我没有弄错,当客户点击一页结帐按钮时,不会向他显示发送到多个地址选项。但如果他点击主结帐按钮就可以了。