foto
Alisson O Blog

Alisson O Blog

Magento e os idiomas que o computador fala…

Carrinhos abandonados no Magento

11 de fevereiro de 2010

O que fazer com os carrinhos abandonados no Magento e-commerce?

É comum um cliente entrar em uma loja virtual, encher o carrinho de produtos, e abandonar em algum passo do checkout, ou antes mesmo dele. Os motivos para abandono são diversos: muitas vezes o cliente faz isso simplesmente pra deixar o sistema mesmo calcular quanto ele vai ter de gastar para comprar os produtos que ele tem em vista, por falta de tempo, por dificuldades em um checkout longo e que se extende por várias páginas, etc.

Apesar de eu achar o termo “carrinho abandonado” engraçado (sempre imagino alguém fugindo correndo de um supermercado), ao que tudo indica, o Magento lida com isso da maneira mais adequada possível. Conforme um post de Cezar Taurion (MBA em Marketing de Serviços), na revista TI Master:

“Se houver abandono, o site deve salvar o conteúdo do cesto de compras, pois nem sempre a interrupção da transação acontece por vontade do cliente. Assim, quando ele voltar, ele poderá continuar do ponto em que a operação foi interrompida. E mesmo que ele tenha desistido por vontade própria, ficará satisfeito em saber que a loja lembra dele e de sua última tentativa de compra.”

O Magento salva carrinhos abandonados, tanto para usuários logados, como para os visitantes. Para os visitantes isso é feito através de um cookie e, para os logados, tudo fica no banco de dados e é restaurado quando o usuário se loga novamente. Acontece que durante a homologação de um novo site em Magento, bem naquele momento em que o cliente (que geralmente nunca teve um e-commerce antes) está fazendo diversas compras teste para entender os métodos de pagamento e envio, entende que salvar carrinhos abandonados é um erro.

Vamos entender o procedimento do teste:

  1. Cliente entra no site;
  2. Cliente adiciona 2 produtos no carrinho;
  3. Cliente tenta o checkout;
  4. Magento grava carrinho atual no banco;
  5. Cliente abandona o carrinho (desloga ou sai do site).

Cliente volta ao site:

  1. Cliente entra no site;
  2. Cliente adiciona 2 produtos no carrinho;
  3. Cliente tenta o checkout;
  4. Cliente se loga no site;
  5. Magento UNE o carrinho anterior ao atual.

Assim o cliente testando seu e-commerce pensa: “Opa, peraí…”. Nesse ponto 5 o cliente passa a ter 4 produtos no carrinho! Ele pensa que o seus futuros clientes da loja vão se confundir, e talvez a quantidade de reembolsos por compras erradas possam ser significativos… E o Magento realmente não avisa que salva o carrinho, nem avisa que restaura e une os carrinhos. Muito dificilmente uma pessoa tem como primeira atitute ao entrar no site se logar, o que faria com que ela percebesse o crescimento do número de itens no carrinho.

Solução 1: Fazer o Magento mostrar uma mensagem quando carrinhos são unidos. Você precisará alterar 3 arquivos:

  1. Em app/code/core/Mage/Checkout/Model/Session.php altere o método loadCustomerQuote() para este:
  2.     public function loadCustomerQuote()
        {
        	// reseta controle
        	Mage::getSingleton("core/session")->setIsLoadedCart("0");
    
            $customerQuote = Mage::getModel('sales/quote')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->loadByCustomer(Mage::getSingleton('customer/session')->getCustomerId());
    
            if ($this->getQuoteId() != $customerQuote->getId()) {
                if ($this->getQuoteId()) {
                    $customerQuote->merge($this->getQuote())
                        ->collectTotals()
                        ->save();
    
                    //carrinho unido
                    Mage::getSingleton("core/session")->setIsLoadedCart("1");
                }
    
                $this->setQuoteId($customerQuote->getId());
    
                if ($this->_quote) {
                    $this->_quote->delete();
                }
                $this->_quote = $customerQuote;
            }
            return $this;
        }
    
  3. Em app/code/core/Mage/Checkout/Model/Observer.php altere o método loadCustomerQuote() para este:
  4.     public function loadCustomerQuote()
        {
       	    try {
                Mage::getSingleton('checkout/session')->loadCustomerQuote();
            }
            catch (Mage_Core_Exception $e) {
                Mage::getSingleton('checkout/session')->addError($e->getMessage());
                return;
            }
            catch (Exception $e) {
                Mage::getSingleton('checkout/session')->addException(
                    $e,
                    Mage::helper('checkout')->__('Load customer quote error')
                );
                return;
            }
    
            //adiciona a mensagem
            if (Mage::getSingleton("core/session")->getIsLoadedCart() == "1")
            {
    			Mage::getSingleton('customer/session')->addNotice(
    				Mage::helper('checkout')->__("Você já havia adicionado produtos ao carrinho em outra visita ao site e nós os restauramos para você. Por favor, revise seu carrinho antes de finalizar o pedido. Obrigado!")
    			);
            }
        }
    

    Isso fará com que a mensagem apareça nas telas gerais do sistema:
    Mensagem nas telas gerais do Magento

  5. E em app/design/frontend/default/default/template/checkout/onepage/billing.phtml adicione o seguinte trecho de código, antes de tudo:
  6. <div target="_blank" id="messages_product_view">
    <?php
    	if (Mage::getSingleton("core/session")->getIsLoadedCart() == "1" && $this->isCustomerLoggedIn())
    	{
    		$nome = Mage::getSingleton('customer/session')->getCustomer()->getName();
    
    		Mage::getSingleton("core/session")->setIsLoadedCart("0");
    		Mage::getSingleton('customer/session')->addNotice(
    			Mage::helper('checkout')->__("Bem vindo, $nome. Você já havia adicionado produtos ao carrinho em outra visita ao site e nós os restauramos para você. Por favor, revise seu carrinho antes de finalizar o pedido. Obrigado!")
    		);
    		$this->getMessagesBlock()->setMessages(Mage::getSingleton('customer/session')->getMessages(true));
    		echo $this->getMessagesBlock()->getGroupedHtml();
    	}
    ?>
    </div>
    

    Esse é o passo mais importante, fará com que a mensagem apareça especificadamente quando os carrinhos são unidos já no processo de checkout, o que realmente pode ser confuso:
    Mensagem na tela Onepage Checkout do Magento

Mais defesas para salvar os carrinhos:
- É incomum o cliente de verdade do site ficar enchendo o carrinho diversas vezes, como em um procedimento de teste.
- O cliente sempre revê o que vai comprar, antes de fazer a compra, e dificilmente comprará por acidente. Quando estamos fazendo testes, passamos batido por essa parte clicando em “Finalizar Compra”.

Solução 2: Quero desativar o salvamento de carrinhos mesmo assim!

  • Para usuários visitantes: Basta ir em Sistema->Configuração->Web e colocar o Tempo-de-vida do cookie (Cookie Lifetime) para 0. Isso vai fazer com que, assim que o usuário fechar a janela do browser, todos os dados sejam perdidos. Isso força também uma limpeza do carrinho.
  • Para usuários logados: É aqui que o bicho pega. A princípio vamos em Sistema->Configuração->Finalizar Compra->Carrinho de Compras->”Validade da cotação (dias)”. Ali, colocando o valor “0″, teoricamente o carrinho não deveria ser salvo… Mas não é o que ocorre. Ainda não testei se até amanhã o carrinho vai se esvaziar (o que já seria errado pois de hoje até amanhã se passa 1 dia, e 0 é menor que 1), mas tudo bem. Ou na marra: vá até o arquivo app/code/core/Mage/Checkout/etc/config.xml e remova o seguinte trecho de código:
  •             <customer_login>
                    <observers>
                        <loadCustomerQuote>
                            <type>singleton</type>
                            <class>checkout/observer</class>
                            <method>loadCustomerQuote</method>
                        </loadCustomerQuote>
                    </observers>
                </customer_login>
    

Note que, assim, carrinhos anteriores nunca são submetidos a operação de união com um carrinho novo, porém, caso não haja nada no carrinho, alguns produtos da última quote acabam sim voltando.

Mais informações:

Abraço!

Tags: , , , , , , ,

6 comentários para “Carrinhos abandonados no Magento”

  1. MarioSAM disse:

    mandou bem!
    eu ja tinha reparado nessa funcionalidade, soh nao imaginei q isso fosse um problema para quem testa.
    pois ate quando eu volto pro submarino os produtos ainda estao la no carrinho.
    se o lider de mercado usa essa funcionalidade, alguma razao “mesmo q obscura” existe! :D
    abs

  2. MarioSAM disse:

    ah, fiquei pensando aqui a respeito.
    uma alternativa tb seria colocar uma frase na tela do carrinho de compras, informando ao cliente q os produtos permanecerao salvos no carrinho caso ele queira continuar a compra mais tarde.

  3. Alisson Oldoni disse:

    Considero salvar o carrinho também importantíssimo… Todos os sites fazem isso. Só acho que falta um pouco de bom senso por parte do Magento em avisar o usuário disso, propus essa solução então. E, quanto a mensagem de que o cliente pode comprar mais tarde… Não seria talvez um incentivo ao abandono do carrinho? Ele pode não voltar mais, ou ver esse produto em outro site. Ótima discussão.

    Obrigado pela visita.

  4. MarioSAM disse:

    claro, o debate eh otimo, construtivo e interessante.

    se a msg incentiva o abandono? precisariamos fazer uma pesquisa para descobrir os motivos q levam os clientes a abandonarem o carrinho e saber q efeito uma msg dessa teria sobre o psicologico da maioria.

    ver o produto em outro site eh inevitavel, talvez o seu site seja o “outro”.
    axo q deixar o usuario saber q ele pode voltar ao seu site sem ter o trabalho de procurar e adicionar os produtos novamente eh um grande incentivo ao retorno.

    mas isso pensando por mim, eu pelo menos adoraria.

  5. Zed disse:

    Quando eu li, eu dei risada. Passei por esse problema, chegaram até pedir para eu consertar este “erro” do Magento.
    Muito bom esse post, valeu.

  6. Enrique disse:

    Alisson,
    qual foi o resultado do teste do lifetime?

    De qualquer maneira, deveria ser “permitido” ao lojista se quer o não recuperar os carrinhos abandonados. Entendo perfeitamente as questões de mkt, mas às vezes, os lojistas não abrem com um estoque “enorme” e precisam liberar os carrinhos que estão abandonados.

    Mais uma vez, ao meu ver, deveria ser facultativa a recuperação de uma maneira simples e no core do Magento, já que as práticas que se aplicam a algumas empresas não se aplicam a outras.

    Abraço,
    Enrique

Deixe um comentário



© 2014 - Indexa Ltda. Todos os direitos reservados.