Stripe: обработка первой подписки и события webhook

#stripe-payments #webhooks

#stripe-платежи #webhooks

Вопрос:

  1. Мой клиент впервые присоединяется к нашему тарифному плану подписки, я создаю транзакцию (называемую START-transaction) и использую Stripe API для создания новой подписки и сохранения возврата объекта подписки в рамках вышеуказанной транзакции.

  2. Я также использую webhook для отслеживания событий Stripe. Моя главная цель — обрабатывать повторяющиеся платежи (отправлять уведомления об успешном или неудачном списании и что-то для взаимодействия с клиентом). Я перехватываю событие invoice.payment_succeeded, чтобы определить, что это повторный платеж. Я тоже создаю транзакцию (повторный вызов) и, естественно, сохраняю объект события в транзакции. (основываясь на информации о подписке в event invoice.payment_succceeded, я нахожу транзакцию relative-START и создаю новую транзакцию до тех пор, пока она не ПОВТОРИТСЯ)

И проблема проявляется в том, что при первом создании плана клиентом в моей системе было вызвано 6 событий: customer.created; charge.successful; invoice.created; invoice.payment_succeeded; customer.card.created; customer.subscription.created. Итак, у моего клиента есть 2 транзакции: 1-ЗАПУСК и 1-ПОВТОРЕНИЕ в первый раз.

Вы предлагаете мне какую-либо идею по удалению ПОВТОРНОЙ транзакции?

Спасибо.

Ответ №1:

Похоже, вы хотите иметь возможность определить, относится ли полученное вами invoice.payment_succeeded событие к первому платежу (который вы уже обработали в своей «НАЧАЛЬНОЙ транзакции») или нет (в этом случае вы хотите обработать его в «ПОВТОРНОЙ транзакции»).).

Самый простой способ сделать это — посмотреть на атрибут объекта request события. Поскольку первый счет-фактура является прямым следствием вашего запроса на создание подписки, первое invoice.payment_succeeded событие будет иметь ненулевое значение для request атрибута. Последующие счета создаются Stripe в фоновом режиме, и поэтому события будут иметь нулевое значение для request атрибута.

Комментарии:

1. Боже, неужели это так просто???? Ты освещаешь мою жизнь, ха-ха. Я тестирую. Спасибо.

2. Рад, что смог помочь! 🙂

3. Это может быть опасно, поскольку request атрибут также может быть установлен для повторяющихся событий. Например, если кто-то нажмет кнопку «Оплатить сейчас» на панели инструментов stripe на странице повторяющегося счета, будет установлен request атрибут.

4. @adipasquale Нажатие кнопки «Оплатить сейчас» — это то же самое, что вызов stripe.com/docs/api#pay_invoice , то есть вы вручную запускаете платеж по счету. В обоих случаях request атрибут будет иметь ненулевое значение, поскольку это запрос вручную. Вы можете проверить request атрибут для invoice.created события, если хотите проверить, был ли счет создан (не оплачен ) в рамках текущей подписки.

5. Так, может billing_reason лучше всего охватить все случаи?

Ответ №2:

Вы можете использовать запрос Stripe billing_reason , чтобы определить, является ли это подпиской в первый раз, повторяющимся платежом или обновленным платежом по счету. Смотрите https://stripe.com/docs/api/invoices/object#invoice_object-billing_reason