gpt4 book ai didi

stripe-payments - 如何使用 webhooks 升级 Stripe API 版本

转载 作者:行者123 更新时间:2023-12-04 12:35:26 25 4
gpt4 key购买 nike

我正在回答我自己的问题,但我想我会写这个,因为我在这个问题上挣扎了很多,而且我也有兴趣听到其他答案。

环境

我们使用 Stripe 服务器端进行支付(一次性和订阅),我们使用 Stripe webhooks 在我们的数据库中记录支付和事件。我们在负载均衡器后面有多个服务器,并且我们使用金丝雀/滚动部署,因此在部署期间并非所有服务器都运行相同的代码版本。

问题

当您想要升级 Stripe API 版本时,经常会有需要更改代码的破坏性模型更改(例如新的或重命名的字段)。如果你不经常升级,它可能会有很多变化!咳咳😬

在滚动部署期间有一个 catch-22:

  • 如果您等到所有服务器都使用新代码/库部署以更新 Stripe 仪表板中的 Stripe 版本,则"new"服务器可能会在部署期间引发错误,因为它们正在接收旧 JSON 格式的 webhook。
  • 如果在部署所有服务器之前更新 Stripe 版本,那么可能会抛出错误的是“旧”服务器,因为它们与新的 JSON 格式不兼容。
  • 如果你在部署时更新 Stripe 版本......你会得到两者的混合。

  • Stripe 允许您设置多个 webhook URL,每个 URL 都有自己的 API 版本。 但所有匹配的事件都会发送到所有 webhook URL (这对我来说一开始并不清楚)。

    当事件模型不匹配时,新的 Stripe Java 库中还有一种机制可以实现您自己的“异常处理程序”,但它需要编写代码并跟踪自上次升级以来的每个模型更改,在我们的例子中是.. 。 太多 :)

    同样使用较新的 Stripe 库,您不能覆盖 Stripe 版本:它现在是硬编码的(这是有道理的)。

    最佳答案

    我对这个问题的解决方法如下:

  • 添加 version Stripe 中 webhook URL 的参数(例如 https://example.net/stripe/webhook?version=2019-xx-yy 与当前使用的 API 版本)。
  • 在 webhook 处理程序中,在解析事件 JSON 之前,比较 version当前库/代码版本的 URL 参数:如果匹配,则处理事件。否则,忽略它(首先部署该更改)。
  • 确保 webhook 处理程序跟踪已处理的事件 ID,并且不会重新处理它们。
  • 将服务器代码和库版本升级到新的 Stripe API 版本。
  • 在部署新代码之前,在 Stripe 中为新版本添加第二个 webhook URL(例如 https://example.net/stripe/webhook?version=2020-zz-tt)。此时,服务器将收到 每个事件两份 ,但它们会以新格式“删除”事件,因为版本不匹配。
  • 开始金丝雀/滚动部署。
  • 在推出期间,旧服务器只会处理旧事件,而新服务器只会处理"new"事件。每个事件都发送两次,因此第 3 步很关键,因为可能不希望多次处理同一个事件。
  • 部署完成后,删除旧的 webhook URL 并升级 Stripe 仪表板中的 API 版本。

  • 这很复杂,我觉得我想多了。在部署期间也有一些事件不会被处理的可能性很小(因为两个事件版本都会发送到忽略它的服务器)。

    所以我很好奇是否有人有更简单的解决方案。

    关于stripe-payments - 如何使用 webhooks 升级 Stripe API 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62316273/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com