problemas ao pegar os dados do carrinho

Ari Lima Criador 02/11/2017
Ari Lima

Boa noite mestre... estou com problemas ao pegar os dados do carrinho segue o código:
https://pastebin.com/aAJXJg8h

Manager Carlos Ferreira 02/11/2017
Carlos Ferreira

Olá, Ari!
Tudo bem?

Preciso de mais detalhes do erro para poder te ajudar! :-)

Erros muitos comuns com o PagSeguro é porque não definiu os dados do usuário.

É um exigência de segurança da API do PagSeguro, o sistema antifraude deles exige que todos os dados do usuário sejam enviados junto.

Vai na tabela users e preenche todas as informações a respeito do usuário (cpf, nome, email, endereço e etc).

90% dos erros é por conta disso.

No aguardo! :-)

Criador Ari Lima 02/11/2017
Ari Lima

Olá CArlos..coloquei alguns códigos no drive https://drive.google.com/open?id=0B01Ugdk-t_D_bVhMcVZvbXJIdzg

 

o erro que aparece para mim é esse alert Fail request... :-(

function paymentBillet()

    {

        var sendHash = PagSeguroDirectPayment.getSenderHash();

 

        var data = $('#form').serialize()+"&sendHash="+sendHash;

 

        $.ajax({

            url: "{{route('pagseguro.billet')}}",

            method: "POST",

            data: data

        }).done(function(data){

            console.log(data);

            

            if(data.success) {

                location.href=data.payment_link;

            } else {

                alert("Falha!");

            }

        }).fail(function(){

            alert("Fail request... :-(");

        }).always(function(){

            $(".preloader").hide();

        });

    }

veja se dá para me ajudar amigo

Criador Ari Lima 02/11/2017
Ari Lima

CArlos enviei o FONTE+SQL para o email [email protected] OBRIGADO MESTRE

Manager Carlos Ferreira 03/11/2017
Carlos Ferreira

Olá, Ari!

Primeiro, obrigado por não enviar o código inteiro em anexo (muitos alunos fazem isso rsrs).

Seu arquivo .env estava com o nome errado _env (acho que fez isso para conseguir compactar!), não precisar este arquivo porque tem informações confidenciais.

Embora você tenha enviado o projeto todo, não especificou exatamente em qual parte acontece o erro. Tive que analisar as rotas e deduzir que é a rota: /pagseguro-transparent-card

No arquivo pagseguro-transparente.blade.php debuguei a configuração da URL do PagSeguro e está errada:
{{dd(config('pagseguro.url_transparente_js_sandbox'))}}

Talvez seja: config('pagseguro.url_transparent_js')

Enfim, embora não passou detalhes do erro (onde chegar nele) encontrei esse erro, talvez seja isso também.

Uma dica final amigo, vi que em seu código tem muitos códigos misturados, HTML, CSS e JS. Utiliza o recurso stacks do laravel, isso vai te ajudar muito! :-)

Criador Ari Lima 03/11/2017
Ari Lima

Boa noite Carlos, fiz a alteração que vc citou acimas mas n funcionou :( ....

Gravei um vídeo explicando o q está acontecendo minha app...

Enviei o link do Vídeo para o Email [email protected]

 

Desde já agradeço por todos os seus ensinamentos..fique com Deus...

Manager Carlos Ferreira 05/11/2017
Carlos Ferreira

Fala Ari!
Tudo bem?

Obrigado por fazer o vídeo isso me ajuda a te ajudar!

Primeiro ponto sobre aquela demora no carregamento, isso pode ser porque o seu código tem muito JS misturado com HTML e etc, utilize slack, ou pode ser simplesmente porque o ambiente local tá pesado (muito comum com o vagrant).


No final você mostrou o erro que eu queria ver, que é exatamente a mensagem que a API do PagSeguro retorna. A mensagem de erro diz "item description i (truncated)"
Isso pode ser porque a descrição do produto(s) está errada, ou seja, faltando.

Não consegui testar o projeto, porque quando vou para ver o curso e clico para ver os detalhes para poder adicionar no carrinho, ele dá o erro na view course.blade.php

O que eu sugiro para você debugar este projeto?
Vai trait PagSeguroTrait e coloca alguns valores manualmente, por exemplo:
public function getItems()
{
    return [
        'itemId1' => '0001',
        'itemDescription1' => 'Produto PagSeguroI',
        'itemAmount1' => '99999.99',
        'itemQuantity1' => '1',
        'itemWeight1' => '1000',
        'itemId2' => '0002',
        'itemDescription2' => 'Produto PagSeguroII',
        'itemAmount2' => '99999.98',
        'itemQuantity2' => '2',
        'itemWeight2' => '750',
    ];
}


// O e-mail de testes precisa ser sandbox (https://sandbox.pagseguro.uol.com.br/comprador-de-testes.html)
public function getSender()
{
    return [
        'senderName'        => 'Carlos Ferreira',
        'senderAreaCode'    => 99,
        'senderPhone'       => 99999999,
        'senderEmail'       => '[email protected]',
        'senderCPF'         => 11475714734,
    ];
}

public function getShipping()
{
    return [
        'shippingType'                  => '1',
        'shippingAddressStreet'         => 'Av. PagSeguro',
        'shippingAddressNumber'         => 9999,
        'shippingAddressComplement'     => '99o andar',
        'shippingAddressDistrict'       => 'Jardim Internet',
        'shippingAddressPostalCode'     => 99999999,
        'shippingAddressCity'           => 'Cidade Exemplo',
        'shippingAddressState'          => 'SP',
        'shippingAddressCountry'        => 'BRL',
    ];
}


Se funcionar é porque os dados estão incoerentes, ou seja, faltando algo (pode ser algum detalhe sobre o produto ou usuário).


Uma dica de melhoria, no método getItems() deixa assim, essa linha:
$items["itemAmount{$posistion}"] = number_format($item['item']->price, 2, '.', '');

Criador Ari Lima 13/11/2017
Ari Lima

Boa noite CArlos..envie outro vídeo para o seu email explicando o erro... desde ja agradeço amigo

Manager Carlos Ferreira 13/11/2017
Carlos Ferreira

Olá, Ari!

Pode sempre contar comigo.

Não fica sofrendo com algo por muito tempo, sempre que precisar estou aqui do outro lado disposto a ajudar! :-)

Erro 500 (foi o que retornou) é algum erro interno da aplicação.
Ou seja, não é um erro na requisição AJAX, e sim, algum erro da aplicação no momento da consulta.

No finalzinho do vídeo você mostrou a parte que eu queria, porém não foi da sua aplicação.
Queria ver exatamente o erro (ao clicar no link da requisição AJAX) e na guia "Preview"

Para ficar mais fácil de identificar o erro, faça o seguinte, crie um método GET para gerar o boleto:
$this->get('pagseguro-payment-billet', '[email protected]')->name('pagseguro.billet');
$this->post('pagseguro-payment-billet', '[email protected]')->name('pagseguro.billet');

Acessa esse endereço direto pelo navegador (lembra de deixar itens no carrinho e estar logado):
http://localhost:8000/nomepastaprojeto/public/pagseguro-payment-billet
Isso vai te dá uma ideia melhor do erro.

Uma dica amigo, cria um virtualhost para acessar esse projeto de forma mais fácil :-)

Fico no aguardo.

Criador Ari Lima 13/11/2017
Ari Lima

Boa noite Carlos... consegui avançar...acho q o erro estava AQUI --> 'senderCPF' => '', eu estava passando o cpf errado...

 

 

DEsde de ja muiiito obrigado pela atenção !

Criador Ari Lima 21/11/2017
Ari Lima

Bom dia CArlos...enviei um vídeo explicando a dúvida para o seu email [email protected]

 

1 - quando faço as transações (tanto por boleto quanto por cartão de crédito) lá no sandbox aparece que a transação foi feita atraveś de boleto sendo q efeituei a compra atraves do cartao...


2 - como faço para deixar as opções de parcelas dde cartão de crédito para os usuário...

 

Manager Carlos Ferreira 21/11/2017
Carlos Ferreira

Olá, Ari!
Como vai?

Primeiro, quero lhe parabenizar pela forma que implementou a parte de cartão e boleto, ficou muito bonito.

-----------------------------------------------------------------------------

Sobre sua dúvida, está correto a forma como implementou, no caso a API de Sandbox não recusou a transação, mas pode recusar em caso de dados inválidos (como cpf por exemplo), neste caso você pode, ou melhor DEVE validar estes dados com Laravel antes de enviar para para o PagSeguro.

-----------------------------------------------------------------------------

Sobre sua outra pergunta, sobre as opções:
installmentQuantity => Quantidade de parcelas
installmentValue => Valor da parcela
noInterestInstallmentQuantity => Quantidade de parcelas sem juros (sem taxas)

-----------------------------------------------------------------------------

Para definir o tipo que é a transação precisa alterar em:
'paymentMethod' => 'boleto', // Para boleto
ou
'paymentMethod' => 'creditCard',// Para cartão

Quando coloca "creditCard" o valor final precisa ser correto (coerente)

No seu caso retornou erro que installmentQuantity foi errado.

Criador Ari Lima 21/11/2017
Ari Lima

Boa noite Carlos.. obrigado pelo o elogio :) aprendi tudo com vc :)

 

Irei validar os dados do dono do cartão com o laravel e irei esperar vc disponibilizar a parte do parcelamento do cartão...

 

vc tem alguma previsao de quando consegue disponibilizar isso? pois certamente sua agenda deve cheiiiia

 

tem algum tutorial? alguma luz onde eu possa tentar implementar sozinho( mas prefiro suas aulas hehe ) ?

 

 

Desde de já agradeço todos os seus ensinamentos !

Criador Ari Lima 22/11/2017
Ari Lima

Bom dia Carlos envie outro vídeo para o seu email :) 

Manager Carlos Ferreira 28/11/2017
Carlos Ferreira

Enviei no seu e-mail o link para download do projeto atualizado, com opção de pagamento para Cartão e Boleto. No caso de cartão é possível escolher a quantidade de parcelas desejadas.

Criador Ari Lima 29/11/2017
Ari Lima

Olá Carlos obrigado :)

 

enviei outro vídeo para o seu email explicando o que está acontecendo. desde já obrigado

Criador Ari Lima 30/11/2017
Ari Lima

Boa tarde Carlos, td bem amigo ?

 

Como faço para ao invés de usar o pagseguro transparente usar o lightbox ? Assisti as aulas de lightbox mas não entendi onde faço o INSERT no bd ...

A ideia seria que quando clicasse em finalizar compra no carrinho abrisse o lightbox. com as aulas eu até consigo fazer abrir o lightbox mas n consigo inserir no banco usando o lightbox...teria como me ajudar ?

 

Desde já obrigado mestre :)

 

 

 

Criador Ari Lima 30/11/2017
Ari Lima

ESSA É A PÁGINA DO LIGHTBOX ONDE EU CHAMO A FUNÇÃO PARA CADASTRAR AS ORDENS DE PEDIDO NO BANCO ?

 

<body>

<a href="#" class="btn-buy">Finalizar Compra</a>

{!! csrf_field() !!}

<div class="msg-return"></div>

<div class="preloader" style="display: none;">Carregando...</div>

<!--Jquery-->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script>

$(function(){

$('.btn-buy').click(function(){

var token = $('input[name=_token]').val();

$.ajax({

url: "{{ route('pagseguro.lightbox.code') }}",

method: "POST",

data: {_token: $('input[name=_token]').val()},

beforeSend: startPreloader()

}).done(function(code){

lightbox(code);

}).fail(function(){

alert("Erro inesperado, tente novamente!");

}).always(function(){

stopPreloader();

});

return false;

});

});

 

function lightbox(code)

{

var isOpenLightbox = PagSeguroLightbox({

code: code

}, {

success: function(transactionCode){

$('msg-return').html("Pedido realizado com sucesso: "+transactionCode)

},

abort: function(){

alert("Compra Abortada!");

}

});

if ( !isOpenLightbox ){

location.href="{{ config('pagseguro.url_redirect_after_request') }}"+code;

}

}

function startPreloader()

{

$('.preloader').show();

}

function stopPreloader()

{

$('.preloader').hide();

}

</script>

<script src="{{ config('pagseguro.url_lightbox_sandbox') }}"></script>

</body>

</html>

Manager Carlos Ferreira 01/12/2017
Carlos Ferreira

Olá, Ari!
Tudo bem?

Sobre Lightbox:
Primeiro passo é recuperar o TOKEN, isso você com AJAX, igual está fazendo.
Acredito que até aqui está tudo ok. Certo?

Uma vez que recuperou o token já pode iniciar a transação com Lightbox, neste estágio precisa informar o token que já recuperou no estágio anterior.

function lightbox(code)
{
    PagSeguroLightbox({
        code: code
        }, {
        success : function(transactionCode) {
            // Após ter realizado com sucesso retorna esse "transactionCode"
            // Você precisa inserir isso no banco de dados, pois é o identificador da transação.
            // Se quiser buscar mais detalhes desta transação "transactionCode" precisa consultar a API do PagSeguro para devolver as informações
            // Link: https://dev.pagseguro.uol.com.br/documentacao/pagamento-online/pagamentos/consultando-por-codigo-de-transacao
        },
        abort : function() {
            alert("Falha inesperada...");
        }
    });
}

Qualquer dúvida me retorna. Tá bom?

Criador Ari Lima 03/12/2017
Ari Lima

boa noite CArlos..td bem amigo ? 

 

mandei o link de outro vídeo para o seu email ...

Criador Ari Lima 04/12/2017
Ari Lima

Boa noite Carlos, teria como vc implementar o pagamento via lightbox(fazendo a inserção dos dados na tabela ORDERS e puxando o retorno do pagseguro) pois a transparencia n está funcionando de jeito nenhum :( 

 

 

ja tentei de tudo aqui e não consigo :(

 

 

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!