如何使用 Stripe 在后端处理付款?

How to process payment on the backend side using Stripe?

我不熟悉 Stripe 和一般的付款方式。我在互联网上发现了一些带有示例和指南的文章,例如。这个one。我注意到创建付款的算法如下所示:

  1. 客户端应用从服务器获取可发布的 Stripe 密钥
  2. 服务器应用程序创建结账会话,客户端应用程序使用检索到的可发布密钥获取结账会话 ID
  3. 客户端应用程序重定向到结帐
  4. 用户完成支付并被重定向回客户端应用程序

如有错误请指正。总的来说,我不明白一件事——服务器应用程序如何知道付款是否成功完成?我应该先将流从条带结帐重定向到后端,处理结果然后从后端再次调用前端吗?或者我应该以某种方式使用结帐会话来检查它是否已完成?我应该使用某种 cron 来处理挂起的结帐会话吗?在此先感谢您的帮助。此致

基本上,你布置的东西是可行的。当客户端被定向回您的服务器时,您可以检查会话状态,但您至少要通过其他方式检查此状态,通过网络挂接或您提到的 cron 作业。

Should i redirect the flow from stripe checkout to backend first, process the result and the from the backend call the frontend again?

这是可能的。 Stripe 允许您将 {CHECKOUT_SESSION_ID} 模板参数添加到结帐成功 URL 中,当用户在结帐后被重定向时,该模板将被替换为实际的结帐会话 ID,您可以使用它来检索会话及其状态。

话虽这么说,但客户可能会付款但在导航回您的页面之前断开连接。因此,如果您依赖于该重定向,客户将被收取费用,但您永远不知道要完成他们的订单。这会导致客户不满意,因此 Stripe 通常建议在您的服务器 [2] 上设置一个 webhook 端点,以便他们可以向您发送 checkout.session.completed 事件以通知您客户已完成结帐会话。这样,即使客户从未访问过您的成功页面,您也知道要完成他们的订单。

[1] https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url

[2]https://stripe.com/docs/payments/checkout/fulfill-orders