使用 Stripe 付款创建复杂订单
Posted
技术标签:
【中文标题】使用 Stripe 付款创建复杂订单【英文标题】:Create complex order with Stripe payment 【发布时间】:2022-01-03 13:45:08 【问题描述】:我正在尝试允许我的用户使用 Stripe 在我的网站上为他们的预订(活动)付费。我的大部分处理工作正常,但我不知道如何将我从 Stripe 获得的响应连接到我的数据库,这表明付款已成功,以便它知道预订所需的所有详细信息。
在“购买 X 件产品”的标准情况下,我知道我可以在服务器上创建包含这些详细信息的订单。然后我可以将该订单 ID 放入 Stripe 请求中,并在付款成功时使用该 ID 来完成该订单。
但就我而言,我必须接受比这更多的信息。每个预订都可以附加多个与会者 - 每个与会者都有一个姓名并加载有关他们的更多信息,这些信息需要在创建预订时使用。
是否只有这样才能将所有与会者信息添加到 Stripe 请求中,以便在付款成功时使用?还是有别的办法?
如果有助于回答这个问题,我在后端使用 Django。
【问题讨论】:
【参考方案1】:实现这一目标的主要方法是:
-
将与订单相关的信息与相应的付款意图 ID(或结帐会话 ID)一起存储在您自己的数据库中。
收听webhook事件
payment_intent.succeeded
(或checkout.session.completed
),了解何时支付成功。
在 webhook 事件中,使用 event.data.object.id
获取付款 ID,并使用它查看您的数据库以检索履行订单所需的信息。
您可以在Stripe documentation here 中了解有关如何履行订单的更多信息。
另一种选择是使用您的付款意图(或结帐会话)的metadata
字段直接存储与订单相关的所有信息。但我不建议这样做,因为它有一些限制(键的数量、值的长度等)。
【讨论】:
是的,这就是我一直看到的做法。因此,如果您的订单仅包含一个商品列表,其中包含用户购买的每件商品的数量,那很简单。但是为了让我将所有这些存储在我的订单中,我将不得不复制大量的东西 - 实习生信息,他们给出的问题的答案等等。我不能仅仅创造这些东西 - 我会有将它们全部复制并将它们附加到订单中,以便在 webhook 恢复时可以使用它们。对我来说这似乎是个坏主意。以上是关于使用 Stripe 付款创建复杂订单的主要内容,如果未能解决你的问题,请参考以下文章
Stripe 取消 url 不会取消付款,因此 Stripe 不会发送取消付款意图