跳转到主要内容

产品 = 计费对象

在 Waffo Pancake 中,产品(Product) 是用于收银台、计税和归档的对象。它是你对外收费的商业化”报价单”,而不仅仅是一张展示卡片。
更专业的理解方式是:把产品视为计费实体:
  • 一个固定价格的报价
  • 一个订阅方案
  • 或一个用于收银台动态定价的基础产品

核心建模方式

一次性付款

用户为预设价格支付一次。
  • 数字下载
  • 终身许可证
  • 模板、课程、素材

订阅制

用户按固定周期持续支付。
  • SaaS 方案
  • 会员制
  • 服务合同

动态定价

金额在收银台时计算。
  • 超额用量
  • 充值包
  • 按报价收费

创建产品

控制台 → 产品 → 创建产品
{
  "storeId": "your-store-uuid",
  "name": "Pro Plan",
  "prices": {
    "USD": { "amount": "29.00", "taxIncluded": false, "taxCategory": "saas" }
  }
}
完成。 你会得到一个固定价格产品的永久购买链接,或者一个可被程序化收银台复用的计费对象。

产品字段

必填项

字段说明
名称你的消费者看到的内容
价格收费金额
货币USD、EUR、GBP、CNY、JPY、HKD 等
类型一次性收费或订阅计费
商品类别SaaS、数字商品、软件等

选填项

字段默认值用途
描述Markdown 格式,用于推销产品
图片推荐 400x400px
跳转 URL结账完成后客户的落地地址。支付成功与失败都使用同一个地址 — 只支持配置一个。

价格限制

每种币种都有可设置的最低和最高价格,超出范围的价格在保存商品时会被拒绝。
币种最低最高
USD$1.00$7,500.00
EUR€1.00€7,400.00
GBP£1.00£6,400.00
JPY¥100¥1,250,000
HKDHK$8.00HK$61,000.00
CNY 可以在 dashboard 的分析视图中作为展示币种使用,但目前不支持作为商品定价币种。

动态定价

当最终收费金额要在运行时计算时,应使用动态定价。 典型场景:
  • 超额用量收费
  • 可变额度充值
  • 按合同报价收费
  • 服务端实时计算折扣后的金额

实现方式

  1. 在 Waffo Pancake 中创建一个基础一次性产品
  2. 在服务端计算最终金额
  3. 创建 Checkout Session 时传入 priceSnapshot
const session = await client.checkout.createSession({
  storeId: "store_id",
  productId: "usage-overage-product-id",
  productType: "onetime",
  currency: "USD",
  priceSnapshot: {
    amount: calculatedAmount,
    taxIncluded: false,
    taxCategory: "saas",
  },
});
priceSnapshot 会覆盖该次收银台使用的产品价格。它必须由服务端生成,不能从不可信的客户端直接传入。
如果收费是事件型、按实际发生量计算的,即使客户本身属于订阅用户,这笔收费也应继续建模为一次性收费。

免费试用

让客户在购买前试用订阅产品。

试用滥用保护

Waffo Pancake 在平台层面自动追踪消费者的试用历史。当消费者开始新的订阅时,平台会根据其历史记录计算最大可用试用天数——无需商户做任何额外操作即可防止重复试用滥用。 商户也可以通过 API 传递 requested_trial_days 来为特定客户缩短或跳过试用期。
有效的试用滥用防护需要 buyerIdentity。使用认证式收银台确保每个买家对每个产品只能领取一次试用。

计费周期

周期频率最适用于
每周每 7 天高使用量产品
每月每月标准 SaaS
每季度每 3 个月B2B 软件
每年每 12 个月长期客户
年付方案打 15-20% 折扣 = 更低的流失率 + 更好的现金流。

产品购买链接

每个产品都拥有一个永不过期的固定购买链接:
https://checkout.waffo.ai/{store-slug}/{product-slug}
测试模式:
https://checkout.waffo.ai/{store-slug}/{product-slug}/test
绑定到你的网站:
  • 网站按钮
  • Twitter 简介
  • 邮件签名
  • Discord 服务器
核心优势:
  • 链接是永久的——即使你更新产品信息,链接也保持不变
  • 无需管理会话或令牌
  • 客户打开链接时,收银台会话会自动创建
生成你的链接:
  • 控制台:在任意产品上点击”复制链接”
  • API:在更高级的场景下,可通过 API 创建带自定义参数的 Checkout Session(动态链接,TTL 为 7 天)
测试与正式环境:
  • 在控制台顶部切换测试模式即可使用测试链接进行预览
  • 测试链接使用 /test 后缀

产品状态

Active

已上线,客户可以购买。

Inactive

已隐藏,现有订阅继续有效。

更新产品

产品采用不可变版本控制
更新会创建新版本。现有订阅保持其原始版本不变。
字段影响
名称/描述创建新版本
图片创建新版本
价格仅影响新购买
计费周期创建后无法更改

环境同步

将产品版本从测试环境发布到生产环境:
POST /v1/actions/onetime-product/publish-product
{
  "id": "product-id"
}
发布是单向的(测试 → 生产),只在首次发布时需要。

最佳实践

包含计费周期:
  • “Pro Plan - Monthly”
  • “Pro Plan - Annual (Save 20%)”
  • 使用整数价格(29,而非29,而非 28.73)
  • 年付折扣(15-20%)
  • 研究竞争对手
  • 最小 400x400px
  • PNG 或 JPG 格式
  • 小于 2MB