使用Firebase的Stripe扩展如何将checkout_session与支付关联?

huangapple go评论58阅读模式
英文:

How do I associate a checkout_session with a payment using Firebase stripe extension?

问题

如你所知,Firebase 的 Stripe 支付扩展会执行以下操作:

  1. 创建一个名为 products 的集合,其中包含在 Stripe 中管理的产品。
  2. customers/{id1}/checkout_sessions/{id2} 下创建一个文档会在 Stripe 中创建一个付款。文档会随后更新,包含用户可用于支付的付款链接。
  3. 支付完成后,Stripe 会在 customers/{id1}/payments/{id3} 下创建一个文档。

你想要将注册的付款与 checkout_sessions 文档关联起来,正确吗?

checkout_session 文档看起来像这样:

{
  cancel_url: (取消链接),
  client: "web",
  created: (时间戳),
  mode: "payment",
  price: (与产品相关的 priceId),
  sessionId: (checkout_session 的会话 id),
  success_url: (成功链接)
}

我自己创建了 checkout_session 文档,所以我可以在其中添加额外的元数据,但我不确定 Stripe 是否可以使用它。

payment 文档要复杂得多。但我可以关联到的唯一 id 是出现在付款文档中的客户 stripeId,它显示为 customer

基本上,我试图做以下事情:

  1. 用户创建一个具有一些自定义属性的数字项目(名称、选项等)。
    这可以在创建 checkout_sessions 文档时发生。
  2. 他们使用提供的链接进行支付。
  3. 创建了 payments 文档。
  4. 这是你帮助我确认他们所做的付款与创建的数字项目相关联的地方。

我有一个可能会起作用的想法:与其在创建 checkout_sessions 文档时允许创建数字项目,我可以为该特定项目创建一个“凭证”。它不会包含任何个性化或选项,但我可以在付款文档上创建一个 onCreate 云函数。如果付款成功,我会允许创建数字项目。我可以根据所购买的项目查找“模板”。

我不喜欢这个选项,因为至少会有两个潜在的冷启动延迟,这可能会导致糟糕的用户体验。

英文:

As you might know, the Stripe payment extension for Firebase does the following:

  1. Creates a products collection that gets filled with products managed in Stripe.
  2. Creating a document under customers/{id1}/checkout_sessions/{id2} creates a payment in stripe. The document gets updated with the payment URL that the user can use to pay.
  3. After paying, a document gets created by Stripe at customers/{id1}/payments/{id3}

How do you associate the payment that gets registered to the document in checkout_sessions?

The checkout_session document looks like

{
  cancel_url: (CancelUrl),
  client: "web",
  created: (Timestamp),
  mode: "payment",
  price: (The priceId associated to the product),
  sessionId: (The session id of the checkout_session),
  success_url: (SuccessUrl)
}

I create the checkout_session document myself, so I can add extra meta data in there but I'm not sure if Stripe can use it.

The payment document is significantly more complex. But the only id that I can associate to anything is the customer stripeId which appears as customer on the payment document.

Basically I'm trying to do the following.

  1. A user creates a digital item with some custom properties (name, options, etc).
    This can happen during the creation of the checkout_sessions document.
  2. They pay using the URL provided.
  3. The payments document is created
  4. This is where you help me figure out to validate that the payment they made is associated with the digital item created.

One idea that I have that will probably work is to do the following: Instead of allowing the creation of the digital item during the creation of the checkout_sessions document, I can create a "voucher" for that specific item. It won't have any personalization or options, but what I can do is create document onCreate cloud function on the payment document. If the payment is successful, allow the creation of the digital item. I can look up the 'template' based on the item purchased.

I dont like this option because there are at least 2 potential cold start delays that could make this a bad user experience.

答案1

得分: 0

你应该监听 checkout.session.completed 事件并提取结帐会话对象的 line_items。从那里你会知道哪些商品已成功购买。

详细说明在集成文档中。

英文:

You should listen to the checkout.session.completed event and retrieve the line_items of the checkout session object. From there you'll know what items are purchased successfully.

The details are explained in the integration doc

答案2

得分: 0

在创建 checkout_sessions 文档时,您可以添加一个 metadata 对象,其中可以包含键值对,这些键值对将出现在在 payments 集合中创建的文档的根部。

英文:

When creating the checkout_sessions document, you can add a metadata object that can contain key:value pairs that will appear on the root of the document that is created in payments collection.

huangapple
  • 本文由 发表于 2023年4月11日 12:51:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/75982494.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定