如何识别Stripe webhooks类型?

时间:2016-02-28 05:48:40

标签: stripe-payments webhooks

我正在使用Stripe,我需要了解如何仅处理Stripe在幕后生成的webhook。当我的服务器向Stripe发送内容(新订阅,新的个人费用)时,Stripe将生成通过我提供的webhook发送的事件。好吧,我不需要处理那些因为它会造成混乱。我只想在以下情况下处理Stripe生成的webhooks:订阅续订失败,通过Stripe仪表板手动修改,仪表板中生成的退款等。)

我浏览了生成的事件,但找不到任何与我的API调用生成或幕后生成的内容有所区别的内容。

我有什么遗失的吗?

更新
- API调用:事件的标识为request - 幕后条纹:事件有null request_id
- 条纹仪表板:事件的request ID (这仍然是一个问题)

如果我放弃所有not null的webhook事件,我也会丢弃Stripe信息中心事件。我需要在幕后处理Stripe以及Stripe仪表板生成的事件。

2 个答案:

答案 0 :(得分:3)

首先,Stripe目前不支持识别传入的webhook事件类型。查看仪表板我确实可以看到发起事件的内容(API,仪表板或自动),但Stripe的人说他们不支持它。

但是,有一种解决方法。对于任何挣扎于此的人,我将描述我的所作所为。自动条带生成事件很容易区分。它包含null request字段。任何其他类型的事件都将具有request id(例如:re_123h2kj18321hjk3218)。问题仍然存在于区分API和Stripe Dashboard生成的请求。因此,解决方案是捕获API生成的每个请求的请求ID。每当webhook到达您的服务器时,您检查请求字段是否不在存储系统(DB等)中或请求为空。这意味着事件由仪表板或条带自动生成(订阅续订)。

步骤:

  • 钩入Stripe提供的CurlClient。扩展该课程 覆盖request()方法。请求方法返回 Stripe服务器生成的响应。捕获headers 响应包含Request-id。把它存放在你的 存储(在我的情况下是数据库)
  • 在配置文件中,您需要指定Stripe应使用您自己的CurlClient。 ApiRequestor::setHttpClient(new CurlClient());(我也将我的CurlClient命名为你可以为其命名)
  • 当webhook到达时,您有三种选择来识别类型:
    1. 自动:如果活动有request=null
    2. 信息中心:request is not null并且请求不在您的存储
    3. API:你有一种情况。请求不为空,但存在于您的数据库

正如你所看到的那样,对于非常容易的事情,有很多工作要做。所有Stripe需要做的是在他们的webhook事件名称中提供另一个字段,例如request-type,有三个选项(api,自动,仪表板)。他们已经有了这个版本,但他们不允许在webhook事件中显示它。

答案 1 :(得分:1)

在事件对象documentation上,您会看到request属性documented。只要事件来自API请求,就会设置此属性。否则,如果它是null,则意味着没有与之关联的API请求,这就是我们在仪表板中称为自动事件。

您需要放弃任何request不是null的活动!