Stripe payments 通过条带结账,我如何跟踪付款状态

Stripe payments 通过条带结账,我如何跟踪付款状态,stripe-payments,Stripe Payments,在stripe文档中,它说: 因此,在本例中,签出页面转到我前端的成功或失败页面 我使用后端跟踪付款状态,以便我们可以在管理门户中监控交易,而上述方法对我来说似乎很危险 签出成功后,它会将窗口重定向到成功url。这意味着我必须在成功页面中调用后端API来更新付款状态。然而,条带是支付状态的真实来源,DB上的状态更新应该来自条带,而不是前端页面。至少,如果用户刷新成功页面,它会一次又一次地调用API,这是不好的。另外,它是关于“一个用户说我成功支付了”v.s.“Stripe说他们成功支付了” 我

在stripe文档中,它说:

因此,在本例中,签出页面转到我前端的成功或失败页面

我使用后端跟踪付款状态,以便我们可以在管理门户中监控交易,而上述方法对我来说似乎很危险

签出成功后,它会将窗口重定向到成功url。这意味着我必须在成功页面中调用后端API来更新付款状态。然而,条带是支付状态的真实来源,DB上的状态更新应该来自条带,而不是前端页面。至少,如果用户刷新成功页面,它会一次又一次地调用API,这是不好的。另外,它是关于“一个用户说我成功支付了”v.s.“Stripe说他们成功支付了”

我尝试了Stripe webhook,但在webhook数据对象中,没有任何信息可用于将其链接到创建签出会话时生成的sessionId,但会话id是我可以从Stripe获得的关于付款的唯一跟踪id

如果签出是唯一的解决方案,那么安全更新我的数据库的最佳做法是什么?

您有两种选择:

  • 依赖webhook。
    checkout.session.completed
    事件将描述一个包含其ID的签出会话,您希望在前面创建会话时保存该ID,以便将两者链接在一起

  • 支付完成后,从中检索会话ID,并在服务器上检索会话,然后检查会话ID。这样,您的服务器就可以验证付款是否已实际完成,或者是否有人刚刚猜到了您的成功页面的URL

  • Stripe不建议只执行选项2,因为用户很可能在重定向到成功页面之前关闭浏览器选项卡或窗口,从而可能导致付款确认丢失。您应该始终使用Webhook来保证您的购买履行逻辑正确启动。

    您有两种选择:

  • 依赖webhook。
    checkout.session.completed
    事件将描述一个包含其ID的签出会话,您希望在前面创建会话时保存该ID,以便将两者链接在一起

  • 支付完成后,从中检索会话ID,并在服务器上检索会话,然后检查会话ID。这样,您的服务器就可以验证付款是否已实际完成,或者是否有人刚刚猜到了您的成功页面的URL


  • Stripe不建议只执行选项2,因为用户很可能在重定向到成功页面之前关闭浏览器选项卡或窗口,从而可能导致付款确认丢失。您应该始终使用Webhook来保证您的购买实现逻辑正确启动。

    谢谢您的回答。很高兴了解checkout.session.completed webhook。不过,对于会话2,如果成功url指向服务器,则不会触发浏览器的成功页面(我认为没有办法调用两个成功url,或者让服务器重定向前端的签出页面)。感谢您的回答。很高兴了解checkout.session.completed webhook。但是对于会话2,如果成功url转到服务器,那么浏览器的成功页面将不会被触发(我认为没有办法调用两个成功url,或者让服务器重定向前端的签出页面)。