LaravelでStripeのWebhookを利用するための7ステップ【NGROK利用】

LaravelとStripe API連携

LaravelとStripeを連携させ、StripeのWebhookを利用する方法を解説します。

Webhookを利用するにはHTTPS通信が必要です。

Stripeではローカル環境でもWebhookをテストできるよう、【Stripe Cli】というツールを用意してくれています。

ただ設定などメンドウなので、今回は NGROK】を利用してStripeのWebhookのテストをする方法を紹介します。

NGROKを使えば、手軽にHTTPS通信が可能になります。

テスト環境は、Laravel8、OSはWindows10です。

LaravelでStripeのWebhookを手っ取り早く使う方法

下記の手順で進めていきますね。

  1. NGROKのアカウントを開設
  2. STRIPEでWebhookを設定
  3. Stripeの署名シークレットをLaravelに設定
  4. Laravelのルート設定
  5. Laravelのコントローラー設定
  6. LaravelのCSRF除外設定
  7. 実際にテストしてみる

①NGROKのアカウントを開設

NGROKのアカウント開設は、こちらの記事をご覧ください。

順調にいけば、10分程度で設定できます。

アカウント作成後、HTTPSのURLを取得しておいてください。

②STRIPEでWebhookを設定

STRIPEにログインし、左側のメニューから 開発者/Webhook をクリックします。

エンドポイントを追加をクリックし、NGROKで取得したURLを入力します。

そのあとに/stripe/webhookと入れておきます。

送信イベントは上記のとおりでもよいですし、ご希望のものがあれば、選んでください。

③Stripeの署名シークレットをLaravelに設定

ここからは、Laravelの設定をガンガン進めていきましょう。

じゅんこ
じゅんこ

意外とメンドウですが。

どれか設定し忘れるとエラーになっちゃいます。

最初にStripeの署名シークレットをLaravelに設定し、連携をすすめます。

Stripeにログインし、開発者/Webhookより、先ほど設定したWebhookをクリックします。

【署名シークレット】という項目があるので、クリックして表示し、コピーしてください。

Laravelの.envファイルに貼り付けます。

さらにapp/config/services.phpファイルに、この情報を入れておきます。

じゅんこ
じゅんこ

細かい書き方は人によって違うと思います。

上記は一例ということで、ご覧ください。

④Laravelのルート設定

Laravelのルート設定を行います。

routes/web.phpファイルに下記を追加してください。

⑤Laravelのコントローラー設定

次にコントローラーです。

下記のコマンドで、webhook用コントローラーを作成します。

コントローラーファイルの上部に、下記を入れておきます。

次に、②で設定したイベントごとに、public functionで始まる処理をいれていきます。

ここで、ひとつ注意点があります。

webhook処理のメソッド名には、実はルールがあります。

Laravelの公式マニュアルには、下記のように書かれています。

とくにメソッドはhandleのプレフィックスで始まり、処理したいStripeのWebフックの名前を「キャメルケース」にします。

 *参考元:Laravelマニュアル 【Cashier 8.x Laravel

たとえば customer update 時に処理を行いたい場合、メソッド名は【handleCustomerUpdated】とする必要があります。

コントローラーには、次のように記述します。

【処理を記述】部分に、イベントが実施されたときに自動的に行われる処理を入れてください。

⑥LaravelのCSRF除外設定

さいごに忘れてはいけないのが、CSRF除外の処理。

Laravelでは、POSTで送信される際には、必ずCSRF対策を入れなければいけません。

「CSRFってなんだっけ?」と思ったら、こちら。

じゅんこ
じゅんこ

分かりやすく解説したので、気軽に読んでみてください。

Webhookの処理は【POST】メソッドを使いますが、CSRF対策を入れられません。

そこで、「こういう時は例外にしておいて」とLaravelに設定する必要があります。

app/Http/Middleware の VerifyCsrfToken.phpを開き、下記を追加しておきましょう。

ドメイン名/stripe/ で始まるURLでは、CSRF対策は行われない、という意味になります。

⑦ 実際にテストしてみる

設定した処理が行われるかテストをしてみましょう。

Laravelのプロジェクトをブラウザに表示させます。

送信するボタンを押した後、Stripeにログインし、開発者/Webhook をクリック。

作成したWebhook名をクリックすると、処理がうまくいったかどうかが表示されます。

成功した場合には、下記のように表示されます。

失敗した場合には、クリックすると、エラーの詳細を確認できます。

NGROKについて補足説明

最後に、NGROKについて、補足で2点説明を入れておきますね。

使い慣れていない方は、ぜひこちらも読んでおいてください。

NGROKについて、補足説明 ①

なお上記のような形でNGROKを使う場合、ローカルで使うURLは、NGROKによって生成されたものでも、通常の【http://127.0.0.1/】でもOK。

NGROK側で 【NGROKによるURL=デフォルトのローカルアドレス】と設定しているからです。

NGROKについて、補足説明 ②

なおNGROKは、起動させるたびに違うURLが生成されます。

一度閉じて再度起動させたら、それに応じて、STRIPEのエンドポイントに設定したURLも変更しておきましょう。

なおWebhookのおすすめendpointsは下記記事で紹介しています。

悩んだら、読んでください。

StripeとLaravelの連携は、関連記事でも解説しているので、併せて参考にしてくださいね。

LaravelとStripe API連携

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。

デプロイ講座とVue.js講座付

StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!

コメント

  1. イマイタツヤ より:

    参考にさせて頂きました。
    Cashierはバージョンによっていろいろ違うみたいですね。
    ありがとうございました。

    • Junko Junko より:

      イマイさん、
      コメントありがとうございます!
      バージョンによって変えねばいけないのは、面倒ですね^^;
      記事が少しでもお役にたったならうれしいです。

      • Junko Junko より:

        追伸:
        本記事を見返して、1点、間違いに気づきました。
        当初はNGLOKはポート番号80しかダメかと思っていましたが、8000でも大丈夫でした。
        記事を書きなおしました。
        コメントのおかげで修正できました。ありがとうございますm(__)m

タイトルとURLをコピーしました