【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装
こちらの連載記事では、LaravelとStripeを使用して企業サイト兼Eコマース(ECサイト)を作成していきます。
Laravelのプロジェクト作成からStripeの実装まで行い、最終的に単発決済・サブスクリプションの実装までを目指します。
シリーズ
【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8
ちなみにこちらの記事は、Easy E-Commerce Using Laravel and Stripeという書籍をもとに執筆しています。
今回は、請求書ダウンロード機能を実装していきます。
請求書ダウンロード機能
まずは請求書ダウンロード機能を実装していきます。
まずはルーティングの作成からしていきましょう。
/routes/web.php
Route::get('invoices', 'SubscriptionsController@invoices')->name('invoices');
次にSubscriptionController内にinvoicesアクションを追加します。
/app/Http/Controllers/SubscriptionsController.php
public function invoices()
{
$user = Auth::user();
return view('subscriptions.invoices', compact('user'));
}
次に各サブスクリプションの支払い情報を表示するinvoice.blade.phpを作成します。
/resources/views/subscriptions/invoices.blade.php
@extends('app') @section('content') <table class="table"> @foreach ($user->invoices() as $invoice) <tr> <td>{{ $invoice->date() }}</td> <td>{{ $invoice->total() }}</td> <td><a href="/invoices/download/{{ $invoice->id }}">Download Receipt</a></td> </tr> @endforeach </table> @endsection
invoicesという関数が登場しますが、こちらはLaravel Cashier独自のメソッドとなります。
使用できる関数自体は/vendor/laravel/cashier/src/Invoice.phpに書かれているため、参考にしてみてください。
また、こちらの記事にも解説が記載されています。
Laravel Cashier - Laravel - The PHP Framework For Web Artisans
次に、請求書ダウンロード機能に関するルーティングを追加しましょう。
/routes/web.php
Route::get('invoices/download/{id}','SubscriptionsController@downloadInvoice');
/app/Http/Controllers/SubscriptionsController.php
public function downloadInvoice($id) { return Auth::user()->downloadInvoice($id, [ 'header' => 'We Dew Lawns', 'vendor' => 'WeDewLawns', 'product' => Auth::user()->stripe_plan, 'street' => '123 Lawn Drive', 'location' => 'Lawndale NC, 28076', 'phone' => '703.555.1212', 'url' => 'www.wedewlawns.com', ]); }
downloadInvoiceメソッドに関してはドキュメントに説明があります。
ルートやコントローラの中でdownloadInvoiceメソッドを使うと、そのインボイスのPDFダウンロードを生成できます。このメソッドはブラウザへダウンロードのHTTPレスポンスを正しく行うHTTPレスポンスを生成します。
Laravel Cashier 5.8 Laravel
実際にinvoices.blade.phpのDownload Receiptリンクをクリックしてみると、以下のような請求書をダウンロードすることができます。
もしダウンロードしたReceiptのフォーマットをカスタマイズしたいのであれば、以下の手順でvendorからreceipt.blade.phpをviewsディレクトリにコピーしましょう。
$ php artisan vendor:publish Which provider or tag's files would you like to publish?: [0 ] Publish files from all providers and tags listed below [1 ] Provider: BeyondCode\DumpServer\DumpServerServiceProvider [2 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider [3 ] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider [4 ] Provider: Illuminate\Mail\MailServiceProvider [5 ] Provider: Illuminate\Notifications\NotificationServiceProvider [6 ] Provider: Illuminate\Pagination\PaginationServiceProvider [7 ] Provider: Laravel\Cashier\CashierServiceProvider [8 ] Provider: Laravel\Tinker\TinkerServiceProvider [9 ] Tag: config [10] Tag: laravel-errors [11] Tag: laravel-mail [12] Tag: laravel-notifications [13] Tag: laravel-pagination > Provider: Laravel\Cashier\CashierServiceProvider Copied Directory [/vendor/laravel/cashier/resources/views] To [/resources/views/vendor/cashier] Publishing complete.
上記の流れで、/resources/views/vendor/cashier/receipt.blade.phpが生成されているはずです。
連載記事
【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8