我有一个销售特定产品并使用 Stripe 进行付款处理的网站。该过程包含两个可能的步骤:
第一步:没有帐户的用户将产品添加到购物车。然后后端从 Stripe 生成一个结账 URL。付款成功后,用户将被重定向到
/setup
路径来创建帐户。
或第二步:已经拥有帐户的用户进行购买并被引导至成功的路线。他们收到有关该产品的信息,并被告知该产品可以在
/dashboard
中下载。
当我需要使用新购买的产品更新用户帐户时,就会出现问题。我考虑的一种可能的解决方案是在用户单击
PUT
路线中的“转到仪表板”后,向后端发送 /success
请求。此请求将检索用户已有的可用产品,并将它们与他们刚刚购买的新产品连接起来。然而问题是我的PUT
用户路由只能由管理员访问,而大多数用户没有这个权限。
我无法修改我的
PUT
路线以允许用户更新其产品,因为这会产生安全风险,因为任何人都可能添加产品。
如果有任何关于解决此问题的替代解决方案的建议,我将不胜感激。
我尝试过更新仪表板。
就像评论中提到的那样,您希望在后端执行任何数据库操作。
创建结帐会话时,您可以将
{CHECKOUT_SESSION_ID}
模板变量添加到 success_url
。客户付款后,{CHECKOUT_SESSION_ID}
将自动替换为真实的结帐会话 ID,并重定向到成功页面。请参阅 https://stripe.com/docs/ payments/checkout/custom-success-page 了解更多信息。
当客户被重定向到您的 /success 路由时,您可以向后端服务器发出请求,以使用 Checkout Session id 从 Stripe 检索 Checkout Session(和/或任何其他相关信息),验证 Checkout Session 属于提出请求的同一客户/用户,并更新您的数据库。
但是,一般建议是监听相关的 webhook 事件来执行支付后操作,而不是等待客户端的回调。在客户端,客户可以在回调执行之前关闭浏览器窗口或退出应用程序。
您可以设置一个 Webhook 端点来侦听来自 Stripe 的
checkout.session.completed
(或其他)事件。收到该事件后,验证该事件是否由 Stripe 发送,并执行您想要在服务器中处理的任何操作。
Webhook 的其他资源: