运营 SaaS
邀请、推广与奖励
配置邀请链接、归因和推广奖励(固定金额或百分比)。介绍 Cookie 如何记录来源、登录后的最终归因流程,以及在订单支付后计算奖励的方式。
模板已内置邀请/推广系统:分享邀请链接 → Cookie 归因 → 注册/支付奖励,开箱即用,可配置。
代码总览
- 邀请跳转(本地化):
src/app/[locale]/i/[inviteCode]/route.ts - 登录后归因 API:
src/app/api/affiliate/update-invite/route.ts - 邀请码 API:
src/app/api/affiliate/invite-code/route.ts - 奖励计算与去重:
src/services/affiliate.ts - Stripe 集成(支付后):
src/services/stripe.ts - 用户页面:
src/app/[locale]/my-invites/page.tsx- 组件:
invite-link.tsx,summary-cards.tsx,affiliate-table.tsx
- 组件:
- 管理页面:
src/app/(admin)/admin/affiliates/page.tsx - 客户端初始化:
src/providers/affiliate-init.tsx(在src/providers/theme.tsx引入)
流程
- 访问
/:locale/i/<inviteCode>→ 服务端设置refCookie(30天)并重定向。 - 注册/登录后 → 客户端一次性调用
/api/affiliate/update-invite,如用户invited_by未设置则写入,插入注册记录(默认无奖励)。 - 支付成功(Stripe)→ 计算固定/比例/混合奖励,按
paid_order_no去重写入完成记录。 - 页面 → 用户页
/[locale]/my-invites;管理员页/admin/affiliates。
配置
文件: src/data/affiliate.ts
- 项目开关:
enabled,attributionWindowDays,allowSelfReferral,attributionModel - 奖励:
commissionMode(fixed_only / percent_only / greater_of / sum),signup,paid - 发放类型:
payoutType = "cash"(分)或"credits"(站内积分) - 路径:
sharePath(默认/i),myInvitesPath
分享地址基于 NEXT_PUBLIC_WEB_URL。
本地验证
- 在
/[locale]/my-invites生成并复制邀请链接。 - 无痕窗口中打开、注册并登录;返回查看统计。
- Stripe 测试支付后,在管理页查看奖励记录。
提示
- Cookie 写在同一域名(请设置正确的
NEXT_PUBLIC_WEB_URL)。 - 客户端仅在接口返回 200 时标记成功;若登录前调用会在登录后重试。
- 奖励按
paid_order_no去重,不会重复发放。