この記事では
- Laravel 10系
- Laravel Cashier15系
- Stripe API バージョン2023-10-16
の前提で、ローカルで決済テストの実施方法をまとめています。
参考記事に記載のない細かい部分を自分用メモとして公開していますので、
同じ技術スタックの方は参考にしてみてください。
Laravel Cashier公式ドキュメント
https://readouble.com/laravel/10.x/ja/billing.html#handling-stripe-webhooks
ほとんどここに書いてある内容と同じです。
https://qiita.com/hideokamoto/items/effccc6b1073b677bd80
.env
# Stripe
STRIPE_KEY=your-stripe-key
STRIPE_SECRET=your-stripe-secret
STRIPE_WEBHOOK_SECRET=your-stripe-webhook-secret
3つのキーが正しくセットされていることを確認。
STRIPE_KEY
とSTRIPE_SECRET
はStripeダッシュボード > 開発者 > APIキーから取得。
STRIPE_WEBHOOK_SECRET
は後述。
ターミナルで
stripe login
してから、
stripe listen --forward-to 127.0.0.1:8000/stripe/webhook
を実行すると、
> Ready! You are using Stripe API Version [2023-10-16]. Your webhook signing secret is whsec_000000000000000 (^C to quit)
whsec_000000000000000
の部分がwebhook_secretとなるので、.env
のSTRIPE_WEBHOOK_SECRETにセット。
route.php
Route::controller(WebhookController::class)->group(function () {
Route::post('/stripe/webhook', 'handleWebhook');
})
あとから各webhookごとにカスタマイズができるように、Laravel Cashier側のWebhookController
を継承したクラスを作っています。
(handleInvoicePaid
を実装して決済が完了したときに、ユーザー情報を更新するような仕様がある場合など)
WebhookController.php
<?php
namespace App\Http\Controllers;
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
class WebhookController extends CashierController
{
}
あとは、Stripeダッシュボードで操作をしたり、APIを使うとイベントがローカルで受信できます。
これにより、users
やsubscriptions
, subscription_items
などのテーブルに正しい情報が作られます。