Magento设置以编程方式创建订单时的运输成本

时间:2013-06-25 09:30:22

标签: magento

信息: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'));
    }
}  

4 个答案:

答案 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();

这对你有帮助。