Skip to main content

简单版本

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

完整版本

需要带端到端测试的完整集成:

官方 Waffo Pancake Skill

从 AI 集成页打开官方 Skill 文件,即可查看、复制或下载团队实际使用的标准 SKILL.md

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

AI 编码工作流

当你已经明确业务模式,但希望 AI 帮你把它整理成一套清晰的 Waffo 产品目录和实施方案时,AI 编码代理最有价值。 典型任务:
  • 将定价页转换成 Waffo 产品和产品组
  • 判断哪些收费应建模为订阅产品,哪些应保留为一次性收费
  • 设计基于 priceSnapshot 的动态定价流程
  • 批量生成产品定义、元数据和上线清单
  • 审查现有产品目录的命名、套餐结构和生产就绪度

推荐工作流

1

描述业务模型

说明你卖什么、客户如何被收费、哪些部分是固定价格、哪些部分按用量计算。
2

让代理输出产品目录规划

让它把你的收费项映射成一次性产品、订阅产品、产品组,以及可选的动态定价流程。
3

审核输出结果

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

落地实施

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

提示词模板

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

2. 规划动态定价

3. 审查现有产品目录

实务判断规则

订阅型业务同时创建订阅产品和一次性收费是完全正常的。收费模型应该匹配业务事件,而不是公司标签。

不建议这样做

  • 不要把私钥或生产环境密钥直接贴进提示词
  • 不要在未经人工审核的情况下让 AI 代理直接发布生产产品
  • 如果最终金额在运行时计算,不要把每种价格变体都建成单独的产品
  • 如果收费是事件型的,不要把超额计费硬塞进订阅产品

常见陷阱 — 先读这里

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

使用场景

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

如果产品已在控制台中创建,复制 Product 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 内置两个环境的公钥。验证只需一次函数调用。

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",你的处理程序可以据此区分。

控制台 UI 术语表

控制台支持英文、中文和日文。当文档引用控制台位置(例如”前往 Integration”)时,不同语言下的标签可能不同。使用下表找到正确的菜单项。

导航

关键字段

模式与操作

产品与计费

状态

在哪里找到各类 ID


快速上手清单

  1. npm install @waffo/pancake-ts
  2. 配置 WAFFO_MERCHANT_IDWAFFO_PRIVATE_KEY 环境变量(见上方”在哪里找到各类 ID”)
  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 })