Laravel×Stripe連携のテスト時に、なぜngrokとWebhookが必要なのか?
Stripeの決済機能をLaravelアプリに組み込もうとすると、ngrokとWebhookの設定が必要になる場面があります。
この2つ、初めて聞くと「なんでこんなものが必要なの?」と疑問に思うかもしれません。
この記事では、それぞれの役割と必要性を分かりやすく解説します!
✅ Webhookってそもそも何?
Webhookとは、外部サービスからあなたのアプリへ通知を送るための仕組みです。
Stripeでは、ユーザーが支払いを完了した後、
「〇〇さんが支払いましたよ!」といった通知を自動的にLaravelへPOSTリクエストで送ってくれます。
Webhookがないとどうなる?
支払い処理はStripeの決済ページで完結します。
そのため、Laravelは「支払いが成功したかどうか」を自力で知ることができません。
支払い後に以下のような処理をしたい場合、Webhookが不可欠です。
- ユーザーのroleを「premiumやpaidなど」に変更
- 売上をデータベースに保存
- 管理者へメール通知を送信
✅ でも、ローカル環境ってインターネットから見えないよね?
はい、その通り~♪って自分で質問して自分で答えちゃいます笑。
通常、開発中のLaravelアプリは http://127.0.0.1:8000 などで動かしています。
でもStripeは外部サービスなので、インターネット上のURLじゃないとWebhookを送れないんです。
✅ そこで登場するのがngrok!
ngrokは、ローカル環境に一時的なインターネット上のURLを発行してくれるトンネリングツールです。
./ngrok http 8000
これを実行すると、例えば次のようなURLが発行されます:
https://e038-2400-xxxx.ngrok-free.app
このURLをStripeにWebhookのエンドポイントとして登録することで、
ローカル開発中のLaravelアプリにStripeから通知が届くようになります!
✅ Webhook設定の流れ(ざっくり)
ngrokでローカルにURLを発行
StripeのダッシュボードからWebhookエンドポイントを追加
例:https://xxxx.ngrok-free.app/stripe/webhook
Laravel側にルートとコントローラを用意して、Webhookを受け取る
// routes/web.php
Route::post('/stripe/webhook', [WebhookController::class, 'handleWebhook']);
// app/Http/Controllers/WebhookController.php
public function handleWebhook(Request $request)
{
$payload = $request->all();
// ここで支払い完了処理などを実行
}
✅ 本番環境ではngrokは不要
本番環境にデプロイしてドメインがある状態(例:https://yourapp.com)なら、
そのドメインをStripeに登録すればOKです。ngrokはローカル開発用の一時対応なんです♪
🔗 関連リンク
Stripe Webhook公式ドキュメント:https://stripe.com/docs/webhooks
ngrok公式サイト:https://ngrok.com/
Laravel公式ドキュメント:https://laravel.com/docs
ローカルでStripeの支払い処理をテストするには、Webhookとngrokの理解が超重要!
ぜひ、この記事を参考にスムーズにStripe連携を進めてみてください😊
Discussion