internal 佣金跟踪器、以及 none。internal 适配任何支付 provider——
因为它读的是 vibestrap 已经写好的归一化付款事件,不用再额外接什么。
前置条件
- SaaS provider:去对应平台注册账号,拿 public API key 或 program ID。
- internal:什么都不用。
affiliate_referral和affiliate_commission两张表已经在 schema 里(src/db/affiliate.schema.ts),pnpm db:push一起迁移。 - 已经配好支付 provider(Stripe、Paddle、Lemon Squeezy 或 Creem 任一)。
一步步配置(internal)
-
在
src/config/site.ts启用 internal: -
还没建表就先同步 schema——联盟相关表本来就在默认 schema 里:
-
就这样。流程全自动:
- 访客打开
?ref=CODE→ middleware 写vbs_refcookie。 - 注册 →
recordSignupReferral(userId)写一行到affiliate_referral(userId幂等,重复调用 no-op)。 - 付款 → 支付 webhook 调
recordCommission(),读出 referral,按你设定的百分比 插一行到affiliate_commission。
- 访客打开
-
自己做一个 payout 看板——vibestrap 不带。SQL 大致这样:查
affiliate_commission WHERE status = 'pending'按referrer_code分组, 走 Stripe Connect / 转账 / 任何方式付款,再UPDATE … SET status = 'paid', paid_at = now()。
一步步配置(SaaS provider)
-
在
src/config/site.ts选 provider: -
在
.env.local配对应 env 变量: - 在 provider 后台把支付网关接上(Rewardful/Tolt 走 Stripe Connect、 Affonso 走 Paddle 集成等)。SaaS provider 直接从支付网关读事件, vibestrap 不为 SaaS provider 转发任何东西。
-
重启
pnpm dev让 public env 生效。
怎么挑
| Provider | 适用场景 |
|---|---|
| internal | 不想付月租,要完全控制佣金逻辑,数据要在自己 DB 里。Creem / Lemon 用户基本只能选这个。 |
| Affonso | Stripe + Paddle 集成都不错,支持 lifetime 跟踪,月费便宜。 |
| Rewardful | Stripe 原生最好的那个,体验最精致。要给联盟者一个托管面板的选它。 |
| Tolt | 主打 SaaS,自带排行榜、订阅佣金。Stripe + LemonSqueezy 支持都好。 |
验证生效(internal)
- 无痕窗口访问
https://your.app/?ref=alice。 - devtools → Application → Cookies,确认
vbs_ref=alice,过期时间 60 天。 - 注册账号。然后查库:
- 买点东西。再查:
应该有一行,
commission_cents = amount_cents * 0.20。
常见坑
- Safari ITP 拦 cookie。同域
?ref=落地写的 first-party cookie 没事; 但如果你用跨域跳转(营销子域 → 应用子域),cookie 会被丢。把 referral 落地页 保持跟注册页同 eTLD+1。 - 退款不会自动反向佣金。v0.1 没自动反向——要么手动插一行退款记录
(
commission_cents写负值,status 设cancelled),要么在 payout 查询里UPDATE … SET status = 'cancelled'。 - 自我推荐。当前没有限制用户用自己的 code。在乎的话在
recordCommission加一行守卫:if (referral.userId === input.userId) return;。 - 从 internal 切到 SaaS provider。SaaS provider 在自己后端记账——
affiliate_commission里的历史数据原地保留,只有新付款才会被 SaaS provider 跟踪。 - cookie 名冲突。如果你的买家自己加了一些用
vbs_*前缀的统计 cookie, 把referralCookie改成你品牌专属的名字。
官方文档
- Affonso:affonso.io/docs
- Rewardful:help.rewardful.com
- Tolt:docs.tolt.io
- 内置 schema:
src/db/affiliate.schema.ts - 内置工具函数:
src/affiliate/track.ts