magento - 运送到多个地址,但支付一笔费用

标签 magento shipping

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

最佳答案

好吧,我无法提供完整的解决方案,因为老实说,该解决方案需要相当多的时间和测试,但我会提供全面的信息,让您朝着正确的方向前进。

基本上,预先 - 在默认的 Magento 中没有执行此操作的选项。

因此,我们将改写一个名为 Mage_Checkout_Model_Type_Multishipping 的模型。 .如果您对重写模型有正确的认识,请阅读 this post by Inchoo .

但是,如果您懒惰并正在寻找一种快速重写的方法,那么请复制整个文件app/code/core/Mage/Checkout/Model/Type/Multishipping.phpapp/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 的订单和另一个“组合”订单。听起来肮脏和/或错误,所以不要打扰也许?

  • 所以,是的,你们在这里要求很多,所以我能做的最好的就是阐明你可以首先造成严重伤害的地方。我会自己做,但这超出了我的工资等级。

    一些额外的指针:
  • 在订单创建后立即注意 session 方法,也知道它们的方向
  • 还要警惕所有发送的事件。他们都有一个目的,为什么他们在那里以及他们在哪里。

  • 祝你好运!

    关于magento - 运送到多个地址,但支付一笔费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488019/

    相关文章:

    api - 需要知道 Shopify 的 API 中 UPS Standard 的具体运输方式代码

    php - Magento - OnePage Checkout - 根据运输方式隐藏付款方式

    shipping - 按时交付软件的最佳实践

    javascript - 表单提交后 Magento 电子邮件成功消息返回空白页

    php - 为什么 Magento 在保存类别后只保留类别中的前 1000 个产品?

    magento - 通过简单的产品 URL 预选可配置的产品选项

    Magento:以编程方式检测现场/生产站点

    php - 如何检查 Magento 中特定代码执行的所有查询

    language-agnostic - 出货前重构还是出货后重构?