A volte abbiamo bisogno di creare ordini in modo programmatico in Magento. Supponiamo che tu stia creando un plugin Magento per il tuo negozio per collegarlo al mercato come Walmart o Etsy.
Passi coinvolti nella creazione dell'ordine:
- Definiremo i dati dei clienti come nome, cognome, email.
- Definire l'indirizzo di spedizione e fatturazione del cliente.
- Definire il metodo di spedizione e di pagamento del cliente.
- Definisci il prodotto e la quantità che deve essere ordinata sul nostro negozio Magento.
- Crea un cliente se il cliente non esiste nel nostro negozio Magento. È un passaggio facoltativo.
- Aggiungi prodotto alla quotazione del cliente.
- Aggiungi l'indirizzo di spedizione e fatturazione al preventivo del cliente.
- Preparare e salvare le quotazioni del cliente.
- L'ordine viene creato sul tuo negozio Magento.
Uso
$ _store = Mage :: app () -> getStore (); $ _website = Mage :: app () -> getWebsite (); $ _firstName = John '; $ _lastName = 'doe; $ _email = 'demo@demo.com'; / * * Indirizzo di fatturazione personalizzato * / $ billingAddress = array ('customer_address_id' => '', 'prefix' => '', 'firstname' => $ _firstName, 'middlename' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Sector 63', // Obbligatorio '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // codice paese 'regione' => 'UP', 'region_id' => '', 'codice postale' => '201301', ' telefono '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / * * Indirizzo di spedizione personalizzato * / $ shippingAddress = array ('customer_address_id' => '', 'prefix' => '', 'firstname' => $ _firstName, 'middlename' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Sector 63', // Obbligatorio '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // codice paese 'regione' => 'UP', 'region_id' => '', 'codice postale' => '201301', ' telefono '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / ** * Immettere il metodo di spedizione che si desidera utilizzare. Alcuni degli altri metodi di spedizione * sono tablerate_tablerate, freeshipping_freeshipping ecc. * Qui stiamo usando flatrate_flatate * / $ _shippingMethod = 'flatrate_flatate'; / ** * Immettere il metodo di pagamento che si desidera utilizzare. Alcuni dei metodi di pagamento dell'ordine * sono checkmo, gratuito, bonifico bancario, risparmio, ordine di acquisto, ecc. * / $ _paymentMethod = 'cashondelivery'; / ** * Fornire una serie di prodotti e la loro quantità. * $ array = array (product_id => qty) * / $ productIds = array (905 => 1); $ quote = Mage :: getModel ('vendite / quote') -> setStoreId ($ _ store-> getId ()); $ Citazione-> setCurrency (Mage :: app () -> getStore () -> getBaseCurrencyCode ()); $ customer = Mage :: getModel ('cliente / cliente') -> setWebsiteId ($ _ website-> getId ()) -> loadByEmail ($ _ email); / ** * Preparazione del cliente per il preventivo * se il cliente non è registrato, creeremo un nuovo cliente. Questo è * un processo facoltativo. * / if (! $ customer-> getId ()) {$ customer = Mage :: getModel ('cliente / cliente'); $ customer-> setWebsiteId ($ _ website-> getId ()) -> setStore ($ _ store) -> setFirstname ($ _ firstName) -> setLastname ($ _ lastName) -> setEmail ($ _ email); / ** * Creazione di un nuovo cliente * Salta try-catch se non vuoi creare un nuovo cliente. * / prova {// Generare la password per il cliente. Puoi anche usare qualsiasi password // personalizzata per questo. $_store = Mage::app()->getStore(); $_website = Mage::app()->getWebsite(); $_firstName = John'; $_lastName = 'doe; $_email = 'demo@demo.com'; /* * Custom billing address */ $billingAddress = array( 'customer_address_id' => '', 'prefix' => '', 'firstname' => $_firstName, 'middlename' => '', 'lastname' => $_lastName, 'suffix' => '', 'company' => '', 'street' => array( '0' => 'Sector 63', // Required '1' => 'Noida, UP' ), 'city' => 'Noida', 'country_id' => 'IN', // Country code 'region' => 'UP', 'region_id' => '', 'postcode' => '201301', 'telephone' => '888-888-8888', 'fax' => '', 'save_in_address_book' => 1 ); /* * Custom shipping address */ $shippingAddress = array( 'customer_address_id' => '', 'prefix' => '', 'firstname' => $_firstName, 'middlename' => '', 'lastname' => $_lastName, 'suffix' => '', 'company' => '', 'street' => array( '0' => 'Sector 63', // Required '1' => 'Noida, UP' ), 'city' => 'Noida', 'country_id' => 'IN', // Country code 'region' => 'UP', 'region_id' => '', 'postcode' => '201301', 'telephone' => '888-888-8888', 'fax' => '', 'save_in_address_book' => 1 ); /** * Enter the shipping method you want to use. Some of the other shipping * methods are tablerate_tablerate, freeshipping_freeshipping etc. * Here we are using flatrate_flatrate */ $_shippingMethod = 'flatrate_flatrate'; /** * Enter the payment method you want to use. Some of the order payment *methods are checkmo, free, banktransfer, ccsave, purchaseorder etc. */ $_paymentMethod = 'cashondelivery'; /** * Provide array of product and their qty. * $array = array(product_id => qty) */ $productIds = array(905 => 1); $quote = Mage::getModel('sales/quote') ->setStoreId($_store->getId()); $quote->setCurrency(Mage::app()->getStore()->getBaseCurrencyCode()); $customer = Mage::getModel('customer/customer') ->setWebsiteId($_website->getId()) ->loadByEmail($_email); /** * Preparing customer for the quote * if the customer is not registered then we will create a new customer. This is *an optional process. */ if (!$customer->getId()) { $customer = Mage::getModel('customer/customer'); $customer->setWebsiteId($_website->getId()) ->setStore($_store) ->setFirstname($_firstName) ->setLastname($_lastName) ->setEmail($_email); /** * Creating new customer * Skip try-catch if you don't want to create a new customer. */ try { // Generating password for customer. You can also use any custom // password for it. $password = $customer->generatePassword(); $customer->setPassword($password); $customer->setForceConfirmed(true); $customer->save(); $customer->setConfirmation(null); $customer->save(); $customerId = $customer->getId(); $customAddress = Mage::getModel('customer/address'); $customAddress->setData($billingAddress) ->setCustomerId($customerId) ->setIsDefaultBilling('1') ->setIsDefaultShipping('1') ->setSaveInAddressBook('1'); $customAddress->save(); } catch (Mage_Core_Exception $e) { Mage::getSingleton('customer/session')->addException($e, $this- >__('Error in creating customer')); Mage::logException($e); } catch (Exception $e) { Mage::getSingleton('customer/session')->addException($e, $this- >__('Error in creating customer')); Mage::logException($e); } } // Assign customer to quote $quote->assignCustomer($customer); // Add products to quote foreach ($productIds as $productId => $qty) { $product = Mage::getModel('catalog/product')->load($productId); $quote->addProduct($product, $qty); } // Add billing address to quote $_billingAddressData = $quote->getBillingAddress()- >addData($billingAddress); // Add shipping address to quote $_shippingAddressData = $quote->getShippingAddress()- >addData($shippingAddress); /** * If the customer is a registered customer then you can fetch their billing or *shipping address as below * * $_customerBillingAddress = $customer->getPrimaryBillingAddress(); * $_customerShippingAddress = $customer->getPrimaryShippingAddress(); * * $_billingAddressData = $quote->getBillingAddress()- >addData($_customerBillingAddress); * $_shippingAddressData = $quote->getShippingAddress()- >addData($_customerShippingAddress); */ // Collect shipping rates on quote shipping address data $_shippingAddressData->setCollectShippingRates(true) ->collectShippingRates(); // Set shipping and payment method on quote shipping address data $_shippingAddressData->setShippingMethod($_shippingMethod) ->setPaymentMethod($_paymentMethod); // Set payment method for the quote $quote->getPayment()->importData(array('method' => $_paymentMethod)); try { $quote->collectTotals(); $quote->save(); // Preparing Order From Quote $service = Mage::getModel('sales/service_quote', $quote); $service->submitAll(); // $incrementId is the increment id of the order created. $incrementId = $service->getOrder()->getRealOrderId(); Mage::getSingleton('checkout/session') ->setLastQuoteId($quote->getId()) ->setLastSuccessQuoteId($quote->getId()) ->clearHelperData(); /* * $response is the Array of the response with the status of the order creation. */ $response['success'] = true; $response['error'] = false; $response['messages'] = 'Order number '.$incrementId.' created successfully.'; } catch (Mage_Core_Exception $e) { $response['success'] = false; $response['error'] = true; $response['messages'] = $e->getMessage(); Mage::logException($e); } catch (Exception $e) { $response['success'] = false; $response['error'] = true; $response['messages'] = $this->__('Error in processing order. Please try again later.'); Mage::logException($e); } Mage::app()->getResponse()->setBody(Mage::helper('core')- >jsonEncode($response)); $ incrementId = $ service-> getOrder () -> getRealOrderId (); Mage :: getSingleton ('checkout / session') -> setLastQuoteId ($ quote-> getId ()) -> setLastSuccessQuoteId ($ quote-> getId ()) -> clearHelperData (); / * * $ response è la matrice della risposta con lo stato della creazione dell'ordine. * / $ response ['success'] = true; $ response ['error'] = false; $ response ['messages'] = 'Numero ordine'. $ incrementId. ' creato con successo. '; } catch (Mage_Core_Exception $ e) {$ response ['success'] = false; $ response ['error'] = true; $ response ['messages'] = $ e-> getMessage (); Mage :: LogException ($ e); } catch (Exception $ e) {$ response ['success'] = false; $ response ['error'] = true; $ response ['messages'] = $ this -> __ ('Errore nell'elaborazione dell'ordine. Per favore riprova più tardi.'); Mage :: LogException ($ e); } Mage :: app () -> getResponse () -> setBody (Mage :: helper ('core') -> jsonEncode ($ response));
Si prega di passare attraverso il codice di cui sopra