Closed edsonrodsilva closed 7 years ago
@edsonrodsilva
Geralmente o callback é um classe de negócio, ou mesmo uma classe simples para resolver um determinado problema, nesse caso, a resposta do PagSeguro. Um controller é uma classe "complexa" do framework que serve apenas para tratar as requisições que são feitas. Para instanciar um controller geralmente é necessário uma série de injeções (App, Request, Response, etc...) que geralmente o framework quem faz.
Resumindo, não use controllers no callback. Use uma classe simples.
Olá Isaque,
Cara ja tentei de tudo, você poderia dar um exemplo de utilizacao?
Apenas desta forma consigo o retorno do pagseguro, fazendo um log.
'routes' => [ 'notification' => [ 'callback' => function ($information) { // Callable \Log::debug(print_r($information, 1)); }, ], ],
Mas eu apenas gastaria de passar isto para uma classe qualquer e um metodo, iqual este exemplo: 'callback' => ['MyNotificationClass', 'myMethod'], // Callable
Mas nao entendo porque nao funciona, veja como esta no meu config.
'routes' => [ 'redirect' => [ 'route-name' => 'pagseguro-retorno', // Criar uma rota com este nome ], 'notification' => [ //'callback' => ['app\Http\Services\PedidoServices', 'notification'], // 'callback' => ['PedidoService', 'notification'], // Callable 'credential' => 'default', // Callable 'route-name' => 'pagseguro-notificacao', // Criar uma rota com este nome ], ],
Minha rota esta assim: Route::post('/pagseguro/notificacao', [ 'uses' => '\laravel\pagseguro\Platform\Laravel5\NotificationController@notification', 'as' => 'pagseguro-notificacao', ]);
Valeu.
@edsonrodsilva
Não esta funcionando porque possivelmente não esta sendo encontrado essa classe "PedidoService", ou não há o método notification nessa classe, ou coisas assim, tornando o callable inválido.
Tenta simular isso num controller / action qualquer (ou criar um teste) para verificar se sua classe / método estão ok:
$callable = function ($information) { // Callable
$myObject = new \PedidoService();
$notify = $myObject->notification($information);
}
$callable('ABC');
O objetivo disso é ver se há problemas com PedidoService:notification Se funcionar é um callable válido.
Obs.: Pelo que você escreveu "['PedidoService', 'notification']" a classe PedidoService não tem um namespace. Tente colocar a classe completa caso esse PedidoService seja um alias do Laravel para acessar outra classe.
Ou você implementa o callback como no exemplo que fiz acima para ficar assim:
'notification' => [
'callback' => function ($information) { // Callable
$service = new \PedidoService();
$service->notification($information);
}
'credential' => 'default', // Callable
'route-name' => 'pagseguro-notificacao', // Criar uma rota com este nome
],
De qualquer forma, não esqueça de se certificar que esse callable é válido antes de usar.
Porque eu não consigo receber as notificacão do pagseguro vejam como esta meu callback. O objetivo é tratar as notificacoes no metodo notification do meu controller Por favor alguem me da uma luz.
'routes' => [ 'redirect' => [ 'route-name' => 'pagseguro-retorno', // Criar uma rota com este nome ], 'notification' => [ 'callback' => ['\app\Http\Controllers\Loja\CheckoutController', 'notification'], // Callable callback to Notification function (notificationInfo) : void {} 'credential' => 'default', // Callable resolve credential function (notificationCode) : Credentials {} 'route-name' => 'pagseguro-notificacao', // Criar uma rota com este nome ], ],