如何识别 Stripe webhooks 类型?
How to identify Stripe webhooks type?
我正在使用 Stripe,我需要了解如何仅处理 Stripe 在幕后生成的 webhook。当我的服务器向 Stripe 发送内容(新订阅、新个人收费)时,Stripe 将生成通过我提供的 webhook 发送的事件。好吧,我不需要处理这些,因为它会造成混乱。我只想在以下情况下处理 Stripe 生成的 webhook:订阅续订失败、通过 Stripe 仪表板进行手动修改、在仪表板中生成退款等)。
我查看了生成的事件,但找不到任何与我的 API 调用生成的事件或幕后生成的事件有区别的内容。
有什么我遗漏的吗?
更新
- API 调用:事件有一个 request
id
- 幕后条纹:事件有 null
request_id
- 条纹仪表板:事件有一个 request
id (这仍然是一个问题)
如果我丢弃所有 not null
的 Webhook 事件,我也会丢弃 Stripe 仪表板事件。我需要在幕后处理 Stripe 以及 Stripe 仪表板生成的事件。
关于事件对象documentation, you'll see the request
property documented。只要事件来自 API 请求,就会设置此 属性。否则,如果它是 null
,则表示没有与之关联的 API 请求,这就是我们在仪表板中所说的自动事件。
您需要放弃任何 request
不是 null
的事件!
首先,Stripe目前不支持识别传入的webhook事件类型。查看仪表板,我确实可以看到是什么启动了事件(API、仪表板或自动),但 Stripe 的人说他们不支持它。
但是,有一个解决方法。对于任何为此苦苦挣扎的人,我将描述我所做的事情。 Stripe 自动生成的事件很容易区分。它包含一个 null
request
字段。任何其他类型的事件都会有一个 request id
(例如:re_123h2kj18321hjk3218)。问题仍然在于区分 API 和 Stripe Dashboard 生成的请求。因此,解决方案是为 API 生成的每个请求捕获请求 ID。每当 webhook 到达您的服务器时,您检查请求字段是否不在存储系统(数据库等)中或请求是否为空。这意味着事件是由仪表板生成的或由 Stripe 自动生成的(订阅续订)。
步数:
- 连接到 Stripe 提供的 CurlClient。扩展 class 和
覆盖 request() 方法。请求方式returns
Stripe 服务器生成的响应。捕获
headers
的
包含 Request-id
的响应。将其存储在您的
存储(在我的例子中是一个数据库)
- 在您的配置文件中,您需要指定 Stripe 应该使用您自己的 CurlClient。
ApiRequestor::setHttpClient(new CurlClient());
(我也为我的 CurlClient 命名,但你可以随意命名)
- 当 webhook 到达时,您可以通过三个选项来识别类型:
- 自动:如果事件有
request=null
- 仪表板:
request is not null
并且请求不在您的存储中
- API: 你有一种情况。该请求不为空,但存在于您的数据库中
如您所见,做一些非常简单的事情需要做很多工作。所有 Stripe 需要做的就是在他们的 webhook 事件名称中提供另一个字段,例如 request-type
和三个选项(api、自动、仪表板)。他们已经有了这个构建,但他们不允许在 webhook 事件中显示它。
我正在使用 Stripe,我需要了解如何仅处理 Stripe 在幕后生成的 webhook。当我的服务器向 Stripe 发送内容(新订阅、新个人收费)时,Stripe 将生成通过我提供的 webhook 发送的事件。好吧,我不需要处理这些,因为它会造成混乱。我只想在以下情况下处理 Stripe 生成的 webhook:订阅续订失败、通过 Stripe 仪表板进行手动修改、在仪表板中生成退款等)。
我查看了生成的事件,但找不到任何与我的 API 调用生成的事件或幕后生成的事件有区别的内容。
有什么我遗漏的吗?
更新
- API 调用:事件有一个 request
id
- 幕后条纹:事件有 null
request_id
- 条纹仪表板:事件有一个 request
id (这仍然是一个问题)
如果我丢弃所有 not null
的 Webhook 事件,我也会丢弃 Stripe 仪表板事件。我需要在幕后处理 Stripe 以及 Stripe 仪表板生成的事件。
关于事件对象documentation, you'll see the request
property documented。只要事件来自 API 请求,就会设置此 属性。否则,如果它是 null
,则表示没有与之关联的 API 请求,这就是我们在仪表板中所说的自动事件。
您需要放弃任何 request
不是 null
的事件!
首先,Stripe目前不支持识别传入的webhook事件类型。查看仪表板,我确实可以看到是什么启动了事件(API、仪表板或自动),但 Stripe 的人说他们不支持它。
但是,有一个解决方法。对于任何为此苦苦挣扎的人,我将描述我所做的事情。 Stripe 自动生成的事件很容易区分。它包含一个 null
request
字段。任何其他类型的事件都会有一个 request id
(例如:re_123h2kj18321hjk3218)。问题仍然在于区分 API 和 Stripe Dashboard 生成的请求。因此,解决方案是为 API 生成的每个请求捕获请求 ID。每当 webhook 到达您的服务器时,您检查请求字段是否不在存储系统(数据库等)中或请求是否为空。这意味着事件是由仪表板生成的或由 Stripe 自动生成的(订阅续订)。
步数:
- 连接到 Stripe 提供的 CurlClient。扩展 class 和
覆盖 request() 方法。请求方式returns
Stripe 服务器生成的响应。捕获
headers
的 包含Request-id
的响应。将其存储在您的 存储(在我的例子中是一个数据库) - 在您的配置文件中,您需要指定 Stripe 应该使用您自己的 CurlClient。
ApiRequestor::setHttpClient(new CurlClient());
(我也为我的 CurlClient 命名,但你可以随意命名) - 当 webhook 到达时,您可以通过三个选项来识别类型:
- 自动:如果事件有
request=null
- 仪表板:
request is not null
并且请求不在您的存储中 - API: 你有一种情况。该请求不为空,但存在于您的数据库中
- 自动:如果事件有
如您所见,做一些非常简单的事情需要做很多工作。所有 Stripe 需要做的就是在他们的 webhook 事件名称中提供另一个字段,例如 request-type
和三个选项(api、自动、仪表板)。他们已经有了这个构建,但他们不允许在 webhook 事件中显示它。