Número de parcelas no checkout



  • No checkout, pagamentos em cartão de crédito, vem pré selecionado parcelado em 1x (à vista).

    Cliente que estou atendendo, logista, relata que seus consumidores estão efetuando o checkout e eventualmente efetuam algum procedimento na tela que gera um refresh (ex.: excluir um item do carrinho), e isso acaba recarregando as parcelas e volta para 1x. Cliente usando onepage checkout.

    O próprio cliente que atendo, entrou em contato com xtech que alega que tem que ser um "programador" para resolver. Resposta padrão para uma inúmera quantidade de dúvidas. Eu mesmo solicitei suporte e tive resposta dizendo que essa funcionalidade não é possível trabalhar. Novamente o cliente solicitou um respaldo onde foi dito que seria necessário abrir um tópico novo no "Family" para o time de TI resolver.

    Cá estou em busca de uma solução.
    Teoricamente se o <select> de parcelamento viesse com um <option>Selecione -></option> (vazio, sem valor no caso), sempre forçaria a validação a acontecer e o cliente mesmo que recarregando a página, poderia selecionar novamente as parcelas. Outra solução seria trabalhar com procedimentos em ajax no onepagecheckout para não ter refresh.

    Busco orientação do suporte para solucionar. O cliente alega que tem compras sendo feitas "à vista" no cartão gerando transtornos pós venda.


  • Dev

    Olá @dtillmann, então eu fiz esse código para vc testar e ver se está de funcionando, ele guarda a última prestação e o número do cartão digitado, mesmo atualizando a página, lembrando que fiz pra funcionar para módulo de pagamento mercado pago e pagar.me

    Coloque esse código no arquivo view_cart.html antes do fim {% endblock %} (fica antes da última linha):

    {# SALVAR A ÚLTIMA PRESTAÇÃO DO CARTÃO CLICADO PARA MERCADO PAGO E PAGAR.ME #}
    <script>
        var t = localStorage.getItem('save_parcel');
        var num_card;
        
        function update_parcel(){
            $("#mercadopago-installments option, .pagarme-installments option").each(function(){
                if ($(this).val() === localStorage.getItem('save_parcel')){
                    $(this).attr("selected","selected");
                }
            });
        }
        
        $(function(){
           
            $('#mercadopago-installments, .pagarme-installments').click(function(){
                t = $(this).val();
                localStorage.setItem('save_parcel', t);
            });
            
            $('#shipping_table').click(function(){
                if($('#mercadopago-installments, .pagarme-installments').change()){
    				setTimeout(function(){
                        update_parcel();
    				}, 2000);
                }
            });
            
            $('#onepage_checkoutform').submit(function(){
                localStorage.removeItem('save_parcel');
                localStorage.removeItem('save_num_card');
            });
            
            if($(window).load()){
                $('.mercadopago_cc_card_num').val(localStorage.getItem('save_num_card'));
                setTimeout(function(){
                    if($('.mercadopago-installments').is(':visible')){
                        update_parcel();
                    }
    			}, 4000);
            }
            
            $('.mercadopago_cc_card_num').keyup(function(){
                num_card = $(this).val();
                localStorage.setItem('save_num_card', num_card);
                if(num_card.indexOf("_") >= 7){
                    setTimeout(function(){
                        update_parcel();
                    }, 1500);
                }
            });
            
        });
    </script>
    


  • @charles fiz algumas implementações.

    {# SALVAR A ÚLTIMA PRESTAÇÃO DO CARTÃO CLICADO PARA MERCADO PAGO E PAGAR.ME #}
    <script>
    var t = localStorage.getItem('save_parcel');
    var num_card;
    
    function update_parcel(){
        $("#mercadopago-installments option, .pagarme-installments option, .pagseguro-installments option, select[name='mundipagg[parcel]'] option").each(function(){
            if ($(this).val() === localStorage.getItem('save_parcel')){
                $(this).attr("selected","selected");
            }
        });
    }
    
    $(function(){
       
        $("#mercadopago-installments, .pagarme-installments, .pagseguro-installments, select[name='mundipagg[parcel]']").change(function(){
            t = $(this).val();
            localStorage.setItem('save_parcel', t);
            console.log(t);
        });
        
        $('#shipping_table').click(function(){
            if($("#mercadopago-installments, .pagarme-installments, .pagseguro-installments, select[name='mundipagg[parcel]']").change()){
    			setTimeout(function(){
                    update_parcel();
    			}, 2000);
            }
        });
        
        $('#onepage_checkoutform').submit(function(){
            localStorage.removeItem('save_parcel');
            localStorage.removeItem('save_num_card');
        });
        
        if($(window).load()){
            $(".mercadopago_cc_card_num, .pagseguro_cc_card_num, input[name='mundipagg[card_num]']").val(localStorage.getItem('save_num_card'));
            setTimeout(function(){
                if($(".mercadopago-installments, .pagseguro-installments, select[name='mundipagg[parcel]']").is(':visible')){
                    update_parcel();
                }
    		}, 4000);
        }
        
        $(".mercadopago_cc_card_num, .pagseguro_cc_card_num, input[name='mundipagg[card_num]']").keyup(function(){
            num_card = $(this).val();
            localStorage.setItem('save_num_card', num_card);
            if(num_card.indexOf("_") >= 7){
                setTimeout(function(){
                    update_parcel();
                }, 1500);
            }
        });
        
    });
    </script>
    

    Só não consegui fazer funcionar no pagseguro...


  • Dev

    Olá @dtillmann tem como vc mandar o link da sua loja, pq minhas lojas testes não tem pagseguro para testar, eu testo pelo navegador mesmo, sem acessar ao código original para edição.