StripeのTax Rate変更対応について
に税率の設定方法などが掲載されています。
ここでは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が必要です。
誤りなどあればご指摘くださいませ。
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}\¤t_period_end[lt]=${TEN_PERCENT_DAY}\¤t_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}\¤t_period_end[gte]=${TEN_PERCENT_DAY}\¤t_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があることが判明。。。