Lravelでstripeのwebhookを利用するためには、Lravel側にAPIを用意する必要があります。
web.phpでAPI(モドキ)を作成して、それをこんな感じにリッスンさせて、別コンソールの窓でイベントを発行させると、302エラーが出て正常にリッスンできないことがあります。
stripe listen --forward-to https://local-url/webhook/test
(↑MAMP PROの場合のURLはこんな感じのURLでリッスンさせます)
↓302ステータスエラー
2022-01-28 10:15:00 --> payment_intent.created [evt_3KMj3GEu08SlwV100hogehoge] 2022-01-28 10:15:00 <-- [302] POST http://local-url/stripe/webhook [evt_3KMj3GEu08SlwV100hogehoge] 2022-01-28 10:15:00 --> charge.failed [evt_3KMj3GEu08SlwV100hogehoge] 2022-01-28 10:15:00 <-- [302] POST http://local-url/stripe/webhook [evt_3KMj3GEu08SlwV100hogehoge] 2022-01-28 10:15:00 --> payment_intent.payment_failed [evt_3KMj3GEu08SlwV10hogehoge] 2022-01-28 10:15:00 <-- [302] POST http://local-url/stripe/webhook [evt_3KMj3GEu08SlwV100hogehoge]
これの問題点としては、ちゃんとしたAPIになっていなくて、ログイン画面にリダイレクトされてしまっている、ということです。
認証に引っかかって、ログイン画面にリダイレクトされてそのリダイレクトが302ということですね。
ちゃんとしたAPIは、/local-url/routes/api.phpに書いてあげる必要があります。
web.phpのほうでAPIを作ると、CSRFが必要なため正常にPOSTできなくなります。
api.phpのほうでAPIを作ってあげると、正常に200になると思います。
また、APIが正常に稼働しているかどうかは下記のコマンドで確かめることができます。
ここでLoginのようなHTMLが出てきたらダメです。
正常なAPIならLoginのようなHTMLは出てきません。
またエラー表示などもありません。
curl https://local-url/api/test -XPOST --verbose
ところで、Stripeのwebhook、、、難しいですよね。。。
Stripeのダッシュボードからのwebhookのイベントを発行するボタンは無くなっていて、ダッシュボードからのイベント発行はできなくなっていますし。(問い合わせました)
The send events button is gone.
これまでダッシュボードから簡単にイベント発行できたのですが、テスト環境といえども、実際にイベントを発行させないといけないという新たなハードルが。。。
Stripeの改善に期待します。