2016-11-23 2 views
2

У меня есть настройки подписки на полосу, которые будут автоматически отменены после 3 неудачных попыток платежа, и у меня есть client.subscription.deleted webhook для записи отмененной подписки.Обнаруживать, если подписка отменяется автоматически

Есть ли способ обнаружить в customer.subscription.deleted webhook, если подписка отменена полосой из-за неудачных попыток платежа ИЛИ вручную отменена с помощью панели управления Stripe или отменена из-за запроса API, сделанного из нашего приложения?

ответ

3

Вы не можете различать два последних случая, так как сама панель управления использует API.

Однако вы можете различать автоматическое и ручное отмена. Просто посмотрите на атрибут request в теле события customer.subscription.deleted.

Если подписка была отменена автоматически после слишком большого количества неудачных платежей, то request будет иметь нулевое значение.

В противном случае, если подписка была отменена через API или приборную панель, request будет иметь ненулевое значение: идентификатор запроса ("req_...") в subscription cancelation request.

EDIT: в Йони Рабинович отметил, это верно, если подписка была отменена с at_period_end=false (или нет at_period_end параметра, так как false значение по умолчанию).

Если подписка была отменена с at_period_end=true, тем customer.subscription.updated события будет уволен немедленно (чтобы отразить тот факт, что атрибут данной подписки cancel_at_period_end теперь является истинным), и что мероприятия request будет иметь идентификатор запроса запроса подписки аннулирования аккаунта.

Однако событие customer.subscription.deleted, которое будет отправлено, когда подписка будет фактически отменена в конце расчетного периода, будет иметь request=null, как автоматическое отмена после слишком большого числа неудачных выплат.

+0

Фантастический! Большое спасибо. Атрибут «запрос» сделает работу для меня. Благодарю. – user3204760

+0

Из того, что я вижу, атрибут запроса в событии customer.subscription.deleted имеет значение NULL, если подписка автоматически отменяется в конце периода, так как cancel_at_period_end был установлен в true для подписки. Поэтому кажется, что проверка атрибута «запрос» недостаточна для определения того, что подписка была отменена из-за неудачных платежей. –

+0

@YoniRabinovitch Ты абсолютно прав. Я отредактировал свой ответ, чтобы указать, что происходит в этом случае. – Ywain

0

Если вы отменили подписку в конце расчетного периода, сразу же будет инициировано событие customer.subscription.updated. Это событие отражает изменение значения cancel_ad_period_end. Когда подписка фактически отменяется в конце периода, происходит событие customer.subscription.deleted.