使用 Firebase 'Run Subscription Payments with Stripe' 扩展购买多个订阅

Posted

技术标签:

【中文标题】使用 Firebase \'Run Subscription Payments with Stripe\' 扩展购买多个订阅【英文标题】:Purchasing multiple subscriptions using Firebase 'Run Subscription Payments with Stripe' extension使用 Firebase 'Run Subscription Payments with Stripe' 扩展购买多个订阅 【发布时间】:2021-04-19 11:31:50 【问题描述】:

我已在我的 Firebase 项目中添加了 Firebase 'Run Subscription Payments with Stripe' 扩展,并使其能够处理单个订阅的付款,但我正在构建的应用程序将出售许多不同的订阅和用户需要能够同时购买多个。

我正在努力寻找如何一次处理多个订阅。我正在使用与 Firebase 扩展文档中的代码非常相似的东西来重定向到 Stripe 结帐:

const purchase = 
    price: 'price_1GqIC8HYgolSBA35zoTTN2Zl',
    success_url: window.location.origin,
    cancel_url: window.location.origin,
  

const docRef = await db
  .collection('users')
  .doc(currentUser.uid)
  .collection('checkout_sessions')
  .add(purchase);

// Wait for the CheckoutSession to get attached by the extension
docRef.onSnapshot((snap) => 
  const  error, sessionId  = snap.data();
  if (error) 
    // Show an error to your customer and 
    // inspect your Cloud Function logs in the Firebase console.
    alert(`An error occured: $error.message`);
  
  if (sessionId) 
    // We have a session, let's redirect to Checkout
    // Init Stripe
    const stripe = Stripe('pk_test_1234');
    stripe.redirectToCheckout( sessionId );
  
);

我尝试用数组 line_items 替换 price 值,它可以很好地使用列出的多个产品进行结帐,但回到 Firebase,这会为用户创建一个订阅文档,而我需要为每个订阅创建订阅文档(最好带有元数据)。似乎 line_items 只应该用于在同一订阅上实施多个价格的情况(例如初始设置费)。

我还尝试改用 Stripe 文档中名为 items 的数组,但是在尝试这种方法时,错误状态如下: Missing required param: line_items[0][currency]

似乎我不能多次调用add(),因为对add 的调用返回重定向到结帐所需的sessionId。请告诉我,通过这个扩展,这是可能的。谢谢!

【问题讨论】:

【参考方案1】:

不支持使用同一个 Checkout 会话创建多个订阅。正如您所说的,您可以创建一个具有多个价格的订阅,这是受支持的。

为了使用 Checkout 创建多个订阅,您的系统需要通过 Checkout 向用户发送 N 次 N 订阅。

如果这不是一个有利的选择,另一种途径是不使用 Checkout 并使用 Elements [1] 收集客户的付款详细信息。然后,您将有机会通过尝试使用保存的付款方式开始订阅来优化用户体验,避免每次都经历 Checkout。

[1]https://stripe.com/docs/billing/subscriptions/fixed-price

【讨论】:

以上是关于使用 Firebase 'Run Subscription Payments with Stripe' 扩展购买多个订阅的主要内容,如果未能解决你的问题,请参考以下文章

谷歌通过节点(firebase)获取身份令牌

Firebase Cloud Function 部署 tslint 错误

BigQuery:回填时如何在查询中使用 run_date

使用 Google Cloud Run 时如何访问已装载的机密?

命令“npm run build”没有在 VueJS 项目上创建正确的构建

Firebase Crashlytics 在 iOS 中不起作用