Como criar um pedido programaticamente. Código para criar um pedido no Magento 2
<?php
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
// Load customer by id
$customerId = 1; // Customer id
$customer = $objectManager->create('Magento\Customer\Model\Customer')->load($customerId);
// Load product by sku
$productSku = 'sample-sku'; // Product sku
$product = $objectManager->create('Magento\Catalog\Model\Product')->loadByAttribute('sku', $productSku);
// Create order
$orderData = [
'currency_id' => 'USD',
'email' => $customer->getEmail(),
'shipping_address' => [
'firstname' => 'John',
'lastname' => 'Doe',
'street' => '123 Main St',
'city' => 'Anytown',
'country_id'=> 'US',
'region' => 'Florida',
'postcode' => '12345',
'telephone' => '555-555-1212'
],
'items' => [
[
'product_id' => $product->getId(),
'qty' => 1
]
]
];
$objectManager->get('Magento\Checkout\Model\Cart')->truncate();
$cart = $objectManager->create('Magento\Checkout\Model\Cart');
foreach ($orderData['items'] as $item) {
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($item['product_id']);
$cart->addProduct($product, $item);
}
$cart->save();
$customer = $objectManager->create('Magento\Customer\Model\Customer')->load($customerId);
$quote = $objectManager->create('Magento\Quote\Model\Quote')->loadByCustomer($customer);
$billingAddress = $quote->getBillingAddress()->addData($orderData['shipping_address']);
$shippingAddress = $quote->getShippingAddress()->addData($orderData['shipping_address']);
$shippingAddress->setCollectShippingRates(true)->collectShippingRates()->setShippingMethod('flatrate_flatrate');
$quote->setPaymentMethod('checkmo');
$quote->setInventoryProcessed(false);
$quote->save();
$quote->getPayment()->importData(['method' => 'checkmo']);
$quote->collectTotals();
$quote->save();
$order = $objectManager->create('Magento\Quote\Model\QuoteManagement')->submit($quote);
$order->setEmailSent(0);
$order->save();
echo 'Order Id: ' . $order->getIncrementId() . ' has been created successfully!';
Esse código carrega um cliente e um produto por seus respectivos IDs ou SKUs, cria uma matriz de dados do pedido com informações como moeda, e-mail e endereço de entrega, adiciona o produto ao carrinho e cria um pedido com o método submit().
Observe que o código acima é apenas um exemplo e você deve modificá-lo para atender às suas necessidades específicas. Além disso, vale a pena mencionar que a criação de pedidos programaticamente pode ser complexa e deve ser feita com cuidado.