信息:Magento 1.7.0.2 CE
我已经制作了一个模块,用于通过cron schedule从外部Feed导入订单,我还创建了一个自定义载体。
一切正常,但我无法设定运费...这是代码:
$shippingAddress = $quote->getShippingAddress()->addData($addressData);
$shippingAddress->setCollectShippingRates(true)->collectShippingRates()
->setShippingMethod('customname_customname')
->setShippingAmount('10')
->setBaseShippingAmount('10');
$quote->collectTotals();
$quote->save();
$ addressData包含客户信息
我尝试过不同的方法,但我无法设定运费。帮助!
这是自定义运营商代码:
protected $_code = 'customname';
/**
* Collect rates for this shipping method based on information in $request
*
* @param Mage_Shipping_Model_Rate_Request $data
* @return Mage_Shipping_Model_Rate_Result
*/
public function collectRates(Mage_Shipping_Model_Rate_Request $request){
$result = Mage::getModel('shipping/rate_result');
$method = Mage::getModel('shipping/rate_result_method');
$method->setCarrier($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod($this->_code);
$method->setMethodTitle($this->getConfigData('name'));
$method->setPrice('0.00');
$method->setCost('0.00');
$result->append($method);
return $result;
}
/**
* Get allowed shipping methods
*
* @return array
*/
public function getAllowedMethods()
{
return array($this->_code=>$this->getConfigData('name'));
}
}
答案 0 :(得分:2)
我使用了另一种解决方案“应该”工作(并将其添加到总计):
卸下:
->setShippingAmount('10')
->setBaseShippingAmount('10');
将以下行添加到添加订单脚本中:
Mage::register('shipping_cost', $shippingPrice);
并且,在您的送货方式中替换以下行:
$method->setPrice('0.00');
$method->setCost('0.00');
使用:
if(Mage::registry('shipping_cost')){
$method->setPrice(Mage::registry('shipping_cost'));
$method->setCost(Mage::registry('shipping_cost'));
} else {
$method->setPrice('0.00');
$method->setCost('0.00');
}
p.s我在Magento 1.6.1,PS中对它进行了测试,您可能还需要从订单obj中删除->setShippingAmount('10')
,否则您将添加税两次
答案 1 :(得分:1)
找到了一些解决方案。
这很简单,只需按照以下顺序添加运费:
$order->setShippingAmount($shippingprice);
$order->setBaseShippingAmount($shippingprice);
现在我有一个新错误,运费不会添加到授权中......
答案 2 :(得分:1)
请检查您的送货模块的collectRates(Mage_Shipping_Model_Rate_Request $ request)方法。检查您的送货总额是如何初始化的。
确保运费总额更新并保存在此方法的$ price变量中。
$handling = Mage::getStoreConfig('carriers/'.$this->_code.'/handling');
$result = Mage::getModel('shipping/rate_result');
$show = true;
if($show){
$method = Mage::getModel('shipping/rate_result_method');
$method->setCarrier($this->_code);
$method->setMethod($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethodTitle($this->getConfigData('name'));
$method->setPrice($price); // Set shipping price here
$method->setCost($price);
$result->append($method);
}else{
$error = Mage::getModel('shipping/rate_result_error');
$error->setCarrier($this->_code);
$error->setCarrierTitle($this->getConfigData('name'));
$error->setErrorMessage($this->getConfigData('specificerrmsg'));
$result->append($error);
}
return $result;
答案 3 :(得分:0)
您可以通过以下代码行更新运费: -
$order = Mage::getModel('sales/order')->load($incrementId, 'increment_id');
$shippingprice = 30;//custom shipping price
$order->setShippingAmount($shippingprice);
$order->setBaseShippingAmount($shippingprice);
$order->setGrandTotal($order->getGrandTotal() + $shippingprice); //adding shipping price to grand total
$order->save();
这对你有帮助。