# Creem Billing Verification Checklist

## 1. 环境变量

- `CREEM_API_KEY` 已填写
- `CREEM_WEBHOOK_SECRET` 已填写
- `CREEM_BUILDER_PRODUCT_ID` 已填写
- `CREEM_TEST_MODE` 与当前测试环境一致

## 2. Checkout / Portal

- `/pricing` 可以发起 Builder 订阅
- 已登录用户点击升级后会进入 Creem checkout
- 已有订阅且存在 customer id 的用户可以进入 portal

## 3. Webhook

- Creem webhook 指向 `/api/creem/webhook`
- 至少收到一次 `checkout.completed`
- 至少收到一次订阅生命周期事件
- 相同事件重复发送时不会重复处理

## 4. 数据库

- `subscriptions.billing_provider = creem`
- `subscriptions.provider_customer_id` 已写入
- `subscriptions.provider_subscription_id` 已写入
- `subscriptions.provider_product_id` 已写入
- `subscriptions.status` 与最近 webhook 事件一致

## 5. 权限验收

- Builder 用户能打开高级课程
- Explorer 用户访问高级课程会被拦截
- `/account` 页能显示最新订阅状态

## 6. 复盘

- 说明你使用了什么作为站内用户绑定键
- 说明 webhook 为什么是状态真相来源
- 说明如果要从 test mode 切到正式模式，你会检查哪些地方
