如何实现Stripe客户门户按产品展示对应用户订阅?
问题描述
我们拥有两款Web产品A和B,共享同一用户数据库,分别提供付费月订阅服务。用户可能处于以下状态:无订阅、仅订阅A、仅订阅B或同时订阅两者。后端基于Node.js构建,支付由Stripe管理。用户可通过客户门户管理订阅,当前代码如下:
const portalSession = await stripe.billingPortal.sessions.create({ customer: customer.id, });
该代码会让同时订阅A和B的用户X在客户门户中看到两款订阅。我们希望实现:在产品A的客户门户中,用户X仅能看到A的订阅;在产品B的客户门户中,仅能看到B的订阅。请问是否可以实现此需求?
解决方案
可以实现这个需求。Stripe Billing Portal支持通过创建会话时的参数配置,限定用户能看到和管理的订阅产品,具体有两种常用实现方式:
方式一:指定单个订阅ID
若你能提前获取到用户对应目标产品的订阅ID,可在创建门户会话时通过subscription参数指定该ID,门户将仅展示该订阅:
// 示例:创建产品A的门户会话,指定用户的A订阅ID const portalSessionForA = await stripe.billingPortal.sessions.create({ customer: customer.id, subscription: "sub_xxxxxx", // 替换为用户对应产品A的订阅ID return_url: "https://your-app.com/product-a/dashboard", // 产品A的返回页面地址 });
方式二:限定可管理的产品范围
若需要允许用户管理目标产品下的所有订阅(比如用户可能拥有多个产品A的订阅),可通过features.subscription_update.products参数指定允许的产品ID,同时按需配置其他功能的启用状态:
// 示例:创建产品A的门户会话,限定仅可管理产品A的订阅 const portalSessionForA = await stripe.billingPortal.sessions.create({ customer: customer.id, return_url: "https://your-app.com/product-a/dashboard", features: { subscription_update: { enabled: true, products: [{id: "prod_xxxxxx"}] // 替换为产品A的ID }, // 根据业务需求启用/禁用其他功能 subscription_cancel: {enabled: true}, payment_method_update: {enabled: true} } });
针对产品B的门户会话,只需将上述代码中的订阅ID或产品ID替换为对应产品B的信息即可。
需要注意的是,后端需要提前完成逻辑:获取用户对应目标产品的订阅ID,或明确目标产品的固定ID,确保创建会话时传入正确参数。
内容的提问来源于stack exchange,提问作者SoftTimur
相关产品推荐
相关产品推荐

