開発者ブログ

Stripeのシステム時間はUTCですよっていう話

皆さんStripe使ってますか?

こんにちは、 sakasai です。

では、さっそく本題に入ります。

そりゃそうだよね、とか、Stripeを使ってる人には当たり前の事かもしれませんが、

先日Stripeのサブスクリプションの起点時間と請求タイミングでちょっとハマったことがあったので、メモがてら書いておきます。

通常月次のサブスクリプション請求タイミングは、最初に支払いを行った日付を基準に毎月請求が行われると思います。

例えば8月20日にサブスクリプションを開始した場合、

9月20日、10月20日、11月20日・・・

のような感じ。

で、月末の場合どうなるんだろうという話が出ました。

例えば8月31日の場合、9月31日ってないけど・・・?

というわけで調べたところ以下の記述を見つけました。

起点日のない月は、その月の月末にサブスクリプションが請求されます。たとえば、1 月 31 日にサブスクリプションが開始される場合、2 月 28 日 (うるう年は 29 日)、3 月 31 日、4 月 30 日というように請求されます。

https://stripe.com/docs/billing/subscriptions/billing-cycle?locale=ja-JP

早速Stripeのテスト環境で試そうと思い、忘れないように前の日(8月30日)にStripeのコンソール上で登録済みの顧客に対して8月31日開始のサブスクリプションを追加しました。

そのまま放置し、9月1日に問題なくサブスクリプションが開始されたを確認し、翌月の請求日がどうなってるか確認したところ・・・

ん?9月30日じゃない?

となり、混乱しつつもStripeのサポートに問い合わせます。

そして回答を待つこと数日・・・

結論としては、

ドキュメントの記述(起点日のない月は、その月の月末にサブスクリプションが請求されます)は正しい。

ただし、起点となる時間がUTCですよ。

ってことでした。

Stripeのコンソール上でサブスクリプションの日付の箇所にマウスオーバーすると以下のようになります。

要するに、

8月31日起点のサブスクリプションを登録したところ、日本時間の0:00に最初の支払いが行われた。

→UTCだと8月30日の1500

次の請求は翌月の同じ日なのでUTCで9月30日の15:00

→日本時間で10月1日の0:00

となります。

翌月の月末日付だと思ったら日付超えちゃいましたね。。

日本時間でドキュメントの記述のようになるには、

起点が日本時間8月31日の9:00の場合、UTCの8月31日 0:00となり、

UTC時間の翌月日付9月31日が存在しないため、次の請求は9月30日 0:00となる。

ということのようです。

UTC時間の翌月日付が存在しない場合、月末に請求が行われるということですね。

混乱しますね・・・

ちなみにテスト環境ではテストクロックという機能を使って任意の日時でテストを行うことができるようです。

https://stripe.com/docs/billing/testing/test-clocks

というわけで、無事Stripeスキルがアップしたところで終わろうと思います。

ありがとうございました。


Recruit

ディーメイクでは各ポジションで一緒に働く仲間を募集中! エンジニア、デザイナー、ディレクターなど、多彩な職種があります。
一緒に成長していきましょう!

最新記事

おすすめ記事リンク

-開発者ブログ
-