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() メソッドは適宜作成してください。
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx をコメントアウトする
正常に動作することを確認できたら、コメントアウトを戻す。(戻すと先ほどの test メソッドは forbidden となります。)
Stripe管理画面に追加する設定情報は以下の例のように設定します イベントタイプは複数設定できます。
URL : https://YOUR-SERVER.TLD/stripe/webhook
イベントタイプ :
invoice.payment_failed
invoice.payment_succeeded
( invoice.payment_succeeded : 決済成功時のHook) とします。