# Stripe 订阅与账单 (https://talivia.com/zh-CN/docs/revenue-guides/stripe/subscriptions-and-invoices)



循环收入涉及两个归因问题：匹配最初的订阅注册，以及把之后的账单付款重新关联到同一客户路径。

## 归因订阅注册 [#归因订阅注册]

结账创建订阅时，请同时在结账会话和后续订阅上设置 Talivia 会话。

```javascript title="订阅元数据"
const metadata = { talivia_session_id: sessionId };

await stripe.checkout.sessions.create({
  mode: 'subscription',
  line_items: [{ price: 'price_monthly', quantity: 1 }],
  success_url: 'https://your-site.com/thanks?session_id={CHECKOUT_SESSION_ID}',
  metadata,
  subscription_data: { metadata },
});
```

Stripe 会在结账事件上提供结账元数据，在订阅事件上提供订阅元数据。订阅生成的账单会把元数据放在账单的订阅详情下。Talivia 同时读取当前的 `parent.subscription_details.metadata` 结构和较早的 `subscription_details.metadata` 结构。

## 关联客户身份 [#关联客户身份]

客户登录、注册或进入已验证产品时调用 `identify`。

```javascript title="将 Talivia 访客关联到 Stripe"
window.talivia.identify('user_123', {
  email: currentUser.email,
  stripeCustomerId: currentUser.stripeCustomerId,
});
```

续费没有新的浏览器结账会话时，Talivia 仍可通过 Stripe 客户完成归因。

## Talivia 维护的事件 [#talivia-维护的事件]

托管 Stripe 网络回调会接收：

* 成功和失败的账单付款；
* 订阅创建、更新、取消、暂停、恢复、试用和待处理更新；
* 成功退款和退款更新；
* 争议创建、更新、结束和资金变动。

首次结账和账单事件可能以任意顺序到达。结账会话未提供付款意图时，Talivia 会先通过账单编号进行精确核对，再把付款意图、结账会话、客户、金额和事件时间作为备用证据。匹配成功后会更新已有付款，而不会重复计算注册收入。
