Stripe / Stripe.net invoice.payment_succeeded не содержит сведений о подписке

#c# #stripe-payments

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

Вопрос:

Я провожу простой тест локального хоста с использованием stripe CLI. Когда я выполняю команду:

  stripe trigger invoice.payment_succeeded
  

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

  if (stripeEvent.Type == "invoice.payment_succeeded")
    {
      Invoice successInvoice = (Invoice)stripeEvent.Data.Object;
      ...
  

Объект stripeEvent (типа Invoice) не имеет для него значения подписки или идентификатора подписки, чтобы я мог сопоставить его с подпиской, под которой находится клиент.

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

Есть идеи? Я смотрю на неправильное событие webhook?

Ответ №1:

К счастью, я только что понял это — если вы тестируете с помощью CLI, вам нужно сначала создать подписку, т.е.

stripe trigger customer.subscription.created

и затем, как только вы это сделаете, если вы затем выполните свой платеж

stripe trigger invoice.payment_succeeded

Выполнение этого в таком порядке обеспечит ввод идентификатора (но не всего объекта подписки). но это нормально — вы можете получить всю подписку, используя идентификатор следующим образом:

  if (successInvoice.SubscriptionId != null)
                {
                    var service = new SubscriptionService();
                    var subscription = service.Get(successInvoice.SubscriptionId);

                    if (subscription != null)
                    {
                        var plan = subscription.Plan; //do stuff with plan
                    }
                }
  

Ответ №2:

Объект Invoice определенно имеет ссылку на подписку: https://stripe.com/docs/api/invoices/object?lang=dotnet#invoice_object-subscription

Это правда, что событие webhook, описывающее счет-фактуру, не будет содержать много сведений о подписке, но затем вы можете либо получить подписку, используя вышеупомянутый идентификатор, либо получить счет-фактуру из API при расширении подписки.

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

1. На самом деле я только что понял это — если вы тестируете с использованием CLI, вам нужно сначала создать подписку, т.е. stripe trigger customer.subscription.created, а затем, как только вы это сделаете, если вы затем выполните stripe trigger invoice.payment_succeeded, появится идентификатор, и вы сможете получить всю подписку