我正在使用Stripe,我需要了解如何仅处理Stripe在幕后生成的webhook。当我的服务器向Stripe发送内容(新订阅,新的个人费用)时,Stripe将生成通过我提供的webhook发送的事件。好吧,我不需要处理那些因为它会造成混乱。我只想在以下情况下处理Stripe生成的webhooks:订阅续订失败,通过Stripe仪表板手动修改,仪表板中生成的退款等。)
我浏览了生成的事件,但找不到任何与我的API调用生成或幕后生成的内容有所区别的内容。
我有什么遗失的吗?
更新
- API调用:事件的标识为request
- 幕后条纹:事件有null
request_id
- 条纹仪表板:事件的request
ID (这仍然是一个问题)
如果我放弃所有not null
的webhook事件,我也会丢弃Stripe信息中心事件。我需要在幕后处理Stripe以及Stripe仪表板生成的事件。
答案 0 :(得分:3)
首先,Stripe目前不支持识别传入的webhook事件类型。查看仪表板我确实可以看到发起事件的内容(API,仪表板或自动),但Stripe的人说他们不支持它。
但是,有一种解决方法。对于任何挣扎于此的人,我将描述我的所作所为。自动条带生成事件很容易区分。它包含null
request
字段。任何其他类型的事件都将具有request id
(例如:re_123h2kj18321hjk3218)。问题仍然存在于区分API和Stripe Dashboard生成的请求。因此,解决方案是捕获API生成的每个请求的请求ID。每当webhook到达您的服务器时,您检查请求字段是否不在存储系统(DB等)中或请求为空。这意味着事件由仪表板或条带自动生成(订阅续订)。
步骤:
headers
响应包含Request-id
。把它存放在你的
存储(在我的情况下是数据库)ApiRequestor::setHttpClient(new CurlClient());
(我也将我的CurlClient命名为你可以为其命名)request=null
request is not null
并且请求不在您的存储正如你所看到的那样,对于非常容易的事情,有很多工作要做。所有Stripe需要做的是在他们的webhook事件名称中提供另一个字段,例如request-type
,有三个选项(api,自动,仪表板)。他们已经有了这个版本,但他们不允许在webhook事件中显示它。
答案 1 :(得分:1)
在事件对象documentation上,您会看到request
属性documented。只要事件来自API请求,就会设置此属性。否则,如果它是null
,则意味着没有与之关联的API请求,这就是我们在仪表板中称为自动事件。
您需要放弃任何request
不是null
的活动!