如何将Firebase Stripe扩展的checkout_session与支付关联?
如何关联Firebase Stripe扩展的Payment文档与Checkout Session文档?
核心关联方案:利用Stripe Metadata传递关联信息
Firebase Stripe扩展完全支持在创建checkout_sessions文档时添加自定义metadata字段,这些字段会同步到Stripe的Checkout Session对象中,支付完成后会自动携带到生成的payments文档里,这是官方支持的功能,不用担心Stripe无法识别。
具体操作步骤:
创建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仅支持字符串类型)。通过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匹配的文档,进而获取会话创建时的所有信息。
针对核心需求的优化方案(避免冷启动延迟)
你之前的方案存在两次云函数冷启动的问题,可调整为以下流程优化体验:
- 同步创建数字商品与checkout_session:用户提交自定义商品属性时,先将数字商品保存到Firestore(比如
custom_products/{prod_id}),同时生成包含该商品ID的checkout_sessions文档(按上述方法注入metadata)。 - 用户完成支付:跳转至success_url后,前端可直接通过Payment文档的
metadata关联到已创建的数字商品,无需等待云函数。 - 可选:支付后激活商品:若需要对商品做激活操作,仅需一次云函数触发(监听
payments文档的onCreate事件),读取metadata.custom_product_id找到对应商品文档,标记为已支付状态即可。
这种方式最多仅需一次云函数冷启动,且数字商品在支付前已创建,用户体验不受影响。
内容的提问来源于stack exchange,提问作者RoboKozo
相关产品推荐
相关产品推荐

