php magento -航运到多个地址,但保持支付一项费用

ijxebb2r  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(120)

我试图找到一种方法,允许订单被分割为多个送货地址,但保持对客户的收费作为一次性付款,而不是必须为每一次发货单独收费。有没有办法做到这一点?目前,客户被多次收费,对应于他们的“多个订单”,因为magento把订单分成了很多小订单。这是信用卡公司方面的问题,因为他们开始怀疑这么多连续的收费到卡上。有什么想法吗?

afdcj2ne

afdcj2ne1#

嗯,我不能提供完整的解决方案,因为老实说,解决方案将需要相当多的时间和测试,但我会提供全面的信息,可以你到正确的方向,而不是。
基本上,预先--在默认的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。听起来肮脏和/或错误,所以不要麻烦也许?

所以,是的,你们在这里几乎要求很多,所以我能做的就是阐明你可以首先造成严重破坏的地方。我想自己做,但这超出了我的工资等级。
一些附加提示:

  • 注意订单创建后的会话方法,了解它们的作用
  • 还要警惕所有被派遣的事件,它们都有一个目的,为什么在那里,在哪里。

祝你好运!

fbcarpbf

fbcarpbf2#

确保已启用此选项:

如果我没记错的话,当客户点击一个页面结帐按钮,船舶到多个地址选项不会显示给他。但如果他点击主结帐按钮,它会。

相关问题