はじめに
Stripeのテストクロックのベータ版が使えるようになったらしい、ということで軽く試してみました。
テストクロックは最近新しく追加された機能で、仮想の時計を使ってサブスクリプションのライフサイクルを再現できる素敵なツールです。
※ 2022/3/7 追記 テストクロックが正式版としてリリースされました!
ダッシュボードのサブスクリプションのページに画像のようなリンクが表示されるようになります。
クロックを作成する
まずは、検証に使う架空の時計を作成します。この時計に対して顧客とサブスクリプションを紐づけて検証を行います。
画面の「新しいシミュレーション」からクロックを作成します。作成したクロックは30日後に勝手に消えるようです。
curl https://api.stripe.com/v1/test_helpers/test_clocks -u <APIシークレットキー> -d "frozen_time"=1635750000 -d "name"="MySimulation1"
検証用の顧客を追加する
顧客にカードを追加する
検証に使用できるカード番号はドキュメントをご確認ください。
Testing | Stripe のドキュメント
顧客にサブスクリプションを作成する
顧客にサブスクリプションを紐づけます。
サブスクリプションは既存のものが使えるようです。
Webhookイベントを待ち受ける
Webhookエンドポイントを設置して、Webhookイベントを処理するアプリケーションが期待通りの動きをするか観察します。
Stripe CLIを使って stripe listen
すると発火されたイベントをリアルタイムで確認できます。
Listen for events | Stripe CLI Reference
時計を進める
準備ができました。時を進めましょう。
ダッシュボードの "Advance Time" からクロックを進めたい時点を指定します。
"進める" を押すと、数秒間かけてクロックの時間が進んでいきます。
Webhookを確認する
期間中に起こるWebhookイベントが順番に発火されることを確認します。前後には以下のイベントが発火されます。
クロックを削除する
検証が終わったら、クロックを削除します。画面の "Finish simulation" から削除できます。
クロックの中で新しく作成された顧客やサブスクリプションは、このタイミングで一緒に削除されます。
注意点
クロックは使い捨て
現実と同じようにクロックの時間は巻き戻すことができません。また、作成したクロックは30日後に自動で削除されます。
これらのことから、クロックは検証する度に使い捨てる運用を想定しているようです。
作成からクロックオブジェクトの紐づけまでをスクリプト化しておくのが良さそうです。
気になった点
使ってみて気になる点がいくつかありました。これらはフィードバックを送ってみようと思います。
Stripe CLIから操作できない
現状、コマンドラインからクロックを操作する際は curl コマンドでAPIを呼び出す必要があります。Stripe CLIから操作できないので正式リリースまでにコマンドが追加されると嬉しいです。
APIではfrozen_timeにUNIX時間を指定する
APIからfrozen_time
を指定するときはUNIX時間に変換してから指定する必要があります。UNIX時間以外にも時間とタイムゾーンの組み合わせで指定できるオプションが欲しいところです。
ダッシュボードからクロックのIDが分からない
クロックにはそれぞれID(clock_XXXXXX)があり、APIからクロックを操作する際は対象のクロックIDを引数に指定するのですが、ダッシュボードではこのIDを確認できません。他のリソースと同様にIDを表示してほしいなと感じました。
まとめ
ベータ版を使ってみてとても便利な機能だと思いました。
サブスクリプションのWebhook検証は今まで請求間隔の短い商品を作ったり、実際に時間が経つのを待って検証していましたが、テストクロックを使うことでサクッと検証ができるようになりました。
顧客のカードを変更できるので有効期限切れなどのイベントを意図的に発生させたいときにも使えそうです。
参考リンク