mic*_*ruf 6 php backend magento
我尝试在Magento(1.5.1.0)的后端创建一个订单.
这是一些代码:
        // Get the product id stored in the optionValue of the widget
        $productId = $order['customIdNumber'];
        // Load the product
        $product = Mage::getModel('catalog/product')->load($productId);
        // Check whether the product could be loaded
        if($product->getId())
        {
            // Get the customer model
            $customer = Mage::getModel('customer/customer');
            // Set the website id associated with the customer
            $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
            // Try to load the customer by email
            $customer->loadByEmail($order['personAddresses'][0]['email']);
            // Check whether the customer not exists
            if(!$customer->getId())
            {
                // Create the customer
                $customer->setEmail($order['personAddresses'][0]['email']);
                $customer->setFirstname($order['personAddresses'][0]['firstName']);
                $customer->setLastname($order['personAddresses'][0]['lastName']);
                $customer->save();
            }
            // Set the esstial order data
            $orderData = array(
                'currency' => $order['currencyCode'],
                'account'  => array(
                    'group_id' => Mage_Customer_Model_Group::NOT_LOGGED_IN_ID,
                    'email'    => $order['personAddresses'][0]['email']
                ),
                'billing_address' => 
                    'firstname'  => $order['personAddresses'][0]['firstName'],
                    'lastname'   => $order['personAddresses'][0]['lastName'],
                    'street'     => $order['personAddresses'][0]['street'],
                    'city'       => $order['personAddresses'][0]['city'],
                    'country_id' => $order['personAddresses'][0]['country'],
                    'region_id'  => 'BW',
                    'postcode'   => $order['personAddresses'][0]['postalCode'],
                    'telephone'  => '0123456789',
                ),
                'comment' => array(
                    'customer_note' => "[Order has been created by the sellaround widget module]\nCustomer message:\n".
                                       $order['personAddresses'][0]['message']
                ),
                'send_confirmation' => false // does that something?
            );
            // Set the shipping address to the billing address
            $orderData['shipping_address'] = $orderData['billing_address'];
            // Set the payment method
            $paymentMethod = 'checkmo';
            // Set the shipping method
            $shippingMethod = 'flatrate_flatrate';
            // Get the backend quote session
            $quoteSession = Mage::getSingleton('adminhtml/session_quote');
            // Set the session store id
            $quoteSession->setStoreId(Mage::app()->getStore('default')->getId());
            // Set the session customer id
            $quoteSession->setCustomerId($customer->getId());
            // Get the backend order create model
            $orderCreate = Mage::getSingleton('adminhtml/sales_order_create');
            // Import the data
            $orderCreate->importPostData($orderData);
            // Calculate the shipping rates
            $orderCreate->collectShippingRates();
            // Set the shipping method
            $orderCreate->setPaymentMethod($paymentMethod);
            // Set the payment method to the payment instance
            $orderCreate->getQuote()->getPayment()->addData(array('method' => $paymentMethod));
            // Set the shipping method
            $orderCreate->setShippingMethod($shippingMethod);
            // Set the quote shipping address shipping method
            $orderCreate->getQuote()->getShippingAddress()->setShippingMethod($shippingMethod);
            // Add the product
            $orderCreate->addProducts(array($product->getId() => array('qty' => 0)));
            // Initialize data for price rules
            $orderCreate->initRuleData();
            // Save the quote
            $orderCreate->saveQuote(); // neccessary?
            // Create the order
            $order = $orderCreate->createOrder();
        }
Run Code Online (Sandbox Code Playgroud)
我总是得到例外'请指定送货方式'.在Mage_Sales_Model_Service_Quote::_validate排队293.
异常行周围的代码:
    $method= $address->getShippingMethod();
    $rate  = $address->getShippingRateByCode($method);
    if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
        Mage::throwException($helper->__('Please specify a shipping method.'));
    }
Run Code Online (Sandbox Code Playgroud)
有人知道我为什么会收到这个错误吗?是因为费率无法加载?(该产品不是虚拟的)
小智 0
我一直在为这个问题绞尽脑汁。通过多种方式,以编程方式创建订单会导致这种情况。我已经通过重写 Mage_Sales_Model_Service_Quote 类的方法 _validate 来绕过这个问题。