Stripe API から Subscription を取得すると、 次のようなデータが取得できます。
Stripe\Subscription Object
(
[id] => sub_FfXXXXXXXXXXXX
[object] => subscription
[application_fee_percent] =>
[billing] => charge_automatically
[billing_cycle_anchor] => 1566446348
[billing_thresholds] =>
[cancel_at] => 1569124748
[cancel_at_period_end] =>
[canceled_at] => 1566446348
[collection_method] => charge_automatically
[created] => 1566359949
[current_period_end] => 1569124748
[current_period_start] => 1566446348
[customer] => cus_xxxxxxxxxxxxxx
[days_until_due] =>
[default_payment_method] =>
[default_source] =>
[default_tax_rates] => Array
(
)
[discount] =>
[ended_at] =>
[items] => Stripe\Collection Object
(
このSubscription課金が有効かどうかをチェックするにはこの項目
・( ended_at == null )
上記条件が成り立つとき、サブスクリプションは有効です。
PHPでは次のようなコードで記述します。
\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx");
$subscription = \Stripe\Subscription::retrieve('sub_xxxxxxxxxxxxxx');
if( $StripeSubscription->ended_at == null ){
// サブスクリプション有効
}
また
現在の支払期間の終了時に解約が予定されているか どうかをチェックするには
・( cancel_at_period_end == false )
上記条件が成り立つとき、現在の支払期間の終了時に解約されます。
またこちらの方法も有効です。
初の支払いが成功したら、current_period_endに、有効期日を保存。月額課金だったら、課金日+1ヶ月(+α)を保存しておく。
ログイン時は、毎回current_period_endをチェックして、有効期日が過ぎていなければ、サービス利用可能とする。
定期的な支払いは、Webhookで、invoice.payment_succeededイベントを受け取る。これを受け取ったら、current_period_endを更新する。