BUG no módulo de pagamento PayPal Plus em Navegadores/Celulares anteriores a 2016



  • Ao ativar a aba de pagamento via PayPal Plus, o carrinho/pagamento que possui o pagamento integrado deixa de funcionar adequadamente em alguns navegadores. Pode ser verificado tentando-se navegar nas abas de pagamento ou qualquer outra operação neste página que use javascript.
    O problema pode ser facilmente observado em uma loja que possua esse módulo de pagamento e tentando-se efetuar uma compra utilizando o Internet Explorer Edge especialmente quando a opção de pagamento via PayPal Plus não for a primeira. Ao tentar clicar nas abas de método de pagamento elas não funcionam impedindo a troca. Outros problemas na tela ocorrem mas este é o mais evidente.
    No Internet Explorer em modo de depuração é possível destacar o problema:

    Linha: 1
    Erro: 'refresh_pplus' não está definido

    Se detalhar mais o erro ele indicará o erro em:

    view_char shop-v11.js eval code (55)

    Continuando o processo de localização do problema temos:

    refresh_pplus({installments: 6, shipping_cost: undefined, subtotal: undefined, discount: undefined, total: 197.46});

    A linha que gera o erro é resultado de um eval no arquivo shop-v11.js na linha 319 que possui o seguinte código:

    eval($(this).data('calc') + '({installments: '+that.options.installments+', shipping_cost: '+data.shipping_cost+', subtotal: '+data.subtotal+', discount: '+data.discount+', total: '+data.total+'});');

    Não é possível ativar o módulo de pagamento sob pena de alguns cliente não conseguirem finalizar o processo de compra em alguns navegadores.

    Existe uma solução para o defeito caso vocês me deem acesso a editar o código do módulo PayPal Plus poderei implementar diretamente.
    Quando o módulo está ativo existem diversos arquivos e funções que são carregadas na página view_cart. O profissional de TI da XTech usou uma construção de código javascript que só é compatível com os navegadores mais recentes que é a utilização de um parâmetro com default numa função.
    Para corrigir é necessário acesso ao módulo de PayPlus e procurar a seguinte construção no javascript:
    ...
    var validateInitFields = function(blReturn = false){
    ...
    Onde ... significa que tem coisas antes e depois.
    A construção blReturn = false não é compatível com navegadores mais antigos especialmente do Internet Explorer e ela pode ser facilmente corrigida trocando-se o código para:
    ...
    var validateInitFields = function(blReturn){
    if(typeof blReturn === 'undefined') blReturn = false;
    ...
    Que tem o mesmo efeito e funciona em navegadores menos modernos.
    A construção adotada pelo seu profissional da XTech só foi disponibilizada na versão ES6/EcmaScript 2015. Portanto navegadores mais antigos que ainda não implementaram essa especificação em seu código não funcionarão.
    A solução é simples, sem consequências negativas de nenhuma espécie, fácil para um técnico entender para perceber que não terá nenhum risco para essa alteração no código e implementar e não leva menos que alguns minutos.
    Levei mais tempo para escrever esse texto do que ele levaria para corrigir o problema.
    Aguardo providências urgentes.