首页 > 解决方案 > 使用 Firebase 'Run Subscription Payments with Stripe' 扩展购买多个订阅

问题描述

我已将 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 });
  }
});

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

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

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

标签: firebasestripe-paymentsfirebase-extensions

解决方案


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

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

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

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


推荐阅读