gpt4 book ai didi

php - Magento:在后端代码中以编程方式创建订单

转载 作者:可可西里 更新时间:2023-11-01 13:28:50 25 4
gpt4 key购买 nike

我尝试在 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();
}

我总是收到“请指定运输方式”的异常(exception)情况。在第 293 行的 Mage_Sales_Model_Service_Quote::_validate 中。

异常周围的代码:

    $method= $address->getShippingMethod();
$rate = $address->getShippingRateByCode($method);
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException($helper->__('Please specify a shipping method.'));
}

有人知道我为什么会收到这个错误吗?是因为无法加载速率吗?(产品不是虚拟的)

最佳答案

我以前使用自己创建的运输方式解决了这个问题。

创建订单的代码也从后端单例更改为“前端方法”,如下所示:

// Get the Quote to save the order
$quote = Mage::getModel('sales/quote')->setStoreId($storeId);

// Set the customer
$quote->setCustomer($customer);

// Add the product with the product options
$quote->addProduct($product, new Varien_Object($productOptions));

// Add the address data to the billing address
$billingAddress = $quote->getBillingAddress()->addData($addressData);

// Add the adress data to the shipping address
$shippingAddress = $quote->getShippingAddress()->addData($addressData);

// Collect the shipping rates
$shippingAddress->setCollectShippingRates(true)->collectShippingRates();

// Set the shipping method /////////// Here i set my own shipping method
$shippingAddress->setShippingMethod($shippingMethod);

// Set the payment method
$shippingAddress->setPaymentMethod($paymentMethod);

// Set the payment method
$quote->getPayment()->importData(array('method' => $paymentMethod));

// Collect the prices
$quote->collectTotals()->save();

// Get the service to submit the order
$service = Mage::getModel('sales/service_quote', $quote);

// Submit the order
$service->submitAll();

// Get the new order
$newOrder = $service->getOrder();


// Get payment instance
$payment = $newOrder->getPayment();

// Set the buyer data
$this->_importPaymentInformation($payment, $order);

// Set the transaction data
$payment->setData('last_trans_id', $order['transNrPurchaseForReceiver']);

// Save the payment changes
$payment->save();

// Set the order state and save the order
$newOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, $comment)->save();

关于php - Magento:在后端代码中以编程方式创建订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6708728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com