Help us understand the problem. What is going on with this article?

Stripe Billing(Subscription)ユーザー向けのニッチな消費税増税対応の情報

StripeのTax Rate変更対応について

https://support.stripe.com/questions/2019-10-1

に税率の設定方法などが掲載されています。
ここではWebhookを使った対応方法が載っていますが、年額の場合にはWebhookでinvoice.upcomingが発火するのは結構先になってしまうユーザーがでてきてしまう?とも思ったので、スクリプトを組んで変換をしようと考えています。

Subscriptionのcurrent_period_endの状況を確認する

変換スクリプトの実行を開始するタイミングが悩みどころですが、9月中に新しいInvoiceが発行されない、つまりSubscriptionのcurrent_period_endが9月中で一番最後が例えば 2019年 9月 30日 18:00 であれば、それ以降はSubscriptionのTaxを変更しても既存のInvoiceには影響がありません。

また逆に10月1日以降に最初のInvoiceが発行されるタイミングが 2019年 10月2日 10:00 であればまあそこまでは猶予があるとも言えます。(プラン変更などが発生しなければ)そこで9月中最後のInvoiceが発行されるタイミングおよび10月中最初のInvoiceが発行されるタイミングを調べるスクリプトを用意してみました。

なおこれは現時点でのSubscriptionの状況を確認するためのスクリプトなので、今後9月30日の夜から10月1日の朝に新しいSubscriptionが生成される可能性があることも考慮しておく必要がありますね。

月額、年額だけの場合、すでに10月1日まで1ヶ月を切っているので、current_period_end が 10月1日 直前のデータを調べればよいことになります。

日額や週額などの場合、current_period_end が10月1日までに複数回来ることがありこの方法は使えませんのでご注意ください。
Mac上で動作確認をしています。
動作にはjqが必要です。
誤りなどあればご指摘くださいませ。

https://stripe.com/docs/api/subscriptions/list#list_subscriptions-current_period_end-lt

9月中最後のcurrent_period_endがあるタイミングを調べるスクリプト

9月30日12時以降にcurrent_period_endを迎えるsubscriptionを10件取得しています。
ケースに応じて適宜 SUBSCRIPTION_LIMITとEIGHT_PERCENT_DAY を変更してみてください。

YOUR_SECRET_KEY=***YOUR_SECRET_KEY***
SUBSCRIPTION_LIMIT=10
EIGHT_PERCENT_DAY=`date -j -f "%Y-%m-%d %H:%M:%S" "2019-09-30 12:00:00" "+%s"`
TEN_PERCENT_DAY=`date -j -f "%Y-%m-%d %H:%M:%S" "2019-10-01 00:00:00" "+%s"`
date -r ${TEN_PERCENT_DAY}
RES=$(curl -s --globoff https://api.stripe.com/v1/subscriptions?limit=${SUBSCRIPTION_LIMIT}\&current_period_end[lt]=${TEN_PERCENT_DAY}\&current_period_end[gte]=${EIGHT_PERCENT_DAY} \
  -u ${YOUR_SECRET_KEY}: \
  -G)
CURRENT_PERIOD_END=`echo ${RES} | jq '.data[] | .current_period_end' | sort`
for TIME in ${CURRENT_PERIOD_END}
do
  date -r ${TIME}
done

10月中最初のcurrent_period_endがあるタイミングを調べるスクリプト

10月1日12時までにcurrent_period_endを迎えるsubscriptionを10件取得しています。
ケースに応じて適宜 SUBSCRIPTION_LIMITとTEN_PERCENT_FIRST_DAY を変更してみてください。

YOUR_SECRET_KEY=***YOUR_SECRET_KEY***
SUBSCRIPTION_LIMIT=10
TEN_PERCENT_FIRST_DAY=`date -j -f "%Y-%m-%d %H:%M:%S" "2019-10-01 12:00:00" "+%s"`
TEN_PERCENT_DAY=`date -j -f "%Y-%m-%d %H:%M:%S" "2019-10-01 00:00:00" "+%s"`
date -r ${TEN_PERCENT_DAY}
RES=$(curl -s --globoff https://api.stripe.com/v1/subscriptions?limit=${SUBSCRIPTION_LIMIT}\&current_period_end[gte]=${TEN_PERCENT_DAY}\&current_period_end[lte]=${TEN_PERCENT_FIRST_DAY} \
  -u ${YOUR_SECRET_KEY}: \
  -G)
CURRENT_PERIOD_END=`echo ${RES} | jq '.data[] | .current_period_end' | sort`
for TIME in ${CURRENT_PERIOD_END}
do
  date -r ${TIME}
done

調査の結果

9月30日 23時台と10月 1日 01時台にcurrent_period_endを迎えるsubscriptionがあることが判明。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away