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

Purchasing multiple subscriptions using Firebase 'Run Subscription Payments with Stripe' extension

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

我正在努力寻找如何同时处理多个订阅。我正在使用与 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 returns sessionId 需要重定向到结帐。请告诉我这个扩展可以以某种方式实现。谢谢!

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

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

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

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