ダッシュボード自体がAPIを使用するため、最後の2つのケースを区別することはできません。
ただし、自動キャンセルと手動キャンセルを区別できます。 customer.subscription.deleted
イベントの本文のrequest
属性を見てください。
支払いが多すぎると購読が自動的にキャンセルされた場合は、request
にはNULL値が設定されます。
また、APIまたはダッシュボードでサブスクリプションがキャンセルされた場合、request
はnull以外の値を持ちます。つまり、subscription cancelation requestのリクエストID("req_..."
)です。
EDIT:ヨニRabinovitchが指摘したように(false
がデフォルト値であるとして、あるいは全くat_period_end
パラメータ)サブスクリプションがat_period_end=false
でキャンセルされた場合、上記が真です。
サブスクリプションがat_period_end=true
でキャンセルされた場合は、その後、customer.subscription.updated
イベントは、(サブスクリプションのcancel_at_period_end
属性は今、真であるという事実を反映するために)すぐに解雇されるだろう、とそのイベントのrequest
は、サブスクリプションの取り消し要求の要求IDを持っているでしょう。
ただし、請求期間の終了時にサブスクリプションが実際にキャンセルされたときに送信されるcustomer.subscription.deleted
イベントは、支払いが失敗したあとの自動キャンセルの場合と同じようにrequest=null
になります。
素晴らしい!ありがとうございます。 "要求"属性は私の仕事を完了させるでしょう。ありがとう。 – user3204760
私は、cancel_at_period_endがサブスクリプションでtrueに設定されているため、サブスクリプションがその期間の終わりに自動的に取り消された場合、customer.subscription.deletedイベントのrequest属性がnullであることがわかります。したがって、「要求」属性をチェックするだけでは、支払いが失敗したためにサブスクリプションがキャンセルされたと判断できないようです。 –
@YoniRabinovitchあなたは間違いなしです。私はこの場合に何が起こるかを指定するために私の答えを編集しました。 – Ywain