You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

如何关联Firebase Stripe扩展的Payment文档与Checkout Session文档?

核心关联方案:利用Stripe Metadata传递关联信息

Firebase Stripe扩展完全支持在创建checkout_sessions文档时添加自定义metadata字段,这些字段会同步到Stripe的Checkout Session对象中,支付完成后会自动携带到生成的payments文档里,这是官方支持的功能,不用担心Stripe无法识别。

具体操作步骤:

  1. 创建checkout_session文档时注入关联信息
    在你自行创建customers/{id1}/checkout_sessions/{id2}文档时,添加metadata字段,写入需要关联的关键信息,示例如下:

    {
      cancel_url: "https://your-domain.com/cancel",
      client: "web",
      created: Timestamp,
      mode: "payment",
      price: "price_xxx",
      sessionId: "cs_xxx",
      success_url: "https://your-domain.com/success",
      metadata: {
        custom_product_id: "prod_custom_123", // 你创建的数字商品唯一ID
        checkout_session_doc_id: "{id2}" // 当前checkout_session文档的ID
      }
    }
    

    若需要直接传递数字商品的自定义属性(名称、选项等),也可将这些字段加入metadata(注意metadata仅支持字符串类型)。

  2. 通过Payment文档反向关联
    用户完成支付后,Firebase扩展生成的customers/{id1}/payments/{id3}文档会包含以下关键关联字段:

    • metadata:你在checkout_session中定义的所有自定义信息
    • checkout_session:对应Stripe的Checkout Session ID(即checkout_session文档中的sessionId)

    你可以通过两种方式完成关联验证:

    • 直接通过metadata关联数字商品:从Payment文档的metadata.custom_product_id直接定位到预先创建的数字商品文档,验证支付与商品的关联关系。
    • 通过Checkout Session ID关联会话文档:用Payment文档的checkout_session值,在customers/{id1}/checkout_sessions集合中查询sessionId匹配的文档,进而获取会话创建时的所有信息。

针对核心需求的优化方案(避免冷启动延迟)

你之前的方案存在两次云函数冷启动的问题,可调整为以下流程优化体验:

  1. 同步创建数字商品与checkout_session:用户提交自定义商品属性时,先将数字商品保存到Firestore(比如custom_products/{prod_id}),同时生成包含该商品ID的checkout_sessions文档(按上述方法注入metadata)。
  2. 用户完成支付:跳转至success_url后,前端可直接通过Payment文档的metadata关联到已创建的数字商品,无需等待云函数。
  3. 可选:支付后激活商品:若需要对商品做激活操作,仅需一次云函数触发(监听payments文档的onCreate事件),读取metadata.custom_product_id找到对应商品文档,标记为已支付状态即可。

这种方式最多仅需一次云函数冷启动,且数字商品在支付前已创建,用户体验不受影响。

内容的提问来源于stack exchange,提问作者RoboKozo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:53:09