Next.js 为每个用户的不同项目添加条带订阅
我正在处理的用例很常见,但我需要一些建议来可视化它。 每个用户都可以订阅多个项目 例如,用户有两个项目,项目X和项目Y。现在每个项目都有自己的订阅 对于每个特定于项目的付款,我如何标记客户->项目->订阅 我可以用订阅标记客户,但不确定如何标记项目的订阅 我在想Next.js 为每个用户的不同项目添加条带订阅,next.js,stripe-payments,supabase,Next.js,Stripe Payments,Supabase,我正在处理的用例很常见,但我需要一些建议来可视化它。 每个用户都可以订阅多个项目 例如,用户有两个项目,项目X和项目Y。现在每个项目都有自己的订阅 对于每个特定于项目的付款,我如何标记客户->项目->订阅 我可以用订阅标记客户,但不确定如何标记项目的订阅 我在想 在用户创建时,添加客户 在“项目创建”中,添加具有价格的产品 结帐 会议 订阅/签出已完成 更新数据库 我看到这一个的问题,如果我改变价格计划,我将不得不在所有地方更新( 实现这一目标的最佳/其他备选方案是什么? 我正在使用Nextjs
如果您想更改价格,是的,您必须更新所有订阅。相反,您可能希望查看使用数量或计量计费。首先,您应该为您的订阅计划创建一个
产品和一些价格。价格
表示订阅的实体安
lookup\u key
用于从静态字符串中动态检索价格,如果transfer\u lookup\u key
设置为true,将自动从现有价格中删除查找键,并将其分配给此价格。因此,您始终可以通过使用lookup\u key
并设置transfer\u lo>来检索计划的最新价格okup_键
true
const product=wait stripe.products.create({
名称:'MyService',//您的服务名称
});
const初学者price=等待stripe.prices.create({
单位金额:5,
货币:美元,
重复:{间隔:'月'},
product:product.id,
查找键:“初学者”,
传输\u查找\u键:true,
});
const proPrice=wait stripe.prices.create({
单位金额:20,
货币:美元,
重复:{间隔:'月'},
product:product.id,
查找键:“pro”,
传输\u查找\u键:true,
});
这是我假设的db模式
//数据库模式
接口IUser{
id:字符串
stripeCustomerId:字符串
}
接口项目{
id:字符串
userId:string
}
接口IProjectSubscription{
id:字符串
projectId:字符串
stripeSubscriptionId:string//或/和stripeCheckoutSessionId,这取决于您的用例
}
当用户创建新项目并选择其订阅计划时,您将创建新的checkout.session
,并使用price
传递相应的行项目。您可以使用lookup\u键
获取所选计划的当前price
const prices=wait stripe.prices.list({
查找键:[pro'],
类型:'重复',
限额:1,,
});
const session=wait stripe.checkout.sessions.create({
成功链接:'https://example.com/success',
取消url:'https://example.com/cancel',
付款方式类型:[“卡”],
行项目:[
{price:prices[0].id,数量:1},
],
模式:“订阅”,
});
然后在checkout.session.completed
上,您可以接收checkout.session
对象并在webhook中迁移数据库
接下来,假设您希望将“pro”计划的价格从20美元更改为30美元。在这种情况下,您将使用相同的lookup_key
创建新的price
。这样,您就可以更改新订户的订阅价格,而无需更改向现有订户收取的金额
const newProPrice=wait stripe.prices.create({
单位金额:30,
货币:美元,
重复:{间隔:'月'},
product:product.id,
查找键:“pro”,
传输\u查找\u键:true,
});
首先,您应该为订阅计划创建单个产品
和一些价格
。价格
代表订阅计划的实体
lookup\u key
用于从静态字符串中动态检索价格,如果transfer\u lookup\u key
设置为true,将自动从现有价格中删除查找键,并将其分配给此价格。因此,您始终可以通过使用lookup\u key
并设置transfer\u lo>来检索计划的最新价格okup_键
true
const product=wait stripe.products.create({
名称:'MyService',//您的服务名称
});
const初学者price=等待stripe.prices.create({
单位金额:5,
货币:美元,
重复:{间隔:'月'},
product:product.id,
查找键:“初学者”,
传输\u查找\u键:true,
});
const proPrice=wait stripe.prices.create({
单位金额:20,
货币:美元,
重复:{间隔:'月'},
product:product.id,
查找键:“pro”,
传输\u查找\u键:true,
});
这是我假设的db模式
//数据库模式
接口IUser{
id:字符串
stripeCustomerId:字符串
}
接口项目{
id:字符串
userId:string
}
接口IProjectSubscription{
id:字符串
projectId:字符串
stripeSubscriptionId:string//或/和stripeCheckoutSessionId,这取决于您的用例
}
当用户创建新项目并选择其订阅计划时,您将创建新的checkout.session
,并使用price
传递相应的行项目。您可以使用lookup\u键
获取所选计划的当前price
const prices=wait stripe