Magento: Créer un programme en arrière-plan code
J'essaie de créer une commande dans le backend de Magento (1.5.1.0).
Voici un code:
//Get the product id stored in the optionValue of the widget
$productId = $order['customIdNumber'];
//Load the product
$product = Mage::getModel('catalog/product')->load($productId);
//Check whether the product could be loaded
if($product->getId())
{
//Get the customer model
$customer = Mage::getModel('customer/customer');
//Set the website id associated with the customer
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
//Try to load the customer by email
$customer->loadByEmail($order['personAddresses'][0]['email']);
//Check whether the customer not exists
if(!$customer->getId())
{
//Create the customer
$customer->setEmail($order['personAddresses'][0]['email']);
$customer->setFirstname($order['personAddresses'][0]['firstName']);
$customer->setLastname($order['personAddresses'][0]['lastName']);
$customer->save();
}
//Set the esstial order data
$orderData = array(
'currency' => $order['currencyCode'],
'account' => array(
'group_id' => Mage_Customer_Model_Group::NOT_LOGGED_IN_ID,
'email' => $order['personAddresses'][0]['email']
),
'billing_address' =>
'firstname' => $order['personAddresses'][0]['firstName'],
'lastname' => $order['personAddresses'][0]['lastName'],
'street' => $order['personAddresses'][0]['street'],
'city' => $order['personAddresses'][0]['city'],
'country_id' => $order['personAddresses'][0]['country'],
'region_id' => 'BW',
'postcode' => $order['personAddresses'][0]['postalCode'],
'telephone' => '0123456789',
),
'comment' => array(
'customer_note' => "[Order has been created by the sellaround widget module]\nCustomer message:\n".
$order['personAddresses'][0]['message']
),
'send_confirmation' => false //does that something?
);
//Set the shipping address to the billing address
$orderData['shipping_address'] = $orderData['billing_address'];
//Set the payment method
$paymentMethod = 'checkmo';
//Set the shipping method
$shippingMethod = 'flatrate_flatrate';
//Get the backend quote session
$quoteSession = Mage::getSingleton('adminhtml/session_quote');
//Set the session store id
$quoteSession->setStoreId(Mage::app()->getStore('default')->getId());
//Set the session customer id
$quoteSession->setCustomerId($customer->getId());
//Get the backend order create model
$orderCreate = Mage::getSingleton('adminhtml/sales_order_create');
//Import the data
$orderCreate->importPostData($orderData);
//Calculate the shipping rates
$orderCreate->collectShippingRates();
//Set the shipping method
$orderCreate->setPaymentMethod($paymentMethod);
//Set the payment method to the payment instance
$orderCreate->getQuote()->getPayment()->addData(array('method' => $paymentMethod));
//Set the shipping method
$orderCreate->setShippingMethod($shippingMethod);
//Set the quote shipping address shipping method
$orderCreate->getQuote()->getShippingAddress()->setShippingMethod($shippingMethod);
//Add the product
$orderCreate->addProducts(array($product->getId() => array('qty' => 0)));
//Initialize data for price rules
$orderCreate->initRuleData();
//Save the quote
$orderCreate->saveQuote(); //neccessary?
//Create the order
$order = $orderCreate->createOrder();
}
J'ai toujours de l'exception "s'il vous Plaît spécifier une méthode d'expédition." dans Mage_Sales_Model_Service_Quote::_validate
dans la lignée 293.
Code de l'lignes autour de l'exception:
$method= $address->getShippingMethod();
$rate = $address->getShippingRateByCode($method);
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException($helper->__('Please specify a shipping method.'));
}
Quelqu'un sait pourquoi j'ai cette erreur? Est-ce parce que le taux n'a pas pu être chargé?
(Le produit n'est pas virtuel)
- Je pense que j'ai récemment eu un problème similaire. Regarder le code de Vinai Kopp comment créer un bon de commande par programmation. Sur un premier point de vue, la principale différence concerne le mode d'expédition est qu'il appelle aussi
setCollectShippingRates(true)
avant de recueillir les tarifs d'expédition... Peut-être vous pouvez essayer ce... - J'ai le même problème ici, trop. Toute aide serait très appréciée. thx.
Vous devez vous connecter pour publier un commentaire.
Je résout ce temps plus tôt par à l'aide d'une méthode d'expédition que j'ai créé moi-même.
Le code pour créer l'ordre a également changé depuis le backend singleton un "frontend" méthode " comme ceci:
$quote->collectTotals()->save();
bandes information de carte de crédit de sorte que vous devez définir le numéro de carte de crédit sur le devis juste après cette ou la$service->submitAll()
appel plaindre de la non valide numéros de carte de créditJ'ai été craquage de ma tête autour de ce problème. Dans un certain nombre de façons, par programmation, de la création de l'ordre des résultats dans ce. J'ai réalisé pour contourner ce problème avec un remplacement de la méthode _validate de la classe Mage_Sales_Model_Service_Quote.