由多个测试环境处理的Stripe Payment Intent事件



我得到了一个使用Stripe的网店(Laravel API/Vue)。我有3个环境为这个应用程序,本地,开发/登台和生产。

本地和开发/登台使用相同的Stripe可发布和秘密测试密钥,但使用不同的webhook秘密测试密钥。

我的本地环境使用Laravel Homestead,我使用安装在我的pc (windows)上的ngrok将我的本地环境转发到一个实时服务器。

我最近注意到,每当我在本地服务器上测试事务时,都会触发Stripe上的payment_intent.succeeded事件,该事件在本地和开发/分期上的作业中得到处理。这将导致一个订单被处理并保存在开发数据库中,即使该订单是使用本地环境下的。当我在开发环境中测试事务时,反之亦然。

在Stripe仪表板上,我使用了2个webhook端点,一个用于本地(即ngrok live服务器),另一个用于开发/暂存环境。

我对此无法解释。任何指针都可以很好地解决这个奇怪的问题。

如果您的本地端点和开发/声明端点都在侦听相同的事件,那么这是预期的,因为事件是在帐户级别生成的,而不是在单个端点级别生成的。

例如,如果您的两个端点都在侦听payment_intent.succeeded事件,那么如果支付成功,您的两个端点都将收到该事件。

为了绝对确保您不会将事件发送到两个环境,您应该考虑使用单独的Stripe帐户来测试您的本地环境。

Paul Asjes回答的另一个替代方案是将环境作为支付意图元数据的一部分发送。

当您收到webhook请求时,检查元数据中指定的环境是否与当前运行环境匹配。如果没有,则返回一个HTTP状态码200 OK,无需执行任何其他操作。

最新更新