Erro ao finalizar a compra
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,
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.
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:
- in RouteCollection.php line 251
- at RouteCollection->methodNotAllowed(array('POST')) in RouteCollection.php line 238
- at RouteCollection->getRouteForMethods(object(Request), array('POST')) in RouteCollection.php line 176
- at RouteCollection->match(object(Request)) in Router.php line 533
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();
});
}
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', 'StoreController@methodPayment')
->middleware('check.qty.cart')
->name('method.payment');
$this->post('pagseguro-getcode', 'PagSeguroController@getCode')->name('pagseguro.code.transparent');
$this->post('pagseguro-payment-billet', 'PagSeguroController@billet')->name('pagseguro.billet');
Ou seja,
o envio está sendo via POST conforme vc mencionou.
Abraços,
Certo!
E o método billet() existe no Controller PagSeguroController?
public function billet()
{
}
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);
}
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.
Bom dia Carlos,
Já enviei para o seu email.
Muito Obrigado.
Não recebi seu e-mail, enviei um e-mail cobrando, fico no aguardo! =D
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
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.
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! :-)
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!