8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LaravelとStripeでWebhookを試す。🥰

Last updated at Posted at 2021-02-11

手順をサクッとメモっときます。

##httpsでアクセス可能にする

まずはngrokなどを使って、httpsでアクセス可能にします。

やり方が分からない方は【Mac】Laravelアプリをngrokを使って、外部に公開する。通りにやればできます!

##Stripe側でWebhookを設定する。

こちらからwebhookを設定します。

##envファイルにシークレットキーを設定

webhookのシークレットキーをenvファイルに記述します。

.env
STRIPE_WEBHOOK=whsec_自分のやつ。

##config/services.phpに追加。

下記を追加。

config/services.php
'webhook' => [
        'secret' => env('STRIPE_WEBHOOK'),
        'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
    ],

##Laravel cashierのインストール

composer require laravel/cashier

##ルーティングの記述

web.php
Route::post('stripe/webhook', 'WebhookController@handleWebhook');

##コントローラーの作成

アクション名は**「handle+キャメルケース」** の形にする。

例えば、payment.createdというイベントをリッスンする場合はhandlePaymentCreatedというように書く。

WebhookController.php
<?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を開き、下記を追加しておきましょう。

app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
        'stripe/*',
    ];

##参考
下記の3つを参考にしました。

LaravelでStripeのWebhookを利用するための7ステップ【NGROK利用】
【Laravel5.8+Stripe11】Webhookの実装
Laravel 6.x Laravel Cashier

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?