😎

Laravel×Stripe連携のテスト時に、なぜngrokとWebhookが必要なのか?

に公開

Stripeの決済機能をLaravelアプリに組み込もうとすると、ngrokWebhookの設定が必要になる場面があります。

この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