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!

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!!

Como instalar o Microsoft SQL Server 2005 Management Studio

Tive que instalar o Microsoft SQL Server 2005 Management Studio no meu PC seguindo os passos abaixo:

  1. Baixei o arquivo SQLServer2005_SSMSEE_x64.msi no site da Microsoft: http://www.microsoft.com/download/en/details.aspx?id=8961
  2. Executei o aplicativo e segui todos os passos

Normalmente, como em qualquer programa for Windows, parecia uma tarefa simples – era só ir apertando next até o final da instalação e voi lá. No entanto, não foi bem assim que aconteceu. Ao chegar no final da instalação me deparei com o seguinte erro:

Depois de muito procurar no mestre de toda sabedoria (Google é claro) encontrei a solução que tenho o prazer em compartilhar com você agora. Muito simples, basta seguir os passos abaixo:

  1. Clique com o botão direito do mouse na sua área de trabalho e clique em Novo -> Atalho;
  2. Crie um atalho para o seguinte arquivo: C:\Windows\SysWOW64\cmd.exe
  3. Clique com o botão direito do mouse no novo atalho e clique em Executar como Administrador;
  4. Informe o endereço completo do arquivo de instalação do Microsoft SQL Server 2005 Management Studio, como no exemplo:

C:\Users\[SEU NOME DE USUÁRIO]\Downloads\SQLServer2005_SSMSEE_x64.msi

Lembre-se que [SEU NOME DE USUÁRIO] se refere ao usuário do Windows que você está usando.

Pronto! Agora é só completar a instalação e tudo irá funcionar.

P.S.: Fiz isso em um Windows 7 de 64bits.

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?!
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.