2016-07-14 2 views
0

J'utilise le code ci-dessous dans le cadre d'un script pour créer des commandes Magento par programmation. Le script fonctionne correctement lorsque j'utiliseCréation de commande Magento Programmation uniquement avec un seul mode de livraison

freeshipping_freeshipping

comme méthode d'expédition. Cependant, lorsque je choisis toute autre méthode d'expédition, comme une méthode d'expédition personnalisée, flatrate_flatrate ou usps_1 e.t.c, il me donne l'erreur:

"Please Specify a shipping method"

J'ai cherché partout, mais n'a pas pu trouver une solution. Toute aide serait grandement appréciée, merci.

$shippingAddress->setCollectShippingRates(true)->collectShippingRates() 
    ->setShippingMethod($shipping_method); 

Edit:

Je l'ai à travailler avec flatrate pour les ordres des États-Unis et une extension freeadminshipping sur les deux Etats-Unis et les commandes non américaines. Cependant, toujours incapable d'utiliser l'une des méthodes d'expédition UPS ou USPS.

Répondre

0

Cette méthode crée une commande et j'ai utilisé ceci dans mon projet. Dans votre code s'il vous plaît supprimer le code d'ensemble de la méthode d'expédition et essayez J'espère que cela fonctionne bien pour vous. sinon vous pouvez utiliser ci-dessous mon code.

public function createOrderAction($paymentMethod) { 
    try { 
    $checkout_session = Mage::getSingleton('checkout/session'); 
    $cq = $checkout_session->getQuote(); 
    $cq->assignCustomer(Mage::getSingleton('customer/session')->getCustomer()); 
    $quoteObj = Mage::getModel('sales/quote')->load($checkout_session->getQuoteId()); // Mage_Sales_Model_Quote 
    //Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress() 

    $items = $quoteObj->getAllItems();     

    $quoteObj->reserveOrderId(); 

     // set payment method 

    $quotePaymentObj = $quoteObj->getPayment(); // Mage_Sales_Model_Quote_Payment 
    $quotePaymentObj->setMethod($paymentMethod); 

    $quoteObj->setPayment($quotePaymentObj); 


    // convert quote to order 
    $convertQuoteObj = Mage::getSingleton('sales/convert_quote'); 

    $quoteObj->setShippingAddress($cq->getShippingAddress()); 
    $quoteObj->setBillingAddress($cq->getBillingAddress()); 
    $orderObj = $convertQuoteObj->addressToOrder($quoteObj->getShippingAddress()); 

    $orderPaymentObj = $convertQuoteObj->paymentToOrderPayment($quotePaymentObj); 


    // convert quote addresses 
    $orderObj->setBillingAddress($convertQuoteObj->addressToOrderAddress($quoteObj->getBillingAddress())); 

    $orderObj->setShippingAddress($convertQuoteObj->addressToOrderAddress($quoteObj->getShippingAddress())); 

    // set payment options 
    $orderObj->setPayment($convertQuoteObj->paymentToOrderPayment($quoteObj->getPayment())); 

    // convert quote items 
    foreach ($items as $item) { 
     // @var $item Mage_Sales_Model_Quote_Item 
     $orderItem = $convertQuoteObj->itemToOrderItem($item); 
     $orderItem->setWholesaler($item->getWholesaler()); 
     $orderItem->setComment($item->getComment()); 
     $options = array(); 
     if ($productOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct())) { 
      $options = $productOptions; 
     } 
     if ($addOptions = $item->getOptionByCode('additional_options')) { 
      $options['additional_options'] = unserialize($addOptions->getValue()); 
     } 
     if ($options) { 
      $orderItem->setProductOptions($options); 
     } 
     if ($item->getParentItem()) { 
      $orderItem->setParentItem($orderObj->getItemByQuoteItemId($item->getParentItem()->getId())); 
     } 
     $orderObj->addItem($orderItem); 
    } 
     $orderObj->setCanShipPartiallyItem(false); 
     $orderObj->place(); 
     $quoteObj->setIsActive(0)->save(); 
     $orderObj->save(); 
     $orderObj->sendNewOrderEmail(); 
     return $orderObj->getId(); 
    } catch (Exception $e){  
     Mage::log($e->getMessage()); 
     Mage::log($e->getTraceAsString()); 
    } 
} 
+0

Salut Sunny, merci pour votre réponse. J'utilise la création de commande dans un fichier API qui recevra les articles du produit, les données de paiement et la méthode d'expédition pour créer la commande. Je n'utilise pas la session de caisse, en utilisant plutôt 'sales/service_quote' pour créer la commande. Je ne suis pas en mesure de trouver où la méthode d'expédition est définie dans votre code, car je dois facturer le client pour cela aussi. –