Stripe payments 条带Webhooks:检查对象是否已更改

Stripe payments 条带Webhooks:检查对象是否已更改,stripe-payments,Stripe Payments,我正在一个webapp中集成stripewebhook,以使用stripebilling实现订阅。webapp有前端和后端 当订阅启动或取消时,前端直接与后端通信,一切都通过同步调用条带API进行 例如,要取消订阅,以下是流程: 用户点击前端的按钮 前端呼叫我的应用后端以取消sub 后端调用条带api以实际取消子进程 后端在其自己的数据库中更新保存的订阅对象 “问题”来了:几秒钟后,一个customer.subscription.deletedwebhook的电话在我的后端打过来,告诉我更新

我正在一个webapp中集成stripewebhook,以使用stripebilling实现订阅。webapp有前端和后端

当订阅启动或取消时,前端直接与后端通信,一切都通过同步调用条带API进行

例如,要取消订阅,以下是流程:

  • 用户点击前端的按钮
  • 前端呼叫我的应用后端以取消sub
  • 后端调用条带api以实际取消子进程
  • 后端在其自己的数据库中更新保存的订阅对象
“问题”来了:几秒钟后,一个
customer.subscription.deleted
webhook的电话在我的后端打过来,告诉我更新刚刚保存的订阅出于性能原因,我希望避免双重保存,并想知道这些条带对象是否具有某种签名或更新计数,以检查它们是否相对于以前的版本发生了更改

我认为只在带外更新时使用Webhook是很常见的,因此应该支持此用例。

订阅的每个状态都没有“更新”计数或签名。另一种方法是,在处理从您自己的前端到后端的请求时,直接跳过更新数据库中的订阅对象。相反,您可以主要依靠Stripe的事件通知来更新数据库。这样,您只需更新数据库一次,如果出于某种原因需要直接从条带仪表板进行更改,这些更改仍将传播到后端

我还想指出,您应该通过在处理之前检查事件的ID来将webhook事件处理程序构建为幂等的,因为即使成功确认,Stripe也会多次发送同一事件