firebase - 使用 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 仅应用于在同一订阅上实施多个价格(例如初始设置费)时。
我也尝试使用items
Stripe 文档中的一个名为的数组,但是在尝试这种方法时,错误状态如下:
Missing required param: line_items[0][currency]
好像我不能add()
多次调用,因为调用add
返回sessionId
所需的重定向到结帐。请告诉我,通过这个扩展,这是可能的。谢谢!
解决方案
不支持使用同一个 Checkout 会话创建多个订阅。正如您所说的,您可以创建一个具有多个价格的订阅,这是受支持的。
为了使用 Checkout 创建多个订阅,您的系统需要通过 Checkout 向用户发送 N 次 N 订阅。
如果这不是一个有利的选择,另一种途径是不使用 Checkout 并使用 Elements [1] 收集客户的付款详细信息。然后,您将有机会通过尝试使用保存的付款方式开始订阅来优化用户体验,从而避免每次都经历 Checkout。
[1] https://stripe.com/docs/billing/subscriptions/fixed-price
推荐阅读
- angular - 我们如何在 Angular 7 中的 URL 中编码 # 并发送到后端服务器,因为后端不会收到 URL 中 # 之后的任何内容
- python - 如何拆分堆叠特征的训练测试数据?
- kubernetes - Kubernetes:每个集群或每个 statefulset 或 replicaset 需要完成一次的任务
- php - 输入文本框时不显示自动完成,但控制台中显示值
- c++ - 如何对继承的文件使用前向声明
- amazon-s3 - logstash 输出 s3 文件名
- database - 使用laravel导入时如何防止在数据库中复制csv文件?
- html - 我想在影响导航栏的图片上悬停
- php - 如何从 symfony 表单的多维字段中勾选特定复选框?
- python - 如何将具有相同文件名的csv导入数据框,应用一些程序,然后合并?