Как определить, был ли Stripe webhook 'invoice.payment_failed' вызван действием Stripe или действием пользователя? - PullRequest
0 голосов
/ 11 июня 2019

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

Webhook может вызываться несколько раз в месяц, если пользователь может, например, иметь недостаточно средств.

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

stripe.invoices.pay(invoiceId);

Документы: https://stripe.com/docs/api/invoices/pay

Приведенный выше метод также вызывает invoice.payment_failed webhook. Насколько я могу судить, нет никакого способа узнать, был ли веб-крюк инициирован внутренним действием Stripe (таким как повторная попытка оплаты) или ручным действием API, таким как мой вызов выше.

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

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Перед вызовом stripe.invoices.pay(invoiceId) вы можете добавить что-то в поле metadata, чтобы позже можно было идентифицировать счет: https://stripe.com/docs/api/invoices/update#update_invoice-metadata

0 голосов
/ 14 июня 2019

Простым способом решения этой проблемы является прокси-соединение запросов webhook, инициированных внутренним действием Stripe.Вы можете использовать бесплатный инструмент маршрутизации webhook, такой как Pipedream (или эквивалентный), и добавить поле к запросу.

Сначала создайте конечную точку для прокси вебхука

Во-вторых, обработайте событие:

{
      "id": "in_1DGXg2BSZsoltGfCP90zepqA",
      "object": "invoice",
      "account_country": "US",
      "account_name": null,
      "amount_due": 999,
.... 

В-третьих, добавьте идентификатор Внутреннее действие Stripe:

$event.body.identifier = 'internal_action'

И затем направьте данные к конечной точке в вашем приложении.

Вот пример конвейерас этим процессом работает - https://urlzs.com/nGd1a

...