API と高度な使用法
ダッシュボードと API でテストクロックを使用するための高度な戦略をご紹介します。
高度なシミュレーションを実行するために、サブスクリプションとは別にテストクロックを作成できます。このシナリオでは、まずテストクロックを作成してから、そこにさまざまなテストケースを追加します。
完全統合型のソリューションをご希望でない場合、サブスクリプションのシミュレーションの実行についてStripe のガイドをご覧ください。

テストクロックのライフサイクル
以下の手順でテストクロックの使用を開始します。
テストケースごとに必要に応じてクロックの時間を進めたり、変更をモニターしたり、シミュレーションを更新したりできます。
クロックを作成して時間を設定する
シミュレーションを開始するには、クロックを作成し、その凍結時刻を設定します。これは、クロックに関連付けられたすべてのサブスクリプションの時間的な開始点です。この時刻は過去または未来に設定して、さまざまなシミュレーションをテストできますが、設定後は進行のみが可能になります。
シミュレーションを設定する
次に、シミュレーションのためのテストケースを設定します。まず顧客を作成してから、その顧客のためのサブスクリプションを作成する必要があります。
最初のステップで作成した Clock オブジェクトに Customer と Subscription の両方のオブジェクトが関連付けられます。ダッシュボードでは、 アイコンにより、オブジェクトがクロックに関連付けられたことが示されます。
シミュレーションの時間を進める
テストクロックを作成してテストケースを設定した後で、クロックのシミュレーションの時間を進めます。初めて時間を進める場合は、クロックの作成時に設定した元の凍結時刻から時間を進めることになります。時間を進めることで、サブスクリプションの終了時、更新時、またはその他の変化が発生したとき (無料トライアルから有料のサブスクリプションへのアップグレードなど) に、システムがどのように機能するかを確認できます。
You can advance test clocks by any increment, but you can only advance them two intervals at a time from their initial frozen time. The length of the interval is based on the shortest service period associated with the test clock, which is determined by the recurring price. For example, if you have a monthly subscription, you can only advance the clock up to two months at a time. If the test clock has no subscriptions or subscription schedules, you can advance it up to two years from the initial frozen time.
変更を監視して処理する
API リクエストまたはダッシュボード操作が完了すると、Clock は指定した時刻まで進むまでに数秒かかります。Clock のステータスが変更されたことを知るには、webhook でイベント通知を受信するか、Clock をポーリングして確認します。ダッシュボードにも変更が反映されます。たとえば、invoices page にアクセスして、サブスクリプションの請求書が作成、または支払われたかを確認できます。
Webhook を使用している場合には、以下のイベント通知をリッスンします。本番環境に移行する前に、システムが、以下に記載されたものに加え、その他の請求固有のイベント通知も正しく処理することを確認してください。
イベント | 説明 |
---|---|
test_ | クロックは進み始めましたが、指定された時間に達していません。 |
test_ | クロックは、指定された時間への進行を終了しました。 |
Clock のステータスをポーリングするには、Clock を ID で 取得して、ステータス
を調べます。
シミュレーションを更新する
続けて変更を加え、以下のようなシミュレーションに合わせてクロックを進めることができます。
- 顧客の残高を追加する。
- サイクルの途中でアップグレードする。
- 1 回限りの請求書アイテムを追加する。
それぞれの更新の後、再び変更を監視します。テストケースに対応するために、必要に応じて何回も繰り返します。
クロックを削除する
テストクロックは、作成から 30 日経過すると自動的に削除されますが、テストの終了後に削除してテスト環境を整然と保つことができます。
クロックを削除すると、クロックに関連付けられているテスト顧客も削除され、サブスクリプションがキャンセルされます。テストクロックはサンドボックスでのみ使用されるため、クロックを削除しても本番オブジェクトは削除されません。
ユースケース
サブスクリプションの更新をテストする
まず、以下の手順でテストクロックの使用を開始します。
次に、テストクロックを使用して特定のサブスクリプションの更新をテストできます。たとえば、月額 50 USD のサブスクリプションが正しく更新されるかどうかをテストするとします。テストクロックを使用してこの状況をシミュレーションするには、以下のようにします。
- 新しいテストクロックを作成して
frozen_
を 1 月 1 日に設定します。time - 顧客を追加して、その顧客の支払い方法を追加します。
顧客の支払い方法を追加した後、新しい顧客に対して月額 50 USD に設定されたサブスクリプションを作成します。そうすると、50 USD の請求書が自動的に支払われ、サブスクリプションは
active
になります。日付を 2 月 1 日に進めて、50 USD の請求書が作成されたことを確認してください。デフォルトでは、請求書は 1 時間 は
draft
ステータスで表示されます。時間を 1 時間進めて、請求書が確定され、自動的に支払われることを確認します。
比例配分が適用されるサイクル途中のアップグレードをテストする
まず、以下の手順でテストクロックの使用を開始します。
Next, you can test prorations for customers who upgrade their plans in the middle of a billing period. Let’s say that you have two products. One product is 50 USD/month (‘basic plan’) and the other is 100 USD/month (‘premium plan’). In this case, you may want to test prorations for a customer who upgrades their ‘basic plan’ to the ‘premium plan’ in the middle of a billing period. To simulate this situation using test clocks:
- 新しいテストクロックを作成して
frozen_
を 1 月 1 日に設定します。time - 顧客を作成して支払い方法を追加します。ここでは、 テストカードを使用します。
- ‘basic plan’ の月額 50 USD のサブスクリプションを作成します。これを完了すると、月額 50 USD の請求書が作成され、確定されて自動的に支払われたことが分かります。
- 日付を 2 週間進めます。ここでは日付を 1 月 16 日に設定します。
- サブスクリプションを月額 100 USD の ‘premium plan’ にアップグレードします。
サブスクリプションをアップグレードした後、customer.subscription.updated Webhook イベントが作成されます。
比例配分の場合は保留中の請求書アイテムも作成されます。‘basic plan’ の未使用時間に対するマイナスの比例配分 -25 USD と、残り半月における ‘premium plan’ の使用に対するプラスの比例配分 50 USD が示されます。この時点では、請求書は生成されません。
日付を 2 週間進めます。ここでは日付を 2 月 1 日に設定します。サブスクリプションが次の請求期間に移行したことが確認できます。請求書が
draft
状態で生成され、未確定の請求明細が反映されます。これには、マイナスの日割り料金、プラスの日割り料金、2 月分の月額料金が含まれ、合計 125 USD となります。デフォルトでは、請求書は約 1 時間にわたってdraft
のステータスで表示されます。請求書を確定するには、時間を 1 時間進めます。
トライアルをテストする
まず、以下の手順でテストクロックの使用を開始します。
次に、テストクロックを使用してトライアルのテストを開始できます。たとえば、顧客に支払いを開始する前に 7 日間のトライアルで商品を無料で試してもらい、決済情報は事前に収集するとします。テストクロックを使用してこの状況をシミュレーションするには、以下のようにします。
- 新しいテストクロックを作成して
frozen_
を 1 月 1 日に設定します。time - 顧客を追加して支払い方法を含めます。ここでは、 のテストカードを使用します。
- サブスクリプションを作成して、7 日間無料のトライアル期間を追加します。
- サブスクリプションを 7 日間無料のトライアル期間付きで作成すると、サブスクリプションのステータスは
trialing
になります。無料トライアルのため、請求額 $0.00 の請求書が生成されます。 - 日付を 1 月 5 日に進めて、customer.subscription.trial_will_end のイベント通知を確認します。Stripe はトライアル終了の 3 日前に通知を送信します。この Webhook イベントを使用して、トライアルがまもなく終了することを顧客に通知できます。
- 日付を 1 月 8 日に進めて、サブスクリプションが
paid
になり、50 USD の請求書が作成されたことを確認します。 - サイクルを 1 つ (月次サブスクリプションの場合は 2 月 8 日まで) 進めて、サブスクリプションが更新されることを確認します。
制限事項
テストクロックを効率的に進めるために、Stripe は、各シミュレーションの複雑度に関する制限を以下のように設定しています。
- 3 名の顧客
- 顧客ごとに 3 件のサブスクリプション (スケジュール済みサブスクリプションを含む)
- 顧客に関連付けられていない 10 件の見積もり
すべての結果のリストで省略されたテストクロックオブジェクト
Stripe のリスト API (請求書の一覧など) では、すべてのリクエストを一覧表示するテストクロックで生成された結果が省略されます。これらのケースでテストクロックによって生成された結果を確認するには、test_
、customer
、または subscription
など、特定の親内の結果をリクエストする必要があります。
たとえば、GET /v1/invoices
はテストクロックで生成された請求書を返しませんが、GET /v1/invoices/{customer_
は、テストクロックで生成されたものも含め、その顧客のすべての請求書を返します。
同様に、この例でテストクロック ID を指定して、そのテストクロックに関連するすべての請求書を取得することも、サブスクリプション ID を指定して、テストクロックによって生成された請求書を含む、そのサブスクリプションに対して請求されたすべての請求書を返すこともできます。
レート制限エラー
テストクロックが設定されたサブスクリプションに対して複数回の更新を行うと、Stripe からレート制限エラーが返されることがあります。サブスクリプションはテストクロックの時刻まで凍結されているため、その時刻までのすべての API リクエストがカウントされ、レート制限がトリガーされる可能性があります。
これを回避するには、サブスクリプションで追加の API リクエストを行う前に、シミュレーションされたクロックの時刻を数分進めます。
Subscriptions API は、最大リクエスト数を次のように制限します。
- 新規請求書10件/分 (1サブスクリプション)
- 新規請求書20件/日 (1サブスクリプション)
- 数量更新200件/時間 (1サブスクリプション)
決済処理の注意事項
現在、テストクロックの進行は銀行口座引き落としによる支払いの回収 (支払い方法のタイプ us_
など) に対応していません。Stripe は、テストクロックが時間を進めた後で支払いを回収します。支払いの失敗をテストするには、次の手順を実行します。
Cancel subscription after all payment retries fail (すべての支払いの再試行が失敗した後にサブスクリプションをキャンセルする) 設定を選択します。
支払いが失敗した顧客に
us_
の支払い方法のタイプを追加します。bank_ account その顧客でサブスクリプションを作成します。
テストクロックを進めて、サブスクリプションで支払いを繰り返して回収します。
テスト用 Clock を進めた後も、サブスクリプションのステータスは active
のままです。これは、テスト Clock の時間進行中に支払いの回収が行われなかったことを示しています。また、サブスクリプションは payment_
になったことで canceled
のステータスに移行したわけではありません。
invoice.
イベントを受信して、遅延が生じたサブスクリプションのステータスと請求書に対する支払いを監視します。customer.
イベントは、サブスクリプションのステータスが canceled
に設定されたことを示しています。