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を1回呼び出し、invited_byが未設定なら保存し、登録行を追加(デフォルトでは報酬0)。 - 決済成功(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
共有ベースURL: NEXT_PUBLIC_WEB_URL。
ローカル検証
/[locale]/my-invitesでリンクを生成・コピー。- シークレットウィンドウで開いて登録→ログイン後、
my-invitesで件数を確認。 - Stripe テスト決済後、管理画面で報酬行を確認。
ヒント
- Cookie は同一ホスト(
NEXT_PUBLIC_WEB_URL)で設定されます。 - クライアントは 200 応答でのみ成功フラグをセット。ログイン前に呼ばれた場合はログイン後に再試行します。
- 二重付与はありません(
paid_order_noで重複排除)。