0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Stripe CLI x Laravel Cashierを使い、ローカルでWebhook経由でイベントを受信する方法

Posted at

この記事では

  • 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_KEYSTRIPE_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を使うとイベントがローカルで受信できます。
これにより、userssubscriptions, subscription_items などのテーブルに正しい情報が作られます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?