Erro validação de cartão de crédito

Falae eXpecialistas em Magento, aqui vai mais uma dica pra coleção.

A dica de hoje é algo bem simples, mas me fez perder quase um dia inteiro pra conseguir encontrar a solução rs.

O Erro

Instalei o meu módulo de pagamento por cartão de crédito (isso mesmo, eu que desenvolvi rs, em breve vou colocá-lo na Magento Connect) em um cliente e quando fui testar o pagamento por esse módulo simplesmente eu não conseguia passar para o passo seguinte do checkout.

E o mais engraçado de tudo é que não me mostrou nenhum tipo de mensagem de erro. Recorri ao debug javascript do Firebug e após debugar muitas linhas de código cheguei a seguinte excessão:

validateCreditCard is not defined

A Solução

Graças ao recurso de busca em diretório do Zend Studio (essa é a IDE que uso para desenvolvimento em PHP) consegui encontrar dentro da pasta js o arquivo js/lib/ccard.js onde a function validateCreditCard é declarada.

À partir daí foi mamão com açucar rs. Simplesmente abri o arquivo layout/page.xml do meu tema e inseri o seguinte comando:

<action method=”addJs”><script>lib/ccard.js</script></action>

Feito isso o problema foi resolvido.

Aí vem a pergunta que não quer calar: Por que o meu tema não tinha a chamada a este arquivo, se o mesmo é um recurso nativo do Magento?

Elementar meus caros Watsons, esse arquivo foi adicionado ao Magento à partir da versão 1.4 (se não me engano) e alguns temas customizados não têm essa “chamada”, por terem sido desenvolvidos para versões anteriores.

É isso ai pessoal, espero que ajude alguém, assim como me ajudou.

Até a próxima!

Publicidade

Configurando “Enviar Para um Amigo” (Tell a Friend)

Depois de um período sem postar nada, aí vai mais uma dica fresquinha que acabei de descobrir.

Por padrão o Magento traz a funcionalidade de enviar a URL do produto para um amigo apenas para usuários cadastrados. Sendo assim você teria que fazer o login no sistema para poder enviar um produto à um amigo por email.

Procurei módulos que fizessem isso sem a necessidade do login/cadastro do usuário, e até passou pela minha cabeça desenvolver um módulo para fazer isso já que se trata de algo simples:

apenas exibir um formulário com Nome e Email do remetente, Nome e email do destinatário, e um campo para Mensagem

Foi então que resolvi procurar um pouco mais e fuçar no painel administrativo para tentar encontrar alguma configuração que permitisse algo parecido. E num é que já tem isso pronto no Magento.

Para liberar essa funcionalidade você só precisa ir em Sistema->Configuração->Avise os amigos (System->Configuration->Tell a Friend) e marcar como SIM a opção Permitir para visitantes (Allow to guests).

Pronto agora o recurso está liberado para qualquer visitante da sua loja virtual.

Agora me fala a verdade Magento é lindo ou não é? rs rs

 

Abraços e até a próxima!!

Magento – Erro no campo data de aniversário no cadastro de cliente

Mais uma dica preciosa pra quem trabalha com Magento.

Problema

Instalei uma loja Magento 1.5 e no cadastro de novos clientes estava dando erro no campo data de aniversário. Todas as datas até o mês 07 funcionam perfeitamente, do mês 08 em diante é mostrada a mensagem “Please enter a valid full date” (Por favor, informe uma data válida).

Metodologia

Pesquisei em praticamente todos os fóruns, listas de discussão e não encontrei quase nada sobre esse problema. Após revirar o código das classes Customer* no php identifiquei que o problema estava na validação do campo pelo javascript.

Voi lá! Fui até o arquivo js/varien/js.js e procurei pela classe DateElement para analisar a função validate, e realmente o erro estava lá.

 var error = false, day = parseInt(this.day.value) || 0, month = parseInt(this.month.value) || 0, year = parseInt(this.year.value) || 0;

Nesse trecho de código é feito um parseInt nos valores dos campos, porém essa função tem um bug. Toda string começada por ‘0’ é tratada como um número octal(base 8), e como o número ’08’ não existe na base-8 então o parseInt retorna ‘0’;

parseInt('8');      // => 8 
parseInt('08');     // => 0 
parseInt('08', 10); // => 8 

A solução para o problema então é simplesmente inserir o parâmetro 10 nas chamadas ao parseInt, indicando que os números passados tem que ser tratados na base-10.

var error = false, day = parseInt(this.day.value, 10) || 0, month = parseInt(this.month.value, 10) || 0, year = parseInt(this.year.value, 10) || 0;

Espero que tenha ajudado e em breve novas dicas!

Abraços!!

Setar campos CEP e estado como obrigatórios

Recentemente tive este problema em um cliente Magento.

Por algum motivo um dos usuários não preencheu o campo de CEP do Endereço de cobrança e por isso a consulta anti-fraude da ClearSale estava retornando erro. Depois de quebrar bastante a cabeça reparei que o campo não tinha sido preenchido porque, apesar de eu ter setado como “required” no arquivo de layout app/design/default/<tema>/template/checkout/onepage/billing.phtml, ainda existem configurações do Magento para tornar isso possível.

Depois de muito pesquisar pela solução, e testar várias soluções que só me fizeram perder tempo, aí vai a solução para esse problema.

É apenas uma questão de configuração da loja:

  • Vá em Sistema -> Configuração -> Geral -> Geral (System->Configuration->General->General)

    Vá em Sistema - Configuração

  • Na aba Opções de Países (Countries Options) certifique-se que “Brasil” não está selecionado no campo CEP opcional para os países (Postal Code is Optional for the following countries)

    Verifique a configuração para tornar os campos CEP e estado obrigatórios

  • Pronto, agora os campos CEP e estado são obrigatórios no cadastro
Simples não?!