2014-11-18 2 views
4

Я знаю о событии customer.subscriptions.trial_will_end. Он срабатывает за 3 дня до окончания испытания.Stripe webhook для пробных концов

Я не смог найти событие, которое действительно срабатывает, когда испытание закончено, и клиент не заплатил. Это было бы полезно, чтобы сделать что-то простое, как это отключить функции:

customer.update_attributes(active_account: false)

Без webhook, как это, я смотрю на некоторые задачи планирования, чтобы проверить неподтвержденные клиентов периодически и отключить функции соответственно. Webhook кажется более чистым, хотя и менее подверженным ошибкам на моей стороне. Есть ли событие/веб-хоккей в соответствии с этими целями? FYI, клиентам не нужно вставлять карту, когда они начинают пробную версию, поэтому автобизнес не является вариантом.

ответ

9

Когда пробный период завершается, произойдет событие customer.subscription.updated и событие invoice.created. Через час (или так далее) вы либо увидите событие invoice.payment_succeeded, либо событие invoice.payment_failed. Из этого вы узнаете, прошел ли платеж или нет.

Приветствия, Ларри

PS Я работаю по поддержке в Stripe.

+0

Awesome, спасибо Ларри. Большой поклонник Stripe (: – settheline

+3

Как вы можете определить, является ли это первым счетом для подписки? Если пользователь подписывается на бесплатную пробную версию, никогда не входит в кредитную карту, а затем платеж терпит неудачу, было бы неплохо обработать его иначе, чем обычный платеж не был выполнен для активного пользователя. – nerdburn

+0

Вы можете сказать, что это конец испытания, когда событие 'customer.subscription.updated' имеет следующие атрибуты:' "previous_attributes": {"status": "trialing" .. .' –

4

Чтобы добавить к ответу Ларри и поделиться тем, как я обошел отсутствие пробного веб-узла, вот что я сделал.

В invoice.payment_failed webhook, я проверил:

  • Является ли это первый счет-фактура с момента запуска подписки?
  • Сохраняется ли у клиента какие-либо карты?

Если эти проверки терпят неудачу, я предполагаю, что судебное разбирательство только что закончилось без ввода платежных данных, и я отменяю подписку.

Пример в Python:

# get account from my database 
 
account = models.account.get_one({ 'stripe.id': invoice['customer'] }) 
 

 
# get stripe customer and subscription 
 
customer = stripe.Customer.retrieve(account['stripe']['id']) 
 
subscription = customer.subscriptions.retrieve(account['stripe']['subscription']['id']) 
 

 
# perform checks 
 
cards_count = customer['sources']['total_count'] 
 
now = datetime.fromtimestamp(int(invoice['date'])) 
 
trial_start = datetime.fromtimestamp(int(subscription['start'])) 
 
days_since = (now - trial_start).days 
 

 
# cancel if 14 days since subscription start and no billing details added 
 
if days_since == 14 and cards_count < 1: 
 
    subscription.delete()

Смежные вопросы