Ramilton Costa Gomes Junior
Criador Ramilton Costa Gomes Junior 04/09/2017

Boa noite Carlos, tudo bem?

 

Estou com um erro. quando eu clico no boleto aparece uma erro. "http://127.0.0.1:8000/pagseguro-payment-billet 500 (Internal Server Error)".

E quando eu tento executar outra vez aparece a seguinte mensagem de erro.

Failed to load resource: the server responded with a status of 500 (Internal Server Error) e o lilnk pagseguro-payment-billet. 

Eu fui e abaixei o seu projeto e o erro continuou. Vc poderia me dar uma luz o que está acontecendo?

 

Abraços,

 

Manager Carlos Ferreira 04/09/2017

Olá, Ramiltom!
Tudo bem?

Ajudo sim, claro!

Preciso de ver mais detalhes do erro para te ajudar.
Como a chamada é em ajax precisa abrir o console do navegador (Tecla F12 -> Guia "Console")

Vai na requisição feita e clica em cima para ter mais detalhes do erro.

Muitos alunos estão tendo problemas com o PagSeguro porque estão passando os dados "sender" errado.
O e-mail precisa conter @sandbox.pagseguro.com.br

Por exemplo:
public function getSender() {
    return [
        'senderName' => $this->user->name,
        'senderAreaCode' => '64',//$this->user->area_code,
        'senderPhone' => '981701406',//$this->user->phone,
        'senderEmail' => 'carlos@sandbox.pagseguro.com.br',//$this->user->email,
        'senderCPF' => '04151053159',//$this->user->cpf,
    ];
}

Outro erro muito comum é no "shippingAddressCountry" passar Brasil, e não BRL.

Fico no seu aguardo amigo.

Carlos Ferreira
Criador Ramilton Costa Gomes Junior 04/09/2017

Eu coloquei o mesmo email que está no sendbox. quando eu depurei com f12 apareceu a mesma mensagem. e quando eu clico no link apareceu essa página.

 

Whoops, looks like something went wrong.

1/1MethodNotAllowedHttpException in RouteCollection.php line 251:

  1. in RouteCollection.php line 251
  2. at RouteCollection->methodNotAllowed(array('POST')) in RouteCollection.php line 238
  3. at RouteCollection->getRouteForMethods(object(Request), array('POST')) in RouteCollection.php line 176
  4. at RouteCollection->match(object(Request)) in Router.php line 533
Ramilton Costa Gomes Junior
Manager Carlos Ferreira 04/09/2017

O erro é no AJAX da view, que tem algum erro, e ao clicar em enviar faz o redirecionamento via GET e a rota de gerar o link de pagamento é POST.

Ou no AJAX colocou o tipo de envio errado.

Esse erro "MethodNotAllowedHttpException" é porque o verto http está errado.
Sua rota deve ser do tipo ->post() e seu ajax deve fazer o envio via post.

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();
    });
}

Carlos Ferreira
Criador Ramilton Costa Gomes Junior 04/09/2017

A minha função paymentBillet está assim.

 

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();

        });

    }

 

E meu arquivo de rota esta assim:

 

$this->group(['middleware' => 'auth'], function(){

    /*

     * Routes Cart

     */

    $this->get('meio-pagamento', '[email protected]')

            ->middleware('check.qty.cart')

            ->name('method.payment');

    $this->post('pagseguro-getcode', '[email protected]')->name('pagseguro.code.transparent');

    $this->post('pagseguro-payment-billet', '[email protected]')->name('pagseguro.billet');

 

Ou seja,

 

o envio está sendo via POST conforme vc mencionou.

 

Abraços,

Ramilton Costa Gomes Junior
Manager Carlos Ferreira 04/09/2017

Certo!

E o método billet() existe no Controller PagSeguroController?
public function billet()
{

}

Carlos Ferreira
Criador Ramilton Costa Gomes Junior 04/09/2017

Está assim.

 

 public function billet(Request $request, PagSeguro $pagseguro, Order $order)
    {
        $response = $pagseguro->paymentBillet($request->sendHash);
       
        $cart = new Cart;
        $order->newOrderProducts($cart, $response['reference'], $response['code']);
        $cart->emptyCart();
       
        return response()->json($response, 200);
    }

Ramilton Costa Gomes Junior
Manager Carlos Ferreira 04/09/2017

Me envia o seu código para que eu possa analisar os detalhes e encontrar o erro.

Pode subir para o GitHub ou Google Drive, e me enviar o link.

Se quiser enviar em particular, pode enviar no meu e-mail: [email protected]

Vou analisar e identificar o erro =D

No aguardo.

Carlos Ferreira
Criador Ramilton Costa Gomes Junior 04/09/2017

Bom dia Carlos,

 

Já enviei para o seu email.

 

Muito Obrigado.

Ramilton Costa Gomes Junior
Manager Carlos Ferreira 04/09/2017

Não recebi seu e-mail, enviei um e-mail cobrando, fico no aguardo! =D

Carlos Ferreira
Manager Carlos Ferreira 04/09/2017

Fala Ramilton!
Tudo bem?

Hoje recebi o seu e-mail com os códigos, e fiz os testes e identifiquei o problema.

Vou te contar o que fiz para resolver.

Não tinha este erro de MethodNotAllowedHttpException.

O erro foi de ClientException, e informava que o número de telefone era inválido.
-----------------------------------------------------------------------
Client error: `POST https://ws.sandbox.pagseguro.uol.com.br/v2/transactions` resulted in a `400 Bad Request` response:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><errors><error><code>53020</code><message>sender phone is re (truncated...)
-----------------------------------------------------------------------

Fui no método getSender() e informei manualmente os dados:
public function getSender()
{
    return [
        'senderName' => $this->user->name,
        'senderAreaCode' => '64',//$this->user->area_code,
        'senderPhone' => '',//$this->user->phone,
        'senderEmail' => '[email protected]',//$this->user->email,
        'senderCPF' => '13917576104',//$this->user->cpf,
    ];
}

Ai gerou outro erro, novamente ClientException, veja:
-----------------------------------------------------------------------
Client error: `POST https://ws.sandbox.pagseguro.uol.com.br/v2/transactions` resulted in a `400 Bad Request` response:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><errors><error><code>53031</code><message>shipping address c (truncated...)
-----------------------------------------------------------------------

Desta vez por causa dos dados do endereço, fiz assim e funcionou:
public function getShipping()
{
    return [
        'shippingType' => '1',
        'shippingAddressStreet' => 'Av. PagSeguro',//$this->user->street,
        'shippingAddressNumber' => '9999',//$this->user->number,
        'shippingAddressComplement' => '99o andar',//$this->user->complement,
        'shippingAddressDistrict' => 'Jardim Internet',//$this->user->district,
        'shippingAddressPostalCode' => '99999999',//$this->user->postal_code,
        'shippingAddressCity' => 'Cidade Exemplo',//$this->user->city,
        'shippingAddressState' => 'SP',//$this->user->state,
        'shippingAddressCountry' => 'BRL',//$this->user->country,
    ];
}


Agora a moral da história, por que o seu não funcionou e por que depois que informei manualmente funcionou?
Porque estava faltando informações. Ou seja, essas informações precisam ser informadas para não dar erros como este.
Basta ir na tabela users e preencher todos os dados do usuário para que isso não aconteça novamente.

Espero ter te ajudado! =D

Carlos Ferreira
Criador Ramilton Costa Gomes Junior 04/09/2017

Então era falta de informações. Eu vou fazer esse teste e lhe aviso. Outra coisa, como vc utilizou esse textarea personalizado.

 

Abraços,

Ramilton.

Ramilton Costa Gomes Junior
Manager Carlos Ferreira 04/09/2017

Isso amigo, era falta de informações.

Você fala deste textarea do fórum?
Utilizei o TinyMCE: https://www.tinymce.com/
Se tiver dificuldades para implementar basta retornar que te ajudo! :-)

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!