我正在尝试找到一种方法,允许将订单拆分为多个送货地址,但将向客户收取的费用作为一次性付款,而不是必须单独为每批 cargo 收费。有没有办法做到这一点?目前,客户被多次收费,对应于他们的“多个订单”,因为 magento 将订单分成许多较小的订单。这是信用卡公司方面的一个问题,因为他们对信用卡的这么多连续收费产生了怀疑。
有任何想法吗?
最佳答案
好吧,我无法提供完整的解决方案,因为老实说,该解决方案需要相当多的时间和测试,但我会提供全面的信息,让您朝着正确的方向前进。
基本上,预先 - 在默认的 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.)如果您需要多个订单,那么 - 这就是它变得令人费解的地方,因为您可以执行以下任一操作的可能性很小:
所以,是的,你们在这里要求很多,所以我能做的最好的就是阐明你可以首先造成严重伤害的地方。我会自己做,但这超出了我的工资等级。
一些额外的指针:
祝你好运!
关于magento - 运送到多个地址,但支付一笔费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488019/