我正在回答我自己的问题,但我想我会写这篇文章,因为我在这个问题上遇到了很大的困难,而且我也有兴趣听到替代答案。
我们使用 Stripe 服务器端进行支付(一次性和订阅),并使用 Stripe webhooks 在数据库中记录支付和事件。我们在负载均衡器后面有多个服务器,并且我们使用金丝雀/滚动部署,因此在部署期间并非所有服务器都运行相同的代码版本。
当您想要升级 Stripe API 版本时,通常会发生需要更改代码的重大模型更改(例如新字段或重命名字段)。如果您不经常升级,可能会发生很多变化!咳嗽
滚动部署期间有一个第 22 条军规:
Stripe 允许您设置多个 Webhook URL,每个 URL 都有自己的 API 版本。但所有匹配的事件都会发送到所有 webhook URL(一开始我根本不清楚)。
较新的 Stripe Java 库中还有一种机制,可以在事件模型不匹配时实现您自己的“异常处理程序”,但它需要编写代码并跟踪自上次升级以来的每个模型更改,在我们的例子中是.. 。 太多 :)
此外,对于较新的 Stripe 库,您无法覆盖 Stripe 版本:它现在是硬编码的(这是有道理的)。