2016-10-11 8 views
5

Я смущен о том, почему документации Stripe в предлагает customer.subscription.updated события не срабатывает, когда я считаю, что это необходимо:Возникает ли событие customer.subscription.updated при обновлении подписки?

  • страйповых subscription объекта обладает свойствами current_period_start и current_period_end, которые будут обновляться каждый раз, когда клиент успешно платит данную подписку счета-фактуры (https://stripe.com/docs/api#subscriptions)
  • документация для customer.subscription.updated события заявляет, что ...

    Oc при каждом изменении подписки. Примерами могут быть переход от одного плана к другому или переход из пробного в активный.

    ... который будет означать, что событие будет поднято, если изменится current_period_start и current_period_end значения, но не утверждается, если он делает или не делает в этом случае.

    Однако на этой сторонней веб-странице указано, что она не возникает при успешном обновлении (https://www.masteringmodernpayments.com/stripe-webhook-event-cheatsheet#8).

  • Но воскрешение событие имеет смысл ...

  • И, конечно же, если приложения только необходимы для мониторинга одного типа событий (т.е. customer.subscription.updated), то было бы значительно упростить программный код без необходимости также контролировать invoice.payment_succeeded , invoice.created и charge.succeeded.
  • Однако документация на жизненный цикл подписки (https://stripe.com/docs/subscriptions/lifecycle) абсолютно не упоминает о мероприятии customer.subscription.updated.

Кажется странным, что такое соответствующее событие не возникает, когда это должно быть. Документация также действительно не говорит, когда обновляются значения current_period_end и current_period_start, что ограничивает их полезность.

Итак, в моем приложении, после получения события invoice.payment_succeeded, как мой программный код может определить, когда конец подписки клиента закончится?

ответ

0

customer.subscription.updated запускается, когда current_period_start и current_period_end изменение. Они представляют собой расчетный период .

Когда invoice.payment_succeeded произойдет, то есть, что вам необходимо обновить информацию о вашей стороне (например: период подписки): https://stripe.com/docs/subscriptions/guide#step-3-sync-with-your-site

Также подробнее здесь: https://support.stripe.com/questions/what-events-can-i-see-when-a-subscription-is-renewed

+1

Я бы с уважением бросил вызов заявлению «Когда выставлен счет.payment_successed, вам нужно обновить информацию на вашей стороне (например, период подписки) »- ИМХО, решающее, как обрабатывать эти события, очень сильно зависит от поведения приложения, которое вы пытаетесь достичь. Мое предпочтение было бы обновить подписка на моей стороне, когда Stripe сообщает мне, что подписка была обновлена ​​(событие customer.subscription.updated содержит объект подписки). Событие invoice.payment_succeeded содержит объект счета. –

+0

Вы правы для 'customer.subscription.updated' –

+0

Согласитесь с @SimonCurd. С этим меня тоже смутило. Я решил изменить подписку только тогда, когда у вас запущен customer.subscription.updated - больше нигде. – nickdnk

3

Я подтвердил, что customer.subscription.updatedвызывается, когда заканчивается расчетный период.

Для этого я перехватил все веб-камеры, которые происходят в конце периода (FYI: я использовал функцию AWS Lambda, которая принимает события из AWS API Gateway, а затем помещает события в очередь SQS :))

Я согласен, что the Stripe documentation для customer.subscription.updated события может быть яснее и может охватывать этот случай использования говоря ....

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

(FYI: Я бы игнорировать сайт шпаргалки вообще они делают только мимолетное упоминание customer.subscription.updated - На шаге-они описывают (плохо) использование случай «Создание клиента с планом без суда», который. не создавал бы событие customer.subscription.updated, потому что это событие возникает только тогда, когда подписка обновляется, а не когда она создается. Где они ссылаются customer.subscription.updated в контексте этапа 12 «Сбой попытки оплаты счета»)

В защиту полос документация о жизненном цикле подписки, он говорит: «На следующем рисунке показан жизненный цикл самых важных событий, которые происходят », и я бы сказал, customer.subscription.updated не является важным событием в контексте создания счетов-фактур и осуществления платежей.

Некоторых подробности о том, как нашивка обрабатывает конец периода:

  • В моем тесте, нашивки подняли customer.subscription.updated событие примерно 2 минуты после того, как метки времени в свойстве current_period_end по подписке. Событие имеет два связанных с ним объектов данных. Первая - это подписка с новыми значениями на ней. Второй объект - previousAttributes с двумя предыдущими значениями current_period_start и current_period_end.

  • Два события были сгенерированы одновременно: customer.subscription.updated и invoice.created (это был счет-фактура за только что прошедший период).

  • Примерно через час после создания счета было создано три события одновременно: invoice.payment_succeeded, charge.succeeded и invoice.updated.

Как вы относитесь к пролонгации расчетного периода по сравнению статуса оплаты счета-фактуры действительно до вас, и очень многое зависит от типа приложения. Это красота API-интерфейса Stripe (и это красиво).

В моем случае я отношусь к переносу периода выставления счетов отдельно к статусу платежа счета-фактуры. Мое приложение заботится о том, когда период выставления счетов переливается и делает обновления для использования на основе этого, но любые сбои платежей генерируют предупреждения. & обрабатываются в автономном режиме.

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

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