跳转到主要内容

简单版本

直接告诉你的 AI 助手:
就这一句。把这个页面作为 AI 集成主入口,需要精确 SKILL.md 时再直接打开下面的官方 Skill 入口。

完整版本

需要端到端完整集成和测试:

官方 Waffo Pancake Skill

这是 AI 集成页内的官方 Skill 入口。打开后可查看、复制或下载团队当前实际使用的标准 SKILL.md 文件。

@waffo/pancake-ts 是 Waffo Pancake 官方服务端 TypeScript SDK,负责请求签名、收银台会话创建、Webhook 验证和 GraphQL 查询。

AI 编码工作流

当你已经明确业务模式,但希望代理把它整理成一套清晰的 Waffo 产品结构和实施方案时,AI 编码助手最有价值。 典型场景:
  • 将官网定价页映射成 Waffo 的产品、订阅产品组和动态定价流程
  • 判断哪些收费应建模为订阅,哪些应保留为一次性收费
  • 设计基于 priceSnapshot 的动态定价方案
  • 批量生成产品命名、元数据、上线清单
  • 审查现有产品目录,找出命名、分组和生产发布上的问题

推荐工作流

1

先描述业务模型

说明你卖什么、如何收费、哪些部分是固定价格、哪些部分按用量或报价动态计算。
2

让代理输出产品规划

让它把你的收费模型映射成一次性产品、订阅产品、产品组和动态定价流程。
3

人工审核

确认产品命名、计费周期、商品类别,以及哪些项目应该保持为一次性收费。
4

落地执行

用输出结果在控制台中创建产品,或进一步生成 SDK / API 集成代码。

推荐提示词

1. 把定价页转成 Waffo 产品结构

2. 规划动态定价

3. 审查现有产品目录

实务判断规则

“订阅型业务”同时包含订阅产品和一次性收费,是完全正常的。建模要服从收费事件,而不是服从公司标签。

不建议这样做

  • 不要把私钥或生产环境密钥直接贴进提示词
  • 不要在未经人工审核的情况下让 AI 直接发布生产产品
  • 不要把所有价格变化都建成新产品;如果金额在运行时计算,应优先考虑 priceSnapshot
  • 不要把超额计费硬塞进订阅产品;如果它是事件型收费,就应该是一笔一次性收费

常见陷阱 — 先读这里

这些是导致集成失败的常见错误。写代码之前先过一遍。

使用场景

Waffo Pancake 是一个 Merchant of Record(MoR)支付平台。以下项目类型适合使用 SDK:
  • SaaS 订阅计费 — 月付/年付计划,支持升降级(例如:Free/Pro/Team 层级)
  • 数字商品销售 — 电子书、模板、课程、许可证的一次性购买
  • 按次付费 — 按下载、API 调用或生成报告等操作收费
  • 混合模式 — 订阅 + 一次性购买组合

安装与配置

仅限服务端使用。Node.js 18+。零依赖。
需要两个环境变量 — 注册时提供:
WAFFO_MERCHANT_ID 指的是 Merchant ID(商户 ID),不是 storeId,也不是 URL 里的商店标识。storeId 仍然是当前 API 模型的一部分,在商店和商品管理流程里会继续使用,不要把这两个概念混在一起。 对第一版能跑通的接入来说,只需要这两个环境变量:WAFFO_MERCHANT_IDWAFFO_PRIVATE_KEY。Store ID 和 Product ID 属于运行时值,可以放在代码、应用配置或你自己的数据库里。

PEM 私钥处理

转义换行符(最简单):
Base64 编码(推荐用于 CI/CD):
文件路径(本地开发):

快速开始:路径 A

Store ID 和 Product ID 属于后续运行时配置。放在你应用自己的配置层即可,不必强制做成环境变量。 如果一个商户名下有多个店铺,创建商品前先确认应该落在哪个店铺,不要直接猜测目标店铺。

快速开始:路径 B

如果产品已在控制台中创建,复制产品 ID 后即可直接创建收银台会话。在这个流程里,你仍然只需要前面的两个环境变量:

API 参考

商店

一次性产品

taxCategory 选项: digital_goods | saas | software | ebook | online_course | consulting | professional_service

订阅产品

订阅产品组

产品组支持共享试用期和订阅计划之间的切换。

收银台会话

订单级参数与优先级

通过 createSession 传递的参数可以覆盖产品级设置。理解优先级关系对 AI 集成至关重要:
priceSnapshot 是动态定价的核心参数。 当传入 priceSnapshot 时,产品上设定的价格会被完全忽略。这适用于:按用量阶梯定价、优惠码动态折扣、A/B 测试不同价格点等场景。

Webhook 集成要点

集成 Webhook 时需要注意以下关键点: 典型 Webhook 处理模式:

取消订阅

GraphQL 查询

只读查询。ID 变量使用 String!(不是 ID!)。

Webhook 验证

SDK 内置 test 和 prod 两个环境的公钥。验证只需一次函数调用。

Next.js App Router

Express

Hono

验证选项

事件类型

事件结构

配置 Webhook URL

一个门店可以注册多条 webhook,每条投递到不同渠道(httpfeishudiscordtelegramslack)。每个渠道和环境对应一条记录:
如需查询 webhook 列表,使用 GraphQL Store.storeWebhooks 字段 — 这是唯一的查询入口。

错误处理

错误按调用栈深度排序:errors[0] 是根本原因(最深层),errors[n] 是最外层调用者。

开发提示

  1. Webhook 隧道 — 使用 cloudflared,不要用 localtunnel(见陷阱表)。
  1. 幂等性自动处理 — SDK 根据 merchantId + path + body 自动生成确定性键。重试是安全的。
  2. Test → Prod 工作流 — 产品默认创建在 test 环境。使用 .publish() 发布到生产环境。Webhook 事件包含 mode: "test" | "prod",你的处理程序可以据此区分。

快速上手清单

  1. npm install @waffo/pancake-ts
  2. 配置 WAFFO_MERCHANT_IDWAFFO_PRIVATE_KEY 环境变量(在控制台 → API 与开发页面顶部,点复制按钮获取)
  3. 初始化 new WaffoPancake({ merchantId, privateKey })
  4. 创建或引用商店
  5. 如果商户名下有多个店铺,先确认商品要创建到哪个店铺
  6. 创建或引用产品
  7. 创建收银台:client.checkout.createSession(...) → 重定向到 checkoutUrl
  8. 使用测试卡 4576750000000110(成功)或 4576750000000220(拒绝)在沙盒中测试
  9. 处理 Webhook:verifyWebhook(rawBody, sig)必须使用 request.text()
  10. 配置 Webhook URL:client.webhooks.add({ storeId, channel: "http", url, events, testMode })