Путаница в Stripe webhook

#stripe-payments

#stripe-платежи

Вопрос:

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

Итак, на моем сайте продается несколько товаров (например, 10), которые можно купить за одну покупку или по подписке (вы получаете товар каждые X дней, никаких продуктов SASS jut). Я использую Stripe’s Checkout и портал для обработки всех подписок и единой покупки, и эти части отлично работают. Человек добавляет товар в корзину, выписывает, платит, у нас все хорошо. Проблема заключается в добавлении заказа в нашу систему из webhook.

Посмотрите на этот сценарий: человек добавляет в свою корзину 2 отдельных товара и 1 подписку. Они оформляют заказ и платят. Когда это происходит, мы checkout.session.completed получаем сообщение о завершении сеанса оформления заказа, и мы добавляем эти товары из их корзины в заказ. Повторное включение подписки через «X» дней мы бы invoice.payment_succeeded прослушали веб-хук, чтобы создать новый заказ в нашей системе. Эта логика ошибочна, хотя, поскольку invoice.payment_succeeded она вызывается и в первом заказе, поэтому в основном, когда они оформляют заказ, наша система добавляет 2 заказа на подписку: один из checkout.session.completed и один из invoice.payment_succeeded . Как мы можем справиться с этим?

То, что я хотел бы иметь, это:

1 веб-крючок, чтобы узнать, когда проверка завершена, и вызывается только тогда, что они и делают: checkout.session.completed

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

Если у них нет этого веб-справочника только для продления подписки, как я могу определить, что объект «счет-фактура» является самым первым, поэтому я ничего не делаю при оформлении заказа, а только создаю новый заказ на продление?

Ответ №1:

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

Вы правы в том, что нет события, специфичного только для продления подписки, но вы можете использовать billing_reason свойство в накладной, чтобы определить, почему была создана накладная. Если это первый счет — фактура для новой подписки, для счета- фактуры будет billing_reason установлено значение subscription_create .