Skip to content

Invoices

Listen for the OrderInvoiceAvailable event (in the Laravel\Cashier\Events namespace). When a new order has been processed, you can grab the invoice by:

$invoice = $event->order->invoice();
$invoice->view(); // get a Blade view
$invoice->pdf(); // get a pdf of the Blade view
$invoice->download(); // get a download response for the pdf

To list invoices, access the user’s orders using: $user->orders->invoices(). This includes invoices for all orders, even unprocessed or failed orders.

For example:

// Your blade view file
<ul class="list-unstyled">
@foreach(auth()->user()->orders as $order)
<li>
<a href="/download-invoice/{{ $order->id }}">
{{ $order->invoice()->id() }} - {{ $order->invoice()->date() }}
</a>
</li>
@endforeach
</ul>
// routes/web.php
Route::middleware('auth')->get('/download-invoice/{orderId}', function($orderId){
return (request()->user()->downloadInvoice($orderId));
});

It’s possible to find a specific invoice by its order number.

$order = $user->orders()->first();
$user->findInvoice($order->number);

You can also retrieve the invoice using the order id:

$user->findInvoiceByOrderId($order->id);

If you wish to show a 404 error page whenever the invoice is not found, you may use the findInvoiceOrFail and findInvoiceByOrderIdOrFail methods on your billable model.

$order = $user->orders()->first();
$user->findInvoiceOrFail($order->number);
$user->findInvoiceByOrderIdOrFail($order->id);

If the invoice cannot be found, a \Symfony\Component\HttpKernel\Exception\NotFoundHttpException will be thrown.

If the invoice doesn’t belong to the user, it will throw a \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException.

In a standard Laravel application those exceptions will be turned in a proper 404 or respectively 403 HTTP response.