Retorno Automático
Paghiper for Laravel
oferece uma forma fácil de lidar com o retorno automático. O retorno automático da PagHiper
ocorrerá para a rota que você configurou no objeto Basic
, no parâmetro $notification_url
na criação do boleto bancário,
ou para a rota definida via resolvedor. Essa rota deve ser uma rota pública em sua
aplicação, e de preferência que não receba nenhum tratamento especial, por exemplo: middlewares, autenticação, etc.
Supondo que você possui uma rota nomeada como paghiper.notification
que aceita requisições POST
, e que essa foi
a rota utilizada, então isso será suficiente:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use DevAjMeireles\PagHiper\Facades\PagHiper;
Route::post('/payment/notification', function (Request $request) {
$notification = $request->input('notification_id'); // 👈 enviado pelo PagHiper
$transaction = $request->input('transaction_id'); // 👈 enviado pelo PagHiper
$notification = PagHiper::billet()->notification($notification, $transaction);
})->name('paghiper.notification');
No exemplo acima, $notification
será um array com os dados da notificação.
Injetando o \Illuminate\Http\Request
De forma auxiliar, você pode injetar uma instância de \Illuminate\Http\Request
ao invés de ter que definir
manualmente os parâmetros para o método notification
:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use DevAjMeireles\PagHiper\Facades\PagHiper;
Route::post('/payment/notification', function (Request $request) {
$notification = PagHiper::billet()->notification($request);
})->name('paghiper.notification');
PagHiper for Laravel
irá buscar os parâmetros necessários para a notificação automaticamente.
Cast Especial: BilletNotification
De forma especial para o retorno automático, Paghiper for Laravel
oferece o cast BilletNotification
, que quando
utilizado irá mapear a resposta da PagHiper para uma classe de objeto contendo muitos métodos úteis:
use Illuminate\Http\Request;
use DevAjMeireles\PagHiper\Facades\PagHiper;
use Illuminate\Support\Facades\Route;
use DevAjMeireles\PagHiper\Enums\Cast; // 👈
Route::post('/payment/notification', function (Request $request) {
$notification = PagHiper::billet(Cast::BilletNotification) // 👈
->notification($request);
})->name('paghiper.notification');
Métodos Disponíveis:
public function original(): Response
👆 resposta original, instância de \Illuminate\Http\Client\Response
public function type(): string
👆 tipo da notificação, pode ser billet
ou pix
public function transactionId(): string
👆 id da transação
public function orderId(): string
👆 $order_id
da transação
public function createDate(): Carbon
👆 data de criação do boleto como instância de \Illuminate\Support\Carbon
public function status(): string
👆 status da transação como string
public function pending(): bool
public function reserved(): bool
public function canceled(): bool
public function completed(): bool
public function paid(): bool
public function processing(): bool
public function refunded(): bool
👆 booleano para o status do boleto
Os demais métodos seguem a convenção de nomes da PagHiper:
public function paidDate(): \Illuminate\Support\Carbon
public function valueCents(): int
public function valueFeeCents(): int
public function valueCentsPaid(): int
public function latePaymentFine(): int
public function perDayInterest(): bool
public function earlyPaymentDiscountsDays(): int
public function earlyPaymentDiscountsCents(): int
public function openAfterDayDue(): int
public function shippingPriceCents(): int
public function discountCents(): int
public function numCartItems(): int
public function dueDate(): \Illuminate\Support\Carbon
public function bankSlip(): array
public function items(): array|\DevAjMeireles\PagHiper\DTO\Objects\Item
public function payer(): \DevAjMeireles\PagHiper\DTO\Objects\Payer
Método Especial: modelable
De forma estratégica, ao passar uma instância de um modelador do Laravel como Payer
do boleto bancário, o order_id
na PagHiper receberá uma referência da classe e ID do modelador para que posteriormente no retorno automático você possa utilizar o método modelable
para obter o modelador facilmente.
Essa abordagem fará com que o order_id
do boleto bancário fique, por exemplo, da seguinte maneira na PagHiper: 11|App\Model\User:1
, onde 11
é o número do $order_id
que você especificou na criação da classe Basic
. Não há preocupação enquanto a este formato, uma vez que o order_id
do boleto bancário é para uso interno, e não é exibido ao cliente.
Dessa forma você então poderá utilizar o método modelable
:
use App\Models\User; // 👈
use DevAjMeireles\PagHiper\DTO\Objects\Basic;
use DevAjMeireles\PagHiper\DTO\Objects\Item;
use DevAjMeireles\PagHiper\Enums\Cast; // 👈
use DevAjMeireles\PagHiper\Facades\PagHiper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
// criando o boleto para o modelador User:1 👇
$billet = PagHiper::billet()
->create(
Basic::make()
->set('order_id', 1433)
->set('days_due_date', 2)
->set('type_bank_slip', 'boletoA4')
->set('discount_cents', 0),
User::find(1), // 👈
Item::make()
->set('item_id', 12)
->set('description', 'Kit de Malas de Viagem')
->set('quantity', 1)
->set('price_cents', 25000));
// retorno automático 👇
Route::post('/payment/notification', function (Request $request) {
$notification = PagHiper::billet(Cast::BilletNotification) // 👈
->notification($request);
})->name('paghiper.notification');
No exemplo acima, $notification
será uma instância da classe PagHiperBilletNotification
contendo o método modelable()
.
Ao utilizar o método $notification->modelable()
PagHiper for Laravel
irá recuperar o usuário automaticamente:
$user = $notification->modelable(); // 👈
No exemplo acima, $user
será uma instância de \App\Models\User:1
.
Tratamento de Excessão
Como é de se esperar, caso haja algum erro na tentativa de capturar o modelador, uma excessão do tipo
NotificationModelNotFoundException
ou ModelNotFoundException
será lançada. Para evitar esse comportamento
você pode utilizar o método modelable
com o parâmetro false
:
$user = $notification->modelable(false); // 👈
Dessa forma, se houver algum erro ou o modelador não for encontrado, o retorno será null
.
Casts
Você também pode usar os outros casts disponíveis para transformar a resposta.