归因脚本

通过轻量客户端脚本追踪你的收入来源。

归因脚本用于收集访客上下文信息(UTM 参数、来源页、设备信息),并存储在 Cookie 中。当客户结账时,你将这些数据作为结账 metadata 传递,Money Fast 就能将每笔订单归因到对应的流量来源。

第一步:安装脚本

在你网站的 <head> 中添加以下脚本标签:

<script defer src="https://moneyfa.st/js/script.min.js"></script>

脚本非常轻量(gzip 后约 1KB),异步加载,会设置一个名为 _moneyfast 的 Cookie 来存储归因数据。Cookie 有效期 30 天,当访客携带新的 UTM 参数访问时会自动刷新。

调试模式

想查看脚本收集了什么数据,可以启用调试模式:

<script defer src="https://moneyfa.st/js/script.min.js" data-debug="true"></script>

打开浏览器开发者控制台,可以看到 [MoneyFast] 开头的日志信息。

第二步:在结账时传递 Metadata

创建结账会话时,读取 Cookie 并将其值作为 metadata 传递。以下以 Stripe 为例,其他支付平台类似。

Stripe — Node.js / Next.js 示例

import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

// 从请求头解析 _moneyfast cookie
function getMoneyFastMeta(cookieHeader) {
  const match = cookieHeader?.match(/(^| )_moneyfast=([^;]+)/);
  if (!match) return {};
  try {
    return JSON.parse(decodeURIComponent(match[2]));
  } catch {
    return {};
  }
}

// 创建 Checkout Session
export async function createCheckout(req) {
  const meta = getMoneyFastMeta(req.headers.get('cookie'));
  // 添加 exit_page,移除内部字段
  meta.moneyfast_exit_page = new URL(req.url).pathname;
  delete meta.moneyfast_ts;

  const session = await stripe.checkout.sessions.create({
    mode: 'subscription', // 或 'payment'
    line_items: [{ price: 'price_xxx', quantity: 1 }],
    success_url: 'https://example.com/success',
    cancel_url: 'https://example.com/cancel',
    // 传递 metadata 到 checkout session
    metadata: meta,
    // 订阅类产品还需要传到 subscription_data
    subscription_data: {
      metadata: meta,
    },
  });

  return session.url;
}

客户端(浏览器)示例

如果你从前端创建结账会话,可以使用全局的 MoneyFast.meta() 方法:

const response = await fetch('/api/create-checkout', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    priceId: 'price_xxx',
    // 传递 MoneyFast 归因 metadata
    metadata: window.MoneyFast?.meta() || {},
  }),
});

然后在服务端,将 metadata 合并到结账会话中:

const session = await stripe.checkout.sessions.create({
  // ...其他选项
  metadata: req.body.metadata,
  subscription_data: {
    metadata: req.body.metadata,
  },
});

Metadata 字段说明

所有字段使用 moneyfast_ 前缀。Money Fast 会自动从支付事件的 metadata 中读取这些数据。

字段说明来源
moneyfast_ref流量来源utm_sourcerefvia 查询参数
moneyfast_campaign营销活动utm_campaign 查询参数
moneyfast_medium流量媒介utm_medium 查询参数
moneyfast_term搜索关键词utm_term 查询参数
moneyfast_content广告内容utm_content 查询参数
moneyfast_landing_page着陆页自动检测
moneyfast_exit_page结账页面MoneyFast.meta() 设置
moneyfast_referrer来源 URL自动检测
moneyfast_device设备类型desktopmobiletablet
moneyfast_browser浏览器自动检测
moneyfast_os操作系统自动检测
moneyfast_lang浏览器语言自动检测
moneyfast_tz时区自动检测

JavaScript API

脚本暴露了一个全局的 MoneyFast 对象:

// 获取 Cookie 中的原始归因数据
MoneyFast.get()

// 获取用于结账的 metadata(添加 exit_page,移除内部字段)
MoneyFast.meta()

// 手动重新收集归因数据
MoneyFast.collect()

// 清除归因 Cookie
MoneyFast.clear()

注意事项

  • 订阅 metadata(Stripe):Stripe 不会自动将结账会话的 metadata 传递到订阅对象。你必须显式设置 subscription_data.metadata,否则续费事件将缺失归因数据。
  • Cookie 作用域_moneyfast Cookie 设置在你的域名下,使用 SameSite=Lax。它在你网站的所有页面上有效,但不会跨域追踪。
  • 无 PII:脚本不收集任何个人身份信息,只捕获 UTM 参数、页面 URL 和设备/浏览器信息。