计费系统

所有计费按组织维度,通过 Stripe 处理支付。

计费模式

模式说明
订阅(Subscription)月付/年付,自动续费
积分(Credits)一次性购买积分包
终身买断(Lifetime)一次性付费,永久使用
免费(Free)注册赠送,有过期时间

Stripe Webhook

端点 URL:https://api.yourdomain.com/v1/webhook/stripe

后端通过该端点接收 Stripe 事件,需要在 Stripe Dashboard 中配置。

需要监听的事件

事件处理
checkout.session.completed积分购买、终身买断完成
customer.subscription.created创建订阅记录
customer.subscription.updated升降级、取消续费
customer.subscription.deleted订阅取消
invoice.payment_succeeded发票支付成功
invoice.payment_failed支付失败,标记 past_due
invoice.paid发票已付,赠送积分
price.created同步新价格到本地
price.updated同步价格变更
price.deleted同步价格删除

配置步骤

  1. 登录 Stripe Dashboard → Webhooks
  2. 点击「添加端点」
  3. 端点 URL 填写:https://api.yourdomain.com/v1/webhook/stripe
  4. 选择上述 10 个事件
  5. 创建后复制 Webhook 签名密钥,填入 .envSTRIPE_WEBHOOK_SECRET_KEY

支付配置

api/src/config/website/payment.{suffix}.ts

import type { PaymentConfig } from "@readystart/api-core"
import { PlanMode } from "@readystart/api-core"

export const getPaymentConfig = (): PaymentConfig => ({
  payment: {
    credit: {
      enabled: true,
      currency: "usd",
      unit_price: 0.01,       // 1 积分 = $0.01
      min_credits: 1000,      // 最少购买 1000 积分
      interval: "lifetime",   // 积分有效期
      packages: [
        {
          mode: PlanMode.ONE_TIME_CREDITS,
          plan_id: "credits_1000",
          name: "1000 Credits",
          credits: 1000,
          amount: 1000,        // $10.00(单位:分)
          interval: "month",
          interval_count: 1,
        },
      ],
    },
    subscription: {
      enabled: true,
      packages: [
        {
          mode: PlanMode.FREE,           // 计划模式
          plan_id: "free",               // 计划 ID
          name: "Free",                  // 显示名称
          credits: 50,                   // 赠送积分数
          amount: 0,                     // 价格(免费为 0)
          interval: "month",             // 周期单位
          interval_count: 1,             // 周期数量
          interval_type: "recurring",    // 周期类型
        },
        {
          mode: PlanMode.SUBSCRIPTION,
          plan_id: "pro_monthly",
          name: "Pro Monthly",
          credits: 500,
          amount: 1900,        // $19.00
          interval: "month",
          interval_count: 1,
        },
      ],
    },
  },
})

免费积分包

用户注册时自动创建免费积分包,配置为 mode: PlanMode.FREE 的套餐。

前端页面

页面说明
/subscription订阅管理
/credits积分列表
/credits?tab=usage使用记录(含用户邮箱)
/credits/packages积分套餐购买
/invoices发票列表

Dashboard 积分显示

Dashboard 的 Credits 卡片显示成员实际可用额度: