Today, we’re going to teach you guys how to create order programmatically in Magento 2.
Learning how to create order programmatically in Magento 2 is very helpful for store owners because the manual process is quite a time-consuming process.
However, in order to create order programmatically in Magento 2, we need to first create a quote.
Below are the steps you need to follow to create a quote and order programmatically in Magento 2.
Step-by-Step Process to Create Order Programmatically in Magento 2
First of all, we’ll use the following sample data to create both quote and order in Magento 2.
<?php $order = [ 'currency_id' => 'USD', 'email' => '[email protected]', 'shipping_address' => ['firstname' => 'John', 'lastname' => 'Green', 'street' => 'xxxxxx', 'city' => 'xxxxxxx', 'country_id' => 'US', 'region' => 'xxxxx', 'postcode' => '85001', 'telephone' => '52556542', 'fax' => '3242322556', 'save_in_address_book' => 1], 'items' => [ ['product_id' => '1', 'qty' => 1], ['product_id' => '2', 'qty' => 2]] ]; ?>
After that, we now need to create a function in the module helper file as shown below:
<?php namespaceYourNameSpace\ModuleName\Helper; use Magento\Framework\App\Helper\AbstractHelper; class Data extends AbstractHelper { public function __construct(\Magento\Framework\App\Helper\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product $product, \Magento\Framework\Data\Form\FormKey $formkey, \Magento\Quote\Model\QuoteFactory $quote, \Magento\Quote\Model\QuoteManagement $quoteManagement, \Magento\Customer\Model\CustomerFactory $customerFactory, \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository, \Magento\Sales\Model\Service\OrderService $orderService) { $this->storeManager = $storeManager; $this->product = $product; $this->formkey = $formkey; $this->quote = $quote; $this->quoteManagement = $quoteManagement; $this->customerFactory = $customerFactory; $this->customerRepository = $customerRepository; $this->orderService = $orderService; parent::__construct($context); } public function createOrder($order) { $store = $this->storeManager->getStore(); $websiteId = $this->storeManager->getStore()->getWebsiteId(); $customer = $this->customerFactory->create(); $customer->setWebsiteId($websiteId); $customer->loadByEmail($order['email']); // load customet by email address if (!$customer->getEntityId()) { //If not avilable then create this customer $customer->setWebsiteId($websiteId)->setStore($store)->setFirstname($order['shipping_address']['firstname'])->setLastname($order['shipping_address']['lastname'])->setEmail($order['email'])->setPassword($order['email']); $customer->save(); } $quote = $this->quote->create(); // Create Quote Object $quote->setStore($store); // Set Store $customer = $this->customerRepository->getById($customer->getEntityId()); $quote->setCurrency(); $quote->assignCustomer($customer); // Assign quote to Customer //add items in quote foreach ($order['items'] as $item) { $product = $this->product->load($item['product_id']); $product->setPrice($item['price']); $quote->addProduct($product, intval($item['qty'])); } $quote->getBillingAddress()->addData($order['shipping_address']); $quote->getShippingAddress()->addData($order['shipping_address']); // Collect Rates and Set Shipping & Payment Method $shippingAddress = $quote->getShippingAddress(); $shippingAddress->setCollectShippingRates(true)->collectShippingRates()->setShippingMethod('freeshipping_freeshipping'); $quote->setPaymentMethod('checkmo'); $quote->setInventoryProcessed(false); $quote->save(); // Set Sales Order Payment $quote->getPayment()->importData(['method' => 'checkmo']); // Collect Totals & Save Quote $quote->collectTotals()->save(); // Create Order From Quote $orderdata = $this->quoteManagement->submit($quote); $orderdata->setEmailSent(0); $increment_id = $order->getRealOrderId(); if ($orderdata->getEntityId()) { $result['order_id'] = $orderdata->getRealOrderId(); } else { $result = ['error' => 1, 'msg' => 'Your custom message']; } return $result; } } ?>
And that’s about it!
Conclusion
This is all you need to do to create a quote & order programmatically in Magento 2.
And if you need our professional assistance, feel free to contact us at any time.