# Stripe 支付集成配置指南

本文档详细说明如何为 Prmbr 项目配置 Stripe 支付系统，实现订阅管理功能。

## 1. Stripe 账户设置

### 1.1 创建 Stripe 账户
1. 访问 [Stripe Dashboard](https://dashboard.stripe.com/)
2. 注册或登录 Stripe 账户
3. 完成账户验证（可能需要提供业务信息）

### 1.2 获取 API 密钥
在 Stripe Dashboard 中：
1. 进入 **Developers** → **API keys**
2. 复制以下密钥：
   - **Publishable key** (以 `pk_` 开头)
   - **Secret key** (以 `sk_` 开头)

## 2. 创建产品和价格

### 2.1 创建 Pro 订阅产品
1. 在 Stripe Dashboard 中，进入 **Products**
2. 点击 **Add product**
3. 填写产品信息：
   - **Name**: `Prmbr Pro Plan`
   - **Description**: `Professional plan with advanced features`
4. 添加价格：
   - **Price**: `$19.90`
   - **Billing period**: `Monthly`
   - **Currency**: `USD`
5. 保存产品并复制 **Price ID** (以 `price_` 开头)

### 2.2 配置产品元数据（可选）
为产品添加元数据以便识别：
- `plan_type`: `pro`
- `features`: `5000_prompts,10_versions,priority_support`

## 3. 环境变量配置

在项目根目录的 `.env.local` 文件中添加以下环境变量：

```bash
# Stripe 配置
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_your_publishable_key_here"
STRIPE_SECRET_KEY="sk_test_your_secret_key_here"
NEXT_PUBLIC_APP_URL="http://localhost:3000"

# Webhook 密钥（稍后配置）
STRIPE_WEBHOOK_SECRET="whsec_your_webhook_secret_here"
```

**注意**: 不再需要 `NEXT_PUBLIC_STRIPE_PRO_PRICE_ID` 环境变量，价格 ID 现在从数据库动态获取。

### 3.1 配置 Pro 套餐价格 ID

创建 Stripe 价格后，需要在数据库中更新 Pro 套餐的 `stripePriceId` 字段：

```sql
-- 在数据库中更新 Pro 套餐的 Stripe 价格 ID
UPDATE subscription_plans
SET "stripePriceId" = 'price_your_actual_pro_price_id_here'
WHERE name = 'pro';
```

或者使用管理员 API 更新：

```bash
curl -X PUT http://localhost:3000/api/admin/subscription-plans \
  -H "Content-Type: application/json" \
  -d '{
    "id": "pro",
    "stripePriceId": "price_your_actual_pro_price_id_here"
  }'
```

## 4. Webhook 配置

### 4.1 创建 Webhook 端点
1. 在 Stripe Dashboard 中，进入 **Developers** → **Webhooks**
2. 点击 **Add endpoint**
3. 设置端点 URL：
   - **开发环境**: `http://localhost:3000/api/webhooks/stripe`
   - **生产环境**: `https://yourdomain.com/api/webhooks/stripe`

### 4.2 选择监听事件
添加以下事件类型：
- `customer.subscription.created`
- `customer.subscription.updated`
- `customer.subscription.deleted`
- `invoice.payment_succeeded`
- `invoice.payment_failed`

### 4.3 获取 Webhook 签名密钥
1. 创建 webhook 后，点击进入详情页面
2. 在 **Signing secret** 部分，点击 **Reveal** 复制密钥
3. 将密钥添加到环境变量 `STRIPE_WEBHOOK_SECRET`

## 5. 客户门户配置

### 5.1 启用客户门户
1. 在 Stripe Dashboard 中，进入 **Settings** → **Billing** → **Customer portal**
2. 点击 **Activate** 启用客户门户
3. 配置门户设置：
   - **Business information**: 填写公司信息
   - **Customer information**: 允许客户更新邮箱和地址
   - **Subscriptions**: 允许客户取消订阅
   - **Payment methods**: 允许客户更新付款方式

### 5.2 自定义门户外观
1. 在 **Branding** 部分上传 Logo
2. 设置主题颜色以匹配您的品牌
3. 配置返回 URL: `https://yourdomain.com/subscription`

## 6. 测试配置

### 6.1 使用测试卡号
Stripe 提供测试卡号用于开发：
- **成功支付**: `4242 4242 4242 4242`
- **需要验证**: `4000 0025 0000 3155`
- **被拒绝**: `4000 0000 0000 0002`

### 6.2 测试订阅流程
1. 启动开发服务器: `npm run dev`
2. 访问价格页面: `http://localhost:3000/pricing`
3. 点击 "Upgrade to Pro" 按钮
4. 使用测试卡号完成支付
5. 验证用户订阅状态是否正确更新

## 7. 生产环境部署

### 7.1 切换到生产密钥
1. 在 Stripe Dashboard 右上角关闭 **Test mode**
2. 获取生产环境的 API 密钥
3. 更新环境变量为生产密钥

### 7.2 更新 Webhook URL
1. 创建新的生产环境 webhook 端点
2. 使用生产域名: `https://yourdomain.com/api/webhooks/stripe`
3. 更新 `STRIPE_WEBHOOK_SECRET` 为生产密钥

### 7.3 验证配置
- 确保所有环境变量正确设置
- 测试完整的订阅和取消流程
- 验证 webhook 事件正常接收和处理

## 8. 常见问题

### 8.1 Webhook 验证失败
- 检查 `STRIPE_WEBHOOK_SECRET` 是否正确
- 确保 webhook URL 可以从外网访问
- 验证请求头中的签名

### 8.2 订阅状态不同步
- 检查 webhook 事件是否正常接收
- 查看服务器日志中的错误信息
- 确保数据库连接正常

### 8.3 支付失败
- 检查 Stripe 密钥是否正确
- 验证产品和价格 ID 是否匹配
- 确保客户信息完整

## 9. 安全注意事项

1. **密钥安全**：
   - 永远不要在客户端代码中暴露 Secret Key
   - 使用环境变量存储敏感信息
   - 定期轮换 API 密钥

2. **Webhook 安全**：
   - 始终验证 webhook 签名
   - 使用 HTTPS 端点
   - 实现幂等性处理

3. **数据保护**：
   - 不要存储完整的信用卡信息
   - 遵循 PCI DSS 合规要求
   - 定期备份订阅数据

## 10. 监控和日志

### 10.1 Stripe Dashboard 监控
- 定期检查支付状态
- 监控失败的支付和订阅
- 查看客户活动日志

### 10.2 应用程序日志
- 记录所有 Stripe API 调用
- 监控 webhook 处理状态
- 设置错误告警

---

配置完成后，您的应用程序将具备完整的订阅管理功能，包括：
- 用户订阅 Pro 计划
- 自动处理订阅状态变更
- 客户自助管理订阅
- 安全的支付处理
