Pregunta

Entonces, estoy tratando de crear una orden programáticamente en Magento 1.12 ee.Puedo cargar el producto un producto y ver que la propiedad de precios tiene el valor correcto.Cuando agrego el artículo al carrito, el precio cambia a $ 0.00.Aquí está el script que estoy usando:

$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

¿Alguna idea de por qué el artículo va del precio correcto antes de agregarse al carrito, entonces se convierte en un precio de $ 0.00 cuando está en el carrito?

Gracias de antemano por cualquier ayuda.

¿Fue útil?

Solución

Eliminar estas líneas de su código y deben aparecer los totales del pedido.De alguna manera, están inhibiendo su carrito de obtener todos los totales.

$cart->save();
$cart->getItems()->clear()->save();

Otros consejos

Debes recopilar totales en algún momento.No estoy seguro de dónde obtuviste el código para crear las órdenes, pero este La guía es bastante útil y funciona para mí en el pasado. De todos modos intente

$quote->collectTotals()->save();

Después de agregar sus productos al carrito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top