---
url: /docs/billing/checkout.md
---
# 结账与账单管理

## 升级流程

工作台通过 `useUpgradeSubscription()` 调用 `auth.subscription.upgrade()`，传入 `starter` 或 `pro`。有活动组织时传组织范围，否则使用当前个人账号；插件在服务端检查管理权限并创建结账会话。

成功与取消回跳目前返回发起页面。回到网站后要重新查询订阅状态，不能仅凭网址里出现成功参数授予付费能力，支付结果以已验证的事件同步为准。

## 账单管理

`useBillingPortal()` 调用 `auth.subscription.billingPortal()` 打开 Stripe 客户门户。需要在 Stripe 配置门户允许的套餐修改、取消和资料更新功能。

前端两个操作都检查 Better Auth 返回的 `error` 并转为错误状态。不能丢弃返回错误，否则按钮看似执行却没有任何跳转。

## 权限

个人订阅由本人管理。组织订阅由当前真实成员中的所有者或管理员管理，普通成员不能靠手动发请求绕过。`canManage` 用于界面展示，`authorizeReference` 是服务端执行边界。

## 测试步骤

1. 以个人账号在测试模式升级，核对金额与回跳。
2. 完成回调同步，再检查数据库与工作台套餐。
3. 取消结账，确认没有错误授予套餐。
4. 用组织所有者、管理员和普通成员分别操作。
5. 从门户取消或修改，等待事件同步并重新查询。
6. 测试网络失败和重复点击，确认不会重复创建业务权益。

本地页面可见与模拟账单查询只证明代码路径，外部测试流程仍需单独完成。
