請求する使用量を API で記録する
Stripe API を使用して使用量を記録する方法をご紹介します。
Stripe で使用量を記録して、各請求期間の正しい金額を顧客に請求します。使用量を記録するには、まずメーターを設定してから、メーターイベント (メーターに設定されているイベント名、顧客 ID、数値、タイムスタンプ (オプション)) を送信します。
Stripe に使用量を記録する頻度を、発生ごと、一括などで決定できます。Stripe は従量イベントを非同期に処理するため、集計された使用量は従量イベントのサマリーに集約され、次回の請求書には、最近受信した従量イベントが即時に反映されない可能性があります。
メーターイベントを作成する
API を使用して Meter Event (メーターイベント) を作成します。
べき等
遅延やその他の問題により各イベントが重複して報告されることを防ぐには、Idempotency Key (べき等キー) を使用します。従量イベントはすべて ID に対応しており、リクエストで ID を指定できます。指定しなかった場合、ID は自動生成されます。
イベントのタイムスタンプ
タイムスタンプは、必ず 35 日前から、5 分後までの範囲で指定してください (5 分間の猶予は、サーバーと Stripe のシステム間のクロックドリフトのために設けられています)。
使用量の値
ペイロードの使用量の数値は、整数値のみを受け付けます。サイクル全体の使用量がマイナスの場合、Stripe では請求書のラインアイテムの使用数量を 0 として申告します。
レート制限
Meter Event (メーターイベント) エンドポイントでは、本番環境で 1 秒あたり 1,000 件の呼び出しが許可され、メーターごとに 1 顧客あたり 1 件の同時呼び出しが許可されます。サービスがこの制限を超える可能性がある場合は、商品を一定の量に「まとめる」ことができます。たとえば、1,000 件のリクエストごとに請求する場合、商品を「1,000 回の取引単位」にまとめて、1,000 回ごとに 1 つの使用記録を送信できます。
サンドボックス環境で行われる meter event
および meter event stream
エンドポイントの呼び出しは、基本制限にカウントされます。
注
Stripe-Account
ヘッダーを使用して連結アカウントの代理でリクエストを行う Connect プラットフォームの場合、1 秒あたり 100 回の操作を規制値とする通常の Stripe レート制限の対象となります。
429
ステータスコードを監視し、指数バックオフスケジュールを使用した再試行メカニズムを実装して、リクエスト量を管理できます。
レート制限の引き上げによる高速処理の取り込み API v2
API v2 では、メーターイベントストリームを使用して、毎秒最大 10,000 件のイベントを Stripe に送信できます。これは本番環境でのみ機能します。
このエンドポイントは、ステートレス認証セッションを使用します。まず、メーターイベントセッションを作成して認証トークンを受け取ります。認証トークンは 15 分間のみ有効であるため、トークンの有効期限が切れたら、新しいメーターイベントセッションを作成する必要があります。
次に、返された認証トークンを使用して、メーターイベントストリームを指定して高スループットのメーターイベントを作成します。
注
API リクエストは大量に発生するため、従量イベントストリームのリクエストは Workbench のログタブには含まれません。
429
ステータスコードを監視し、指数バックオフスケジュールを使用した再試行メカニズムを実装して、リクエスト量を管理できます。
メーターイベントエラーを処理する
Stripe は、メーターイベントを非同期的に処理します。エラーが見つかった場合は、次のいずれかの Event (イベント) を作成します。
イベント | 説明 | ペイロードタイプ |
---|---|---|
v1. | このイベントは、従量に無効な使用量イベントが含まれているときに発生します。 | thin |
v1. | このイベントは、使用量イベントが不足していたり、無効な従量 ID が含まれているときに発生します。 | thin |
警告
thin イベントに登録するイベントの送信先を作成するには、開発者向け設定でワークベンチを有効にします。
サンプルのペイロード
エラーコード
reason.
はエラーを引き起こしたエラーカテゴリーを示します。発生する可能性のあるエラーコードは次のとおりです。
meter_
event_ customer_ not_ found meter_
event_ no_ customer_ defined meter_
event_ dimension_ count_ too_ high archived_
meter timestamp_
too_ far_ in_ past timestamp_
in_ future meter_
event_ value_ not_ found meter_
event_ invalid_ value no_
(meter v1.
イベントタイプでのみサポートされています)billing. meter. no_ meter_ found
イベントのリッスン
Webhook エンドポイントまたは別のタイプのイベント送信先を設定することで、イベントをリッスンできます。
Workbench の Webhook タブで新しい送信先の作成をクリックします。または、このテンプレートを使用して、2 つのイベントタイプを事前に選択した状態で Workbench で新しい送信先を設定します。
Show Advanced Settings (詳細設定を表示) をクリックして、Thin ペイロードスタイルを選択します。
イベントのリストから
v1.
とbilling. meter. error_ report_ triggered v1.
を選択します。billing. meter. no_ meter_ found イベントを処理するハンドラを作成します。
ハンドラをテストします。ハンドラを本番環境にデプロイする前に、Stripe CLI を使用してローカルリスナーを設定し、ローカルマシンにテスト用のイベントを送信します。
--forward-thin-to
フラグを使用してthin
イベントの転送先の URL を指定し、--thin-events
フラグを使用して転送先の thin イベントを指定します。アスタリスク (*
) が指定されているすべての thin イベント、または一部の thin イベントはアプリケーションに転送することができます。$ stripe listen --forward-thin-to localhost:4242/webhooks --thin-events "*"
ハンドラに対してテストイベントをトリガーします。トリガー関数を使用して次のコマンドを実行し、テストアカウントのイベントを個別にシミュレーションします。
$ stripe trigger v1.billing.meter.error_report_triggered --api-key <your-secret-key> $ stripe trigger v1.billing.meter.no_meter_found --api-key <your-secret-key>
Webhook エンドポイントでイベントを処理している場合は、Webhook の署名を確認してエンドポイントを安全に保護し、すべてのリクエストが Stripe から送信されたものであることを検証します。
再処理のため、無効なイベントを修正して再送信します。