logoPay4SaaS
支付

4 种定价模式

Pay4SaaS 内置了 4 种定价模式,通过一个环境变量切换,项目中不用改代码。

模式总览

模式环境变量值适用场景用户付费方式
积分模式credits按量计费的工具类产品购买积分包,用完再买
无限订阅subscription_unlimited标准 SaaS 订阅按月/年订阅,不限用量
配额订阅subscription_quota需要用量控制的 SaaS订阅获得月度配额 + 可加购积分
买断制lifetime一次性付费产品一次付费,永久使用

切换模式

.env.local 中设置:

NEXT_PUBLIC_PRICING_MODEL=credits

可选值:creditssubscription_unlimitedsubscription_quotalifetime

改完重启项目即可,定价页、结账流程、访问控制都会自动适配。

模式 1:积分模式(Credits)

双积分系统:购买积分永不过期,赠送积分按批次自动过期(默认 30 天)。每次使用服务扣 1 个积分,消费优先级为赠送积分 → 购买积分。

适合: AI 工具、图片生成、API 调用等按量计费场景。

配置积分包

config/payment.tsPACKAGES 中配置。

如果项目是中英双语,用 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 固定为 basicpromaxultra,请勿修改
  • 每个积分包里 featureKeysfeatures 二选一,不要同时写
  • 双语项目用 featureKeys,并在 locales/en.tslocales/zh.ts 中维护同一批 key
  • 单语言项目用 features,展示文案直接配置在 config/payment.ts
  • 不需要的套餐直接注释掉对应的 key
  • 国内站会自动使用 amountCNY 价格

模式 2:无限订阅(Subscription Unlimited)

用户按月或按年订阅,订阅期间不限使用次数。支持试用期。

适合: 标准 SaaS 产品,不需要精细化用量控制。

配置订阅计划

config/payment.tsSUBSCRIPTION_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 固定为 basicpromaxultra,请勿修改
  • 每个订阅计划里 featureKeysfeatures 二选一,不要同时写
  • 双语项目用 featureKeys,并在 locales/en.tslocales/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_unlimitedsubscription_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_PLANSPACKAGES

  • 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.tsLIFETIME_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.tslocales/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 固定为 standardexclusiveultimate,请勿修改
  • 一个买断计划里 featureKeysfeatures 二选一,不要同时写
  • featureKeys 更适合双语项目,因为真正显示给用户的文案统一放在 locales/en.tslocales/zh.ts
  • features 更适合单语言项目,因为展示文案可以直接配置在 config/payment.ts
  • originalPrice 用于展示划线价,营造折扣感
  • 不需要的计划直接注释掉
  • 买断记录会使用固定的 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 支付和增长经验。

On this page