サブスクリプション対応決済サービス Stripe と Laravel からサブスクリプションを操作する Laravel Cashier についてのメモ書き

Laravel Cashier で Stripe Web Hook を使用する

● 設定ファイルの作成

1. .env に キーを指定

Stripe管理画面 > 開発者 > Webhook
に表示されるキーを .env に記述します。

STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. config/service.php に .env の値を読み込むよう設定

    'stripe' => [
        'model' => App\User::class,
        'key' => env('STRIPE_PUBLIC_KEY'),
        'secret' => env('STRIPE_SECRET_KEY'),
        'webhook' => [
            'secret' => env('STRIPE_WEBHOOK_SECRET'),
            'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
        ],
    ],

● ルートの作成

routes/web.php

Route::get('stripe/webhook/test', 'WebhookController@test');
Route::post('stripe/webhook', 'WebhookController@handleWebhook');
test() :      テスト用メソッド
handleWebhook() : Stripeからのhookをこのメソッドで受け取ります

● コントローラーの作成

app/Http/Controllers/WebhookController.php

メソッド名の命名は決まっています。

メソッド名はCashierが期待する命名規則に沿う必要があります。特にメソッドはhandleのプレフィックスで始まり、処理したいStripeのWebフックの名前を「キャメルケース」にします。

メソッド名の例

invoice.payment_succeeded → handleInvoicePaymentSucceeded
invoice.payment_failed → handleInvoicePaymentFailed
customer.subscription.deleted → handleCustomerSubscriptionDeleted
<?php
namespace App\Http\Controllers;
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
class WebhookController extends CashierController
{
    use MailTrait;
 
    /**
     * メール送信のテスト
     *
     */
    public function test()
    {
        $this->mailtoAdmin( 'TEST MAILの本文です' );
    }

    /**
     * インボイス支払い成功時の処理
     *
     * @param  array  $payload
     * @return void
     *
     */
    public function handleInvoicePaymentSucceeded( $payload )
    {
        $info = print_r($payload, TRUE);
        $this->mailtoAdmin($info);
    }
}

mailtoAdmin() メソッドは適宜作成してください。

● webhookのテスト

1. *.env の webhookキーを一時的にコメントアウト

STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx をコメントアウトする

2. https://YOUR-SERVER.TLD/stripe/webhook/test にアクセスして、メール送信が正常動作することを確認する

正常に動作することを確認できたら、コメントアウトを戻す。(戻すと先ほどの test メソッドは forbidden となります。)

3. Stripe 管理画面から webhook を追加する

Stripe管理画面に追加する設定情報は以下の例のように設定します イベントタイプは複数設定できます。

URL : https://YOUR-SERVER.TLD/stripe/webhook
イベントタイプ : 
invoice.payment_failed
invoice.payment_succeeded

( invoice.payment_succeeded : 決済成功時のHook) とします。

No.1499
04/12 14:38

edit