在 Next.js SaaS 中接入 Waffo 支付(分步教程)
By make1day
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,结账会回退到展示模式。
All frequently asked questions · Markdown version (for AI agents)