Adicione itens ao carrinho programaticamente e atribua-os ao usuário convidado
-
11-12-2019 - |
Pergunta
Coloquei o código funcionando para criar o objeto de cotação e o objeto de item de cotação, e consegui criar a cotação com sucesso, o que pude confirmar verificando o banco de dados, também criei um cookie chamado front-end.Tudo o que preciso agora é atribuir a cotação criada ao usuário convidado, para que eu possa permitir que o usuário finalize a compra como convidado, mas não consiga atribuir o carrinho ao usuário convidado.
A solicitação de itens no carrinho virá de um site de terceiros por meio de uma solicitação JSON que decodifiquei e fiz um loop.
Aqui está o código
session_name("frontend");
session_start();
$cartInfo = $_GET['items'];
require_once '../app/Mage.php';
Mage::init('default');
$session = Mage::getSingleton('customer/session');
Mage::getSingleton('checkout/cart')->getQuote();
foreach ($cartArray as $key=> $value) {
$productId = $key;
$productQuantity = $value;
$productModel = Mage::getSingleton('catalog/product');
$productObj = $productModel->load($productId);
if (!$quoteObj) {
$quoteObj = new Mage_Sales_Model_Quote();
}
$store_id = Mage::app()->getStore()->getId();
$storeObj = $quoteObj->getStore()->load($store_id);
$quoteObj->setStore($storeObj);
$quoteItem = Mage::getModel('sales/quote_item')->setProduct($productObj);
$quoteItem->setQuote($quoteObj);
$quoteItem->setQty($productQuantity);
$quoteItem->setStoreId($store_id);
$quoteObj->addItem($quoteItem);
$quoteObj->setStoreId($store_id);
$quoteObj->collectTotals();
$quoteObj->setCustomerId(null);
$quoteObj->save();
$quoteId = $quoteObj->entity_id;
echo $quoteObj->entity_id.'**<br />';
echo $quoteItem->item_id.'---<br />';
}
Solução
Finalmente descobri o problema, espero que ajude alguém, aqui está a resposta.
O código fornecido acima na seção de perguntas funciona perfeitamente, tudo que você precisa fazer é colocar o arquivo customizado na pasta raiz da sua instalação do magento, se você criar uma pasta e colocar este código, ele não funcionará.É obrigatório que o arquivo de código esteja na raiz.
Outras dicas
Como se trata de uma verificação de suposição, a única maneira que consigo pensar é permitir que o cliente recarregue a cotação em seu navegador.Portanto, você precisará enviar um link por e-mail com o ID da cotação ou permitir que eles insiram o ID da cotação em seu site.
Para recarregar cotação em seu controlador
$id = $this->getRequest()->getParam('quote_id');
$store_id = $this->getRequest()->getParam('store_id');
....
$this->_getSession()->clear();
$this->_getQuote()
->setQuoteId($id)
->setStoreId($store_id)
->setIsActive(true)
->load($id);