【问题标题】:Magento Order Creation Programatically only working on one shipping methodMagento 订单创建以编程方式仅适用于一种运输方式
【发布时间】:2016-07-14 22:13:05
【问题描述】:

我使用下面的代码作为脚本的一部分以编程方式创建 Magento 订单。当我使用

时脚本运行良好

freeshipping_freeshipping

作为运输方式。但是,当我选择任何其他运输方式(例如自定义运输方式、flatrate_flatrate 或 usps_1 等)时,它会给我错误:

“请指定送货方式”

我到处搜索,但找不到解决方案。任何帮助将不胜感激,谢谢。

$shippingAddress->setCollectShippingRates(true)->collectShippingRates()
    ->setShippingMethod($shipping_method);

编辑:

我让它适用于非美国订单的 flatrate 以及美国和非美国订单的扩展 freeadminshipping。但是,仍然无法使用任何 UPS 或 USPS 运输方式。

【问题讨论】:

    标签: php api magento exception shipping


    【解决方案1】:

    这个方法创建订单,我在我的项目中使用它。请在您的代码中删除运输方式设置代码并尝试我希望这对您有用。否则你可以在我的代码下面使用。

    public function createOrderAction($paymentMethod) {
        try {
        $checkout_session = Mage::getSingleton('checkout/session');
        $cq = $checkout_session->getQuote();
        $cq->assignCustomer(Mage::getSingleton('customer/session')->getCustomer());
        $quoteObj = Mage::getModel('sales/quote')->load($checkout_session->getQuoteId()); // Mage_Sales_Model_Quote
        //Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()
    
        $items = $quoteObj->getAllItems();                  
    
        $quoteObj->reserveOrderId();
    
          // set payment method 
    
        $quotePaymentObj = $quoteObj->getPayment(); // Mage_Sales_Model_Quote_Payment
        $quotePaymentObj->setMethod($paymentMethod);
    
        $quoteObj->setPayment($quotePaymentObj);
    
    
        // convert quote to order
        $convertQuoteObj = Mage::getSingleton('sales/convert_quote');
    
        $quoteObj->setShippingAddress($cq->getShippingAddress());
        $quoteObj->setBillingAddress($cq->getBillingAddress());
        $orderObj = $convertQuoteObj->addressToOrder($quoteObj->getShippingAddress());
    
        $orderPaymentObj = $convertQuoteObj->paymentToOrderPayment($quotePaymentObj);
    
    
        // convert quote addresses
        $orderObj->setBillingAddress($convertQuoteObj->addressToOrderAddress($quoteObj->getBillingAddress()));
    
        $orderObj->setShippingAddress($convertQuoteObj->addressToOrderAddress($quoteObj->getShippingAddress()));
    
        // set payment options
        $orderObj->setPayment($convertQuoteObj->paymentToOrderPayment($quoteObj->getPayment()));
    
        // convert quote items
        foreach ($items as $item) {
            // @var $item Mage_Sales_Model_Quote_Item
            $orderItem = $convertQuoteObj->itemToOrderItem($item);
            $orderItem->setWholesaler($item->getWholesaler());
            $orderItem->setComment($item->getComment());
            $options = array();
            if ($productOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct())) {
                $options = $productOptions;
            }
            if ($addOptions = $item->getOptionByCode('additional_options')) {
                $options['additional_options'] = unserialize($addOptions->getValue());
            }
            if ($options) {
                $orderItem->setProductOptions($options);
            }
            if ($item->getParentItem()) {
                $orderItem->setParentItem($orderObj->getItemByQuoteItemId($item->getParentItem()->getId()));
            }
            $orderObj->addItem($orderItem);
        }
            $orderObj->setCanShipPartiallyItem(false);
            $orderObj->place();
            $quoteObj->setIsActive(0)->save();
            $orderObj->save(); 
            $orderObj->sendNewOrderEmail(); 
            return $orderObj->getId();
        } catch (Exception $e){     
            Mage::log($e->getMessage());
            Mage::log($e->getTraceAsString());
        }
    }
    

    【讨论】:

    • 您好 Sunny,感谢您的回答。我在 API 文件中使用订单创建,该文件将接收产品项目、付款数据和运输方式来创建订单。我没有使用结帐会话,而是使用sales/service_quote 创建订单。我无法在您的代码中找到送货方式的设置位置,因为我还需要为此向客户收费。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2016-01-12
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多