Comment créer des commandes par programme dans Magento?

Parfois, nous devons créer des commandes par programme dans Magento. Supposons que vous créez un plugin Magento pour votre magasin afin de le connecter au marché tel que Walmart ou Etsy.

Les étapes de la création de l'ordre:

  • Nous définirons les données du client comme le prénom, le nom de famille et l'adresse électronique.
  • Définissez l'adresse de livraison et de facturation du client.
  • Définir la méthode d'expédition et de paiement du client.
  • Définissez le produit et la quantité à commander dans notre magasin Magento.
  • Créez un client s'il n'existe pas dans notre magasin Magento. C'est une étape optionnelle.
  • Ajouter le produit à la citation du client.
  • Ajoutez l'adresse de livraison et de facturation au devis du client.
  • Préparer et enregistrer le devis du client.
  • La commande est créée sur votre boutique Magento.

Utilisation

         $ _store = Mage :: app () -> getStore (); $ _website = Mage :: app () -> getWebsite (); $ _firstName = John '; $ _lastName = 'doe; $ _email = 'demo@demo.com'; / * * Adresse de facturation personnalisée * / $ billingAddress = array ('customer_address_id' => '', 'prefix' => '', 'prenom' => $ _firstName, 'middlename' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Secteur 63', // Obligatoire '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // code du pays 'région' => 'UP', 'region_id' => '', 'code postal' => '201301', ' téléphone '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / * * Adresse de livraison personnalisée * / $ shippingAddress = array ('customer_address_id' => '', 'prefix' => '', 'prenom' => $ _firstName, 'pseudonyme' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Secteur 63', // Obligatoire '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // code du pays 'région' => 'UP', 'region_id' => '', 'code postal' => '201301', ' téléphone '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / ** * Entrez le mode d'expédition que vous souhaitez utiliser. Certaines des autres méthodes d'expédition * sont tablerate_tablerate, freeshipping_freeshipping, etc. * Nous utilisons ici flatrate_flatrate * / $ _shippingMethod = 'flatrate_flatrate'; / ** * Entrez le mode de paiement que vous souhaitez utiliser. Certains modes de paiement * sont les suivants: checkmo, gratuit, virement bancaire, ccsave, orderorder, etc. * / $ _paymentMethod = 'cashondelivery'; / ** * Fournir une gamme de produits et leur quantité. * $ 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 ('client / client') -> setWebsiteId ($ _ site web-> getId ()) -> loadByEmail ($ _ email); / ** * Préparation du client pour le devis * Si le client n'est pas enregistré, nous créerons un nouveau client. C'est * un processus optionnel. * / if (! $ customer-> getId ()) {$ customer = Mage :: getModel ('client / client'); $ customer-> setWebsiteId ($ _site-> getId ()) -> setStore ($ _ store) -> setFirstname ($ _ firstName) -> setLastname ($ _ lastName) -> setEmail ($ _ email); / ** * Création d'un nouveau client * Sautez try-catch si vous ne voulez pas créer un nouveau client. * / try {// Génération du mot de passe pour le client. Vous pouvez également utiliser n'importe quel // mot de passe personnalisé pour cela. $_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 est le tableau de la réponse avec le statut de la création de la commande. * / $ response ['success'] = true; $ response ['error'] = false; $ response ['messages'] = 'Numéro de commande'. $ incrementId. ' créé avec succès. '; } 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 -> __ ('Erreur lors du traitement de la commande. Veuillez réessayer plus tard.'); Mage :: logException ($ e); } Mage :: app () -> getResponse () -> setBody (Mage :: helper ('noyau') -> jsonEncode ($ réponse));

S'il vous plaît passer par le code mentionné ci-dessus


Prashant Kumar

Prashant Kumar

Prashant is a passionate Magento developer. He loves exploring e-commerce and reading books.

Leave a Reply

Your email address will not be published. Required fields are marked *