4 种定价模式
Pay4SaaS 内置了 4 种定价模式,通过一个环境变量切换,项目中不用改代码。
模式总览
| 模式 | 环境变量值 | 适用场景 | 用户付费方式 |
|---|---|---|---|
| 积分模式 | credits | 按量计费的工具类产品 | 购买积分包,用完再买 |
| 无限订阅 | subscription_unlimited | 标准 SaaS 订阅 | 按月/年订阅,不限用量 |
| 配额订阅 | subscription_quota | 需要用量控制的 SaaS | 订阅获得月度配额 + 可加购积分 |
| 买断制 | lifetime | 一次性付费产品 | 一次付费,永久使用 |
切换模式
在 .env.local 中设置:
NEXT_PUBLIC_PRICING_MODEL=credits可选值:credits、subscription_unlimited、subscription_quota、lifetime。
改完重启项目即可,定价页、结账流程、访问控制都会自动适配。
模式 1:积分模式(Credits)
双积分系统:购买积分永不过期,赠送积分按批次自动过期(默认 30 天)。每次使用服务扣 1 个积分,消费优先级为赠送积分 → 购买积分。

适合: AI 工具、图片生成、API 调用等按量计费场景。
配置积分包
在 config/payment.ts 的 PACKAGES 中配置。
如果项目是中英双语,用 featureKeys 引用 locale 文案:
export const PACKAGES = {
basic: {
credits: 10,
amount: 9.99,
amountCNY: 29,
name: 'Starter',
description: 'Perfect for casual writers',
featureKeys: [
'pricing.packages.basic.feature1',
'pricing.packages.basic.feature2'
],
recommended: false
}
}如果项目只有一种语言,可以直接在积分包里写 features 数组:
features: ['10 次 AI 写作额度', '博客文章生成']要点:
- 支持 2~4 个积分包,key 固定为
basic、pro、max、ultra,请勿修改 - 每个积分包里
featureKeys和features二选一,不要同时写 - 双语项目用
featureKeys,并在locales/en.ts和locales/zh.ts中维护同一批 key - 单语言项目用
features,展示文案直接配置在config/payment.ts - 不需要的套餐直接注释掉对应的 key
- 国内站会自动使用
amountCNY价格
模式 2:无限订阅(Subscription Unlimited)
用户按月或按年订阅,订阅期间不限使用次数。支持试用期。

适合: 标准 SaaS 产品,不需要精细化用量控制。
配置订阅计划
在 config/payment.ts 的 SUBSCRIPTION_PLANS 中配置。
如果项目是中英双语,用 featureKeys 引用 locale 文案:
export const SUBSCRIPTION_PLANS = {
basic: {
priceMonthly: 9.99,
priceYearly: 99.99,
priceMonthlyCNY: 29,
priceYearlyCNY: 299,
name: 'Basic',
featureKeys: [
'pricing.subscriptions.basic.feature1',
'pricing.subscriptions.basic.feature2'
],
recommended: false
}
}如果项目只有一种语言,可以直接在订阅计划里写 features 数组:
features: ['每月 50 篇文章', '邮件支持']要点:
- 支持 2~4 个订阅计划,key 固定为
basic、pro、max、ultra,请勿修改 - 每个订阅计划里
featureKeys和features二选一,不要同时写 - 双语项目用
featureKeys,并在locales/en.ts和locales/zh.ts中维护同一批 key - 单语言项目用
features,展示文案直接配置在config/payment.ts
配置试用期
export const SUBSCRIPTION_UNLIMITED_CONFIG = {
trialDays: 7, // 试用天数
trialPlan: 'pro' as SubscriptionPlan // 支持试用的计划
}每个用户只能试用一次,系统会自动记录。默认只有 pro 计划支持试用——这也是行业惯例:免费试用高级版,体验过好功能后更容易转化为付费用户。
配置支付失败后的访问权限宽限期
SUBSCRIPTION_PAYMENT_FAILURE_ACCESS_GRACE_PERIOD_DAYS 用来配置订阅支付失败后的访问权限宽限期,适用于 subscription_unlimited 和 subscription_quota 两种订阅模式。
export const SUBSCRIPTION_PAYMENT_FAILURE_ACCESS_GRACE_PERIOD_DAYS = 3当订阅续费失败并进入 past_due 等可恢复状态时,系统会在当前计费周期结束后继续保留一段会员访问权限。默认值为 3,表示我们这边继续保留 3 天会员权限。
不同支付平台可能有自己的扣款重试策略,而且重试天数不一定一致。这个配置不控制支付平台的重试周期,只控制 Pay4SaaS 本地系统在支付失败后保留会员访问权限多久。宽限期结束后,如果订阅仍未恢复,系统会把本地订阅状态收敛为 unpaid,用户失去订阅会员权限。这个配置不会改变套餐价格、试用期、配额数量或积分扣减规则。
模式 3:配额订阅(Subscription Quota)
三积分系统:订阅配额每月自动重置,赠送积分按批次自动过期(默认 30 天),购买积分永不过期。配额用完可额外购买积分包继续使用。消费优先级:订阅配额 → 赠送积分 → 购买积分。

适合: 需要用量控制但又想提供灵活性的 SaaS,比如 Claude Pro 的模式。
配置
配额订阅同时使用 SUBSCRIPTION_PLANS 和 PACKAGES:
SUBSCRIPTION_PLANS中的quota字段定义每月配额PACKAGES定义可额外购买的积分包
// SUBSCRIPTION_PLANS 中
pro: {
priceMonthly: 29.99,
priceYearly: 299.99,
name: 'Pro',
quota: 500, // 月付用户每月 500 次
quotaYearly: 750, // 年付用户每月 750 次(年付优惠)
// ...
}模式 4:买断制(Lifetime)
用户一次付费,永久拥有,不限使用。

适合: UI 组件库、模板、工具包等一次性交付的产品。
配置买断计划
在 config/payment.ts 的 LIFETIME_PLANS 中配置。
如果项目是中英双语,把展示文案放在 locale 文件里,然后用 featureKeys 引用:
export const LIFETIME_PLANS = {
standard: {
price: 279, // 美元价格
priceCNY: 1699, // 人民币价格
originalPrice: 349, // 原价,用于展示划线价
originalPriceCNY: 1999,
name: 'Lifetime',
featureKeys: [
'pricing.include1',
'pricing.include2',
'pricing.include3'
],
recommended: false
}
}然后在 locales/en.ts 和 locales/zh.ts 中写同一批 key,并分别填写英文和中文文案。
如果项目只有一种语言,可以直接在计划里写 features 数组:
export const LIFETIME_PLANS = {
standard: {
price: 279,
originalPrice: 349,
name: 'Lifetime',
features: ['200+ components', 'Lifetime updates', 'Priority support'],
recommended: false
}
}要点:
- 支持 1~3 个买断计划,key 固定为
standard、exclusive、ultimate,请勿修改 - 一个买断计划里
featureKeys和features二选一,不要同时写 featureKeys更适合双语项目,因为真正显示给用户的文案统一放在locales/en.ts和locales/zh.tsfeatures更适合单语言项目,因为展示文案可以直接配置在config/payment.tsoriginalPrice用于展示划线价,营造折扣感- 不需要的计划直接注释掉
- 买断记录会使用固定的
LIFETIME_PERIOD_END作为数据库里的周期结束时间
买断周期结束时间
LIFETIME_PERIOD_END 定义在 config/payment.ts 中:
const LIFETIME_PERIOD_END = '2099-12-31T23:59:59.999Z'买断制没有真实的月度或年度账期。Pay4SaaS 只把这个足够远的时间作为长期访问的内部标记,不代表用户会在 2099 年真正过期,也不控制支付平台的订单状态。
模式判断工具函数
config/payment.ts 导出了一组工具函数,方便你在代码中做模式判断:
import {
isCreditsMode, // 当前是否为积分模式
isSubscriptionUnlimitedMode, // 当前是否为无限订阅模式
isSubscriptionQuotaMode, // 当前是否为配额订阅模式
isLifetimeMode, // 当前是否为买断模式
hasCredits, // 当前模式是否使用积分(credits 或 subscription_quota)
isSubscriptionMode // 当前模式是否为订阅类型(unlimited 或 quota)
} from '@/config/payment'文档首页
回到完整实施目录。
价格方案
查看订阅、积分和终身买断方案。
博客
阅读更多 SaaS 支付和增长经验。