手順をサクッとメモっときます。
##httpsでアクセス可能にする
まずはngrokなどを使って、httpsでアクセス可能にします。
やり方が分からない方は【Mac】Laravelアプリをngrokを使って、外部に公開する。通りにやればできます!
##Stripe側でWebhookを設定する。
こちらからwebhookを設定します。
##envファイルにシークレットキーを設定
webhookのシークレットキーをenvファイルに記述します。
STRIPE_WEBHOOK=whsec_自分のやつ。
##config/services.phpに追加。
下記を追加。
'webhook' => [
'secret' => env('STRIPE_WEBHOOK'),
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
],
##Laravel cashierのインストール
composer require laravel/cashier
##ルーティングの記述
Route::post('stripe/webhook', 'WebhookController@handleWebhook');
##コントローラーの作成
アクション名は**「handle+キャメルケース」** の形にする。
例えば、payment.createdというイベントをリッスンする場合はhandlePaymentCreated
というように書く。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
class WebhookController extends CashierController
{
public function handlePaymentCreated()
{
Log::debug($event['data']['object']);
}
}
##CSRFの設定
Webhookの処理は【POST】メソッドを使いますが、CSRF対策を入れられません。
そこで、「こういう時は例外にしておいて」とLaravelに設定する必要があります。
app/Http/Middleware の VerifyCsrfToken.phpを開き、下記を追加しておきましょう。
protected $except = [
'stripe/*',
];
##参考
下記の3つを参考にしました。
・LaravelでStripeのWebhookを利用するための7ステップ【NGROK利用】
・【Laravel5.8+Stripe11】Webhookの実装
・Laravel 6.x Laravel Cashier