【Laravel】Stripeのカスタマーポータルを表示する

えび

Laravelで、Cashierを利用してStripeの請求カスタマーポータルを表示する

パッケージインストール & マイグレーション

  • StripeCashierパッケージをインストール
composer require laravel/cashier
  • インストール後、Cashierにより登録されたマイグレーションを実行
php artisan migrate

これにより、usersテーブルstripe_idカラムが追加される
他、課金用テーブルなども追加されるけど今回使用するのはこのカラムだけ

APIキーを設定

  • .env
STRIPE_KEY= pk_test_XXXXXXXXXXXXX
STRIPE_SECRET=sk_test_XXXXXXXXXXXX

キー情報は、Stripe管理画面「開発者」→ APIキー → 標準キーで確認ができる

請求ポータルを表示させる

今回は、usersテーブルstripe_idカラムに有効な顧客IDが入っている前提で進める

  • UserモデルBillableを追加
    これがないと、ポータルを開くためのメソッドが使用できないので注意
<?php

namespace App\Models;

// ⭐️ 追加
use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    // ⭐️ 追加
    use Billable;
}

続いて、ポータル表示用のルーティング設定

  • routes/web.php
Route::get('/billing-portal', function (\Illuminate\Http\Request $request) {
    return $request->user()->redirectToBillingPortal();
});

ここで使用しているredirectToBillingPortal()メソッドは
デフォルトではポータルでの作業完了後にはhomeルートに戻るように設定されている
そのリダイレクト先を変更するには、第一引数にルートを設定してあげる

Route::get('/billing-portal', function (\Illuminate\Http\Request $request) {
    return $request->user()->redirectToBillingPortal(route('billing'));
});

これで、ログインした状態で /billing-portalにアクセスする
ボタンを表示する場合はこんな感じ

<a href="{{ route('billing-portal') }}">ポータルを表示する</a>

ポータルが表示された