🔍 Stripe 计费配置诊断

🚨 发现关键问题!
你的 Stripe 配置可能使用了新的 Billing Meters API
但我们的代码使用的是旧的 Usage Records API
两者不兼容,这就是超额费用没有被收取的原因。

📊 Stripe 的两种计量计费方式

❌ 新方式:Billing Meters(你可能在用)

# 图5中的代码 POST /v1/billing/meter_events event_name: vaultcaddy_credit_usage payload[value]: 1
问题: 我们的代码不支持这个!

✅ 旧方式:Usage Records(我们支持)

# 我们的代码使用 POST /v1/subscription_items/{id}/usage_records quantity: 150 action: set
兼容: 代码已完全支持!

🔍 如何检查你的配置

步骤 1:打开你的产品页面

打开 Stripe 产品

步骤 2:找到 "VaultCaddy Monthly" 产品

步骤 3:查看价格配置,对照下表:

配置项 ❌ 新方式(不兼容) ✅ 旧方式(兼容)
计费模型 Usage-based with meters Usage-based / Standard pricing
Meter ✓ 显示 Meter name ✗ 不显示 Meter
Event name vaultcaddy_credit_usage ✗ 没有这个字段
Aggregation 通过 Meter 配置 Sum of usage values
Pricing tiers 在 Meter 中配置 在 Price 中配置

✅ 解决方案 A:切换到旧方式(推荐)

✓ 优点:
• 无需修改代码
• 立即可用
• 更成熟稳定
• 我们的代码已完全支持

详细步骤:

  1. 创建新的价格:
    • 打开产品 "VaultCaddy Monthly"
    • 点击「Add another price」
    • 选择配置:
    产品:VaultCaddy Monthly 价格模型:Recurring 计费周期:Monthly 基础价格:HK$58.00 ☑️ 启用用量计费(Usage is metered) Aggregation:Sum of usage values Pricing model:Graduated pricing 定价层级: • 第 1 层:0 - 100 单位 = HK$0.00 • 第 2 层:101 - 500 单位 = HK$0.50 per unit • 第 3 层:501 - 1000 单位 = HK$0.45 per unit • 第 4 层:1001+ 单位 = HK$0.40 per unit
  2. 更新测试订阅:
    • 打开客户 1234@gmail.com 的订阅
    • 点击「Update subscription」
    • 替换为新创建的价格
    • 保存
  3. 验证配置:
    • 订阅应该包含两个项目:
      • 1. 固定订阅费用(HK$58/月)
      • 2. 按量计费项目(Metered usage)
  4. 重新测试:
    • 设置 credits = -50
    • 取消订阅
    • 查看日志和发票
开始配置

🔧 解决方案 B:更新代码支持新的 Billing Meters

⚠️ 注意:
这需要修改代码,并且新的 Billing Meters API 还在 Beta 阶段,
强烈建议先尝试方案 A

如果你坚持使用新的 Billing Meters,需要:

  1. 修改 handleInvoiceCreated 函数
  2. 替换 subscriptionItems.createUsageRecord()
  3. 改用 billing.meterEvents.create()
  4. 更新所有相关逻辑

告诉我如果你需要这个方案,我可以帮你实现。

📋 诊断检查清单

🎯 快速诊断

检查你的 Firestore 数据(图2):

subscription: meteredSubscriptionItemId: "si_TcYeJnOgjEw9lM" ← 如果有这个,说明使用旧方式 stripeSubscriptionId: "sub_1SfJXEJmiQ31C0GT..."

如果你有 meteredSubscriptionItemId,那么应该使用旧方式!

✓ 好消息: 从图2看到你有 meteredSubscriptionItemId
说明你的订阅配置是正确的(旧方式)!

问题可能是:
  • Webhook 时序问题(已修复)
  • 日志中缺少关键检测步骤
  • 需要重新测试验证修复
查看 Firestore 数据 查看最新日志

🔥 下一步建议

  1. 立即重新测试:
    • 代码已修复(使用 totalCreditsUsed)
    • 设置 credits = -50, totalCreditsUsed = 150
    • 取消订阅
    • 查看日志是否显示:
      ✅ 从 totalCreditsUsed 检测到超额: 50 Credits ✅ 成功报告总使用量给 Stripe: 150 💵 预期收费: HK$25.00
  2. 如果还是不行:
    • 截图给我看 Stripe 产品配置
    • 截图给我看最新的 Firebase 日志
    • 我会帮你进一步诊断