# 在 Next.js SaaS 中接入 Waffo 支付（分步教程）

> 把 Waffo（Pancake MoR 或 Acquiring）接进 Next.js 结账：API key、Webhook 验签、价目 id 与一次测试购买。

- Author / publisher: make1day (company)
- Published: 2026-11-08
- Canonical: /blog/waffo-payment-setup-tutorial
- Category: Tutorial
- Tags: Waffo payment setup, Waffo Pancake tutorial, Next.js SaaS checkout, Waffo webhook
- Language: zh

Waffo 有两种形态，接入方式不同。本教程两种都覆盖，因为 make1day 的集成通过同一套结账与 Webhook 契约支持两者。

## 1. 确定形态

把 **WAFFO_FLAVOR** 设为 **pancake**（全球 MoR 结账）或 **acquiring**（东南亚收单）。默认是 pancake；适配器据此切换端点与签名。

## 2. 收集凭证

Pancake 需要 **WAFFO_STORE_SLUG**（或 **WAFFO_STORE_ID** / **WAFFO_MERCHANT_ID**）与 **WAFFO_PRIVATE_KEY**。Acquiring 需要商户合同字段：**WAFFO_ACQUIRING_MERCHANT_INFO**、**WAFFO_ACQUIRING_USER_INFO**、**WAFFO_ACQUIRING_PAYMENT_INFO**、**WAFFO_ACQUIRING_ORDER_CURRENCY**、**WAFFO_ACQUIRING_ORDER_DESCRIPTION**，外加 **WAFFO_PRIVATE_KEY** 与各环境的 Webhook 公钥。

## 3. 创建商品与价格

在 Waffo 后台为 Buyout 建一次性商品、为 Care 建周期商品，把价格 id 填入 **WAFFO_PRICE_ID_BUYOUT** 与 **WAFFO_PRICE_ID_CARE**。若做黑五或 MGM 促销，另建价格 id 并设 **WAFFO_PRICE_ID_BUYOUT_BF** / **_MGM**（Webhook 的 plan 反推会自动识别）。

## 4. 配置 Webhook

把 Waffo 指向你的 **/api/payments/webhook/waffo** 端点。Pancake 用平台 RSA 公钥（**WAFFO_WEBHOOK_PUBLIC_KEY**，含 test / prod 变体）验证。Acquiring 用 RSA 给请求签名，同样需要该公钥。务必在服务端验证签名后再信任负载——绝不能跳过。

## 5. 设定网关

设 **PAYMENT_PROVIDER=waffo** 及上述 Waffo 环境变量。结账调用会为当前方案解析正确的价格 id，Webhook 则通过价格 id 反推方案并发放许可。

## 6. 跑沙箱测试

使用 Waffo 测试环境（**WAFFO_ENVIRONMENT=test**）做一次测试购买。确认 Webhook 触发、方案被正确反推、许可 key 已签发。在真实沙箱往返变绿前不要上线。

若你用 make1day，六个适配器共享同一套契约，因此 Creem、Stripe、PayPal、Lemon Squeezy 走的是同一代码路径——只换 env 即可。

## FAQ

### 该用哪种 Waffo 形态？

想要全球商户登记结账用 pancake。仅当你已有需要特定字段与 RSA 签名的区域收单合同时，才用 acquiring。

### 需要验证 Waffo Webhook 签名吗？

需要。集成对两种形态都用平台公钥在服务端验证。跳过验证会让任何人伪造已支付事件。

### 许可是怎么签发的？

Webhook 通过价格 id（含 BF 与 MGM id）反推方案并调用许可发放。若未配置价格 id，结账会回退到展示模式。

---

Source: make1day. See /llms.txt and /llms-full.txt for the full machine-readable product description.
