Товар имеет цену за 0,00 доллара в корзину при создании программного заказа
Вопрос
Так что я пытаюсь создать заказ программно в Magento 1.12 EE.Я могу загрузить продукт и увидеть, что ценовое свойство удерживает правильное значение.Когда я добавляю элемент в корзину, цена меняется на 0,00 долл. США.Вот сценарий, который я использую:
$customer = Mage::getModel('customer/customer');
$customAddress = ...;
//set customer data and log in customer, left out for this post
$checkout_session = Mage::getSingleton('checkout/session');
$quote = $checkout_session->getQuote();
$checkout_session->getQuote()
->setBillingAddress(Mage::getSingleton('sales/quote_address')
->importCustomerAddress($customAddress));
$product = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('entity_id', '634887')
->addAttributeToSelect('*')
->getFirstItem();
echo "product price: " . $product->getPrice() . "<br>";
//prints correct price
$pid = $product->getId();
$product->load($pid);
$cart = Mage::getSingleton('checkout/cart');
$cart->truncate();
$cart->save();
$cart->getItems()->clear()->save();
try {
$cart->addProduct($product->getId(), array('qty'=>1));
$cart->save();
print "product added <br>";
}
catch (Exception $ex) {
echo "product error " . $ex->getMessage() . "<br>";
}
$cart_grand_total = $cart->getQuote()->getGrandTotal();
$quote_grand_total = $quote->getGrandTotal();
$cart_items = $cart->getItems()->getData();
$quote_data = $quote->getData();
echo "CART GRAND TOTAL<br>";
var_dump($cart_grand_total);
//returns 0
echo "CHECKOUT SESSION QUOTE GRAND TOTAL<br>";
var_dump($quote_grand_total);
//returns 0
echo "CART ITEMS DUMP<br>";
var_dump($cart_items);
//shows item price as 0.00
echo "CHECKOUT SESSION QUOTE DATA DUMP<br>";
var_dump($quote_data);
//shows grand total = 0
.
Любые идеи относительно того, почему товар идет от правильной цены, прежде чем добавлять в корзину, затем становится ценой на 0,00 долл. США, когда она находится в корзине?
заранее спасибо за любую помощь.
Решение
Удалите эти строки из вашего кода и отображаются итоги заказа.Как-то они ингибируют вашу корзину от получения любых итогов.
$cart->save();
$cart->getItems()->clear()->save();
. Другие советы
Вы должны собирать итоги в какой-то момент.Я не уверен, где вы получили код для создания заказов, но это Гид довольно полезен и работал для меня в прошлом. В любом случае попробуйте
$quote->collectTotals()->save();
.
После добавления ваших продуктов в корзину.