SDK 内蔵の WebhookHandler を使用する
SDK のwebhook().handleWebhook() メソッドの利用を強く推奨します。次の処理を自動的に行います。
- 署名検証
- JSON パースとイベントルーティング
- 応答ボディの構築
冪等な処理
Waffo は同じイベントを複数回配信する場合があります。処理ロジックが冪等であることを確認してください。配信順序ではなく最終状態で処理する
Webhook は非同期で配信されるため、関連する複数のコールバックを加盟店のエンドポイントが受信する順序は保証されません。サブスクリプションの初回期間では、SUBSCRIPTION_STATUS_NOTIFICATION と SUBSCRIPTION_PERIOD_CHANGED_NOTIFICATION の両方が送信される場合があります。この 2 つのコールバックの到着順序に依存しないでください。
- コールバックの到着順序だけで最終的なビジネス状態を更新しないでください
- イベントの粒度に応じて、イベント ID や業務注文 ID などの冪等性キーを選んでください。期間ごとの利用権には
subscriptionIdと期間を組み合わせ、後続の期間を処理対象から除外しないようにしてください SUBSCRIPTION_STATUS_NOTIFICATIONとSUBSCRIPTION_PERIOD_CHANGED_NOTIFICATIONの両方をサブスクライブする場合は、いずれかのコールバックを受信した後にPOST /api/v1/subscription/inquiryを呼び出し、その最終照会結果にもとづいて単一のサブスクリプション処理フローを実行してください
Subscription の利用権付与
期間ごとの利用権を付与する前の確認には、SUBSCRIPTION_PERIOD_CHANGED_NOTIFICATION を起点として使用してください。署名を検証し、対象期間の最終決済結果を確認してください。通知を受信しただけでは、決済成功を意味しません。
- Subscription、期間、金額が対象プランと当該期間の請求額に一致することを確認してください
- 当該期間の決済成功と検証の完了を確認してから、対応する利用権を付与してください
- Subscription と期間ごとに利用権の付与結果を記録し、通知が重複しても再付与しないでください
PAYMENT_NOTIFICATIONを処理する際は、まずresult.subscriptionInfo.subscriptionEventで期間課金、決済手段の追加、差額課金を区別してください。後者 2 つを新しい期間の利用権付与の根拠にしないでください。値の説明は Subscription の決済イベントを参照してください
高速な応答
- SDK はハンドラーの実行完了後に自動的に応答を構築します
- 時間のかかる処理 (メール送信、外部システムの更新など) は非同期で処理してください
- ハンドラー内で例外がスローされると、SDK は自動的に失敗応答を返します
セキュリティ
- 必ず
X-SIGNATUREを検証してください (SDK が自動で処理します) - HTTPS エンドポイントを使用してください
- イベントを処理する前に署名を検証してください。検証が通る前にビジネスロジックを実行しないでください