Google Analytics – Ecommerce tracking + Magento 1.5 com PagSeguro do Bruno Assarisse

Logo do Magento

(este é um post bem técnico, que involve linguagens de programação de gosto duvidoso. prossiga com precaução)

Estava brincando com a plataforma Magento (um CMS específico para e-commerce) e fiquei preso por um tempo maior do que eu gostaria de admitir num comportamento não esperado de um dos seus plugins. Como não achei esta solução na internet, vou deixá-la aqui para que alguém mais se beneficie dela ou critique vorazmente, já que minha solução foi praticamente chutada:

Um dos pontos altos da plataforma Magento são seus plugins. Existem vários plugins que podem ser achados no Magento Connect (o market place deles) e em seguida instalados em seu site. O problema é que há várias versões do Magento em produção. A versão que está em desenvolvimento hoje em dia é  a 1.6, mas já vi gente usando mesmo a 1.2 em alguns forums.

Como o site que estava configurando ia utilizar o UOL PagSeguro como opção de pagamento, baixei o plugin no site do PagSeguro para Magento. Porém na época, a versão do plugin do PagSeguro não era compatível com a versão 1.5 do Magento. Achei então uma versão alternativa, uma modificação do plugin oficial pelo colega programador Bruno Assarisse.

Esta versão funcionou perfeitamente, levando as informações de compra, frete e até endereço do cliente para o PagSeguro, viabilizando a entrada em produção do negócio. Porém – se não tivesse um porém eu não estaria escrevendo este artigo :) – faltava um detalhe: a contabilização no Google Analytics.

O Google Analytics é uma ferramenta excelente para monitorar o uso de seu site. Uma de suas funcionalidades é a do site de e-commerce enviar o conteúdo dos carrinhos de compra que forem confirmados para que o Analytics faça o acompanhamento das ‘conversões’ (vendas efetivas).
Por exemplo quando você faz uma compra, vai colocando os itens no carrinho de compras virtual. Quando chega no final do processo de compra, informa seus dados de cobrança (número do cartão de crédito, ou gera um boleto bancário). Quando a compra é validada, os ítens que estavam no seu carrinho são enviados para o Google Analytics. Desta forma é possível entender melhor quem é seu cliente, de onde ele veio e que possíveis motivos o fizeram realizar sua compra.

Analytics Ecommerce

Quando fiz testes usando o método de compra do Paypal esta informação chegava perfeitamente no Google Analytics, mas assim que passamos a usar o plugin do Bruno Assarisse esta informação sumiu! Demorei bastante para identificar o que tinha acontecido, pois basicamente poderia ter quebrado em qualquer lugar! Eu também tinha instalado o plugin Google Analytics Plus, para fazer o tracking dos passos do processo de checkout em Ajax. Então, era o GA Plus? Era o PagSeguro? Era uma edição mal feita de algum arquivo do Magento? Muitas possibilidades…

Resolvi então analisar o problema de trás pra frente. O processo de pagamento utilizando o PagSeguro acontece da seguinte forma:

  1. Cliente coloca ítens no carrinho
  2. Cliente decide finalizar seu processo de compra (checkout)
  3. Cliente preenche endereço de entrega, de cobrança e é redirecionado ao site do PagSeguro
  4. A mágica do pagamento acontece do site do PagSeguro
  5. Depois de uma contagem regressiva o usuário é levado de volta ao site da sua loja
  6. Uma página de ‘muchas gracias’ é apresentada ao cliente. Neste momento é feita a chamada que envia a lista de compras pro Analytics

Comecei pelo passo 6. O Magento 1.5 já tem suporte ao Analytics. O arquivo responsável pela criação do javascript do Analytics é o app/code/core/Mage/GoogleAnalytics/Block/Ga.php. O método que formata as informações da compra é o _getOrdersTrackingCode. Nele havia uma checagem logo no início que verificar se o array $orderIds existia e não estava vazio. Alterei o retorno desta checagem para:

return '/*'.$orderIds.'*/';

Esta mudança não quebra o site, pois retorna um comentário que será inserido no javascript do Google, não acarretando em efeito colateral, e ainda me permitia visualizar o valor de $orderIds. Como esperado, o resultado foi um singelo:

/**/

O que indicava que $this->getOrderIds() estava retornando um array vazio! Ótimo, agora eu já sabia qual era o problema. Algum progresso. E agora? Bom, recorri ao meu Google-fu e sem muita informação recorri ao que tinha e mandei um:

magento empty getOrderIds

O quarto resultado era do StackOverflow, não preciso dizer que foi meu primeiro click! Deixei até um comentário na resposta salvadora do BrianVPS:

I have fixed the problem. We use a 3rd party extension for checkout and it needed to be updated for 1.5.0.1 compatibility. The dispatcher of the *checkout_onepage_controller_success_action* event needs to send an array of the order ids as well. This wasn’t necessary in 1.4.2.0. I updated the extension and it’s working great now! I hope this helps anyone else with a similar issue.

Maravilha. Plugins que funcionavam no Magento 1.4 e não funcionavam mais no 1.5. Parece ter a ver com o meu problema! O próximo passo então seria achar um dispatcher do evento checkout_onepage_controller_success_action e fazer o que ele faz, de dentro do plugin do Assarisse! Fazendo um grep pelo nome do evento, cheguei no arquivo:

app/code/core/Mage/Checkout/controllers/OnepageController.php

Neste arquivo, o disparo do evento era feito no método successAction:

#... $this->_initLayoutMessages('checkout/session'); Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId))); $this->renderLayout(); #...

 

Ok, será que o plugin do Assarisse teria uma método successAction? Grep nele:

 

$ grep -isrl successAction app/code/community/BrunoAssarisse/PagSeguro/* app/code/community/BrunoAssarisse/PagSeguro/controllers/PayController.php

 

Voilá! Tamos chegando perto! No método successAction deste arquivo PayController.php há um ‘if’ que verifica se a página de retorno do PagSeguro seria uma página tipo CMS ou não. Caso não seja uma página CMS (o meu caso), ele carrega o layout da página de destino e a apresenta. Inseri meu código no meio dele então:

 

} else { # esta é a linha 183 do arquivo $this->loadLayout(); # cyberama $session = $this->getCheckout(); $lastOrderId = $session->getLastOrderId(); Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId))); # /cyberama $this->renderLayout(); }

 

Desta forma geramos o tal evento, passando o id da compra que acabou de ser feita, fazendo com que ela chegue lá no Ga.php do início.
*Ufa* foi uma volta enorme pra resolver este problema! Resumindo:
  1. Investigamos o final do processo de compra (Ga.php) e o pedido estava chegando em branco na função que escreve o javascript do Analytics.
  2. Procuramos no Google alguma informação sobre ‘getOrderIds‘ vazio
  3. Achamos no StackOverflow uma direção: procure por ‘checkout_onepage_controller_success_action
  4. Alguém mais já ativava este evento, passando um id de compra. Pegamos o código emprestado e
  5. Alteramos o plugin do PagSeguro para disparar este evento, passando o id da compra

Ainda existem alguns pontos em aberto, que gostaria de trocar idéia com vocês:

  1. Se a pessoa escolhe pagar por boleto, vamos contabilizar a compra no Analytics, sendo que o boleto pode não ter sido pago
  2. Se a pessoa escolhe pagar por cartão de crédito, vamos contabilizar a compra no Analytics, porém a compra pode ser declinada pela operadora de cartão
  3. Se a pessoa fecha a página do PagSeguro durante a contagem regressiva de 20 segundos, não vamos contabilizar a venda no Analytics

Se vocês acharam soluções para estes cenários, por favor deixem o link nos comentários!

11 thoughts on “Google Analytics – Ecommerce tracking + Magento 1.5 com PagSeguro do Bruno Assarisse

  1. Boa noite, caro amigo.

    Gostaria de tirar uma dúvida. Estou com erro Parse error: syntax error, unexpected ‘<' in http://www.meusite.com.br/app/code/community/BrunoAssarisse/PagSeguro/Block/Sucess.php on line 22.
    Este erro apareceu ao tentar colocar a conversão do Google Adwords. Estei em outras linhas deste arquivo, mas continua dando erro. O cliente consegue fazer a compra com PagSeguro, mas ao retornar após a compra dá este erro. Tive que tirar o código de conversão.
    Tem alguma sugestão para eu consegui fazer a conversão pelo PagSeguro? Fora deste módulo o Magento não dá erro.

    Muito obrigado.
    Abraços,
    Jorge

  2. Olá Jorge,

    Parece ser um erro de sintaxe, você pode colar o trecho que você modificou no http://pastebin.com/ e postar o link aqui?

    Em breve vou publicar uma nova idéia que estou trabalhando para fazer o rastreamento de conversões mais corretamente.

    Abraços!

  3. Passei muito tempo revirando o modulo pra descobrir como corrigir esse bug. Thanks!

    Fiz o update e vou testar. Uma dúvida, ele pega o LAST ORDER, qual será ação caso tenha 1 pedido no meio do tempo que o cliente foi pro PagSeguro ?

    E se coloca-se no momento em que o cliente clica no COMPRAR?
    Estou só pensando….

    Com relação a sua dúvida, eu não sei se o google tem algum campo de comments, se tiver poderia passar ele, mas eu acho que não dá pq são momentos diferentes, já que a forma de pagto vem depoisdo registro no GA.

  4. Parabéns cara mto bom o post. Estou fazendo essas alterações para testar.

    Mesmo em outras soluções esse tracking do analytics para pagamentos com boleto tem que passar por uma “auditoria” e os relatórios acabam ficando errado. Não achei ainda algo para melhorar isso… talvez enviar esses dados somente depois da alteração de status do pedido para confirmado.

    • Cara, estou testando uma solução que pode ser que funcione. Nao ficou muito bonita e ainda vai ter casos em que a conta pode nao bater, mas aí a gente filtra no analytics depois. Depois faço outro post a respeito. Abs!

  5. Leo,

    já achou uma solução para o problema número 3? Quase nenhum pedido meu esta aparecendo lá. :(

    abs
    Alexandre

  6. Pensei em uma solução um pouco estúpida mas não sei se tanto…rs

    E se no momento que o cliente clicar no botão de fechar o pedido mandar chamar tb o Ga.php?
    ou então adicionar isso dentro do arquivo do Bruno que trata os dados do Pagseguro?

    • A idéia que tive por último mas ainda não implementei é a seguinte:
      1. registra as compras no analytics na volta do pagseguro (na página de ‘obrigado’, porém nada impede do usuário fechar o browser antes de voltar!)
      2. troca a página de retorno cadastrada no pagseguro. Ao invés de chamar diretamente a página do Bruno, chama um php nosso. Nesse PHP:
      2.1 Quando bater um GET nele, repassa sem se meter
      2.2 Quando bater um POST, é uma atualização de status de compra. Fazemos a interpretação dos parâmetros enviados pelo pagseguro (copiando do Bruno) e, caso seja um cancelamento de compra, fazemos uma chama via GA.php que cancela a compra no GA. Repassa a chamada pro Bruno pra continuar o processamento padrão.

      Como você pode ver, o usuário sempre pode se meter no meio, então essa não é uma métrica 100% certa ainda.

      abs

      • Muito Bom o artigo,
        porem a sua idéia não resolve o problema do cliente fechar a página do pagseguro antes do retorno.Outro problema é cancelar o pedido pelo Ga, o retorno no cancelamento é chamado pelo servidor do pagseguro portanto não é passado o cookie do GA que esta no browser do usuário, então acho que vai dar problema ao chamar GA para cancelar a compra.

        Já tentei implementar esse processo no oscommerce e tive esse problema.

        Um quebra Galho para o problema de fechamento da página é redirecionar checkout para uma página com uma aviso bem legivel para que o usuário não fecha a pagina do pagseguro e aguarde a contagem regressiva retornar a loja.
        Essa página de aviso fica no ar alguns segundo e depois continua o checkout no pagesuro.

  7. Olá a todos, estou fazendo uma loja com o Magento 1.6 e estou com dificuldades para instalar o pagseguro de Bruno Assarisse (PagSeguro-1.1.5), qdo nao aparece o erro 503 não aparece nenhum módulo em configurações, se não for muito incomodo gostaria de uma ajuda para instalar de forma correta o plugin de pagamento do pagseguro de Bruno Assarisse no magento 1.6, se possível um vídeo. Obrigado

  8. Léo, bom dia, segui tudo certinho passo a passo no seu tutorial
    mas me surgiu uma duvida:
    qual seria a url de retorno? como configurar isso?

    abraço

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>