🔍 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:切换到旧方式(推荐)
✓ 优点:
• 无需修改代码
• 立即可用
• 更成熟稳定
• 我们的代码已完全支持
详细步骤:
- 创建新的价格:
- 打开产品 "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
- 更新测试订阅:
- 打开客户 1234@gmail.com 的订阅
- 点击「Update subscription」
- 替换为新创建的价格
- 保存
- 验证配置:
- 订阅应该包含两个项目:
- 1. 固定订阅费用(HK$58/月)
- 2. 按量计费项目(Metered usage)
- 重新测试:
- 设置 credits = -50
- 取消订阅
- 查看日志和发票
开始配置
🔧 解决方案 B:更新代码支持新的 Billing Meters
⚠️ 注意:
这需要修改代码,并且新的 Billing Meters API 还在 Beta 阶段,
强烈建议先尝试方案 A。
如果你坚持使用新的 Billing Meters,需要:
- 修改
handleInvoiceCreated 函数
- 替换
subscriptionItems.createUsageRecord()
- 改用
billing.meterEvents.create()
- 更新所有相关逻辑
告诉我如果你需要这个方案,我可以帮你实现。
📋 诊断检查清单
- 打开 Stripe Dashboard - Products
- 找到 VaultCaddy Monthly 产品
- 检查价格配置类型
- 确认是否使用了 "Billing Meters"
- 如果是,按照方案 A 创建新价格
- 更新测试订阅到新价格
- 设置 Firestore credits = -50
- 重新测试取消订阅
- 查看 Firebase 日志
- 验证 Stripe 发票包含超额费用
🎯 快速诊断
检查你的 Firestore 数据(图2):
subscription:
meteredSubscriptionItemId: "si_TcYeJnOgjEw9lM" ← 如果有这个,说明使用旧方式
stripeSubscriptionId: "sub_1SfJXEJmiQ31C0GT..."
如果你有 meteredSubscriptionItemId,那么应该使用旧方式!
✓ 好消息: 从图2看到你有
meteredSubscriptionItemId,
说明你的订阅配置是正确的(旧方式)!
问题可能是:
- Webhook 时序问题(已修复)
- 日志中缺少关键检测步骤
- 需要重新测试验证修复
查看 Firestore 数据
查看最新日志
🔥 下一步建议
- 立即重新测试:
- 如果还是不行:
- 截图给我看 Stripe 产品配置
- 截图给我看最新的 Firebase 日志
- 我会帮你进一步诊断