SaaS 部署与计费(EE)
EE 集群版支持 SaaS 化运营:套餐订阅、租户自助开通、Stripe / 微信支付双通道计费(S-4)。
套餐模型
| 套餐 | 设备数 | 消息量/月 | 功能 |
|---|---|---|---|
| Free | 50 | 10 万 | CE 全功能 |
| Pro | 5,000 | 5,000 万 | + 规则引擎 / 告警多通道 |
| Enterprise | 不限 | 不限 | + 视频监控 / OTA / 专属支持 |
- 套餐定义存于主库
ms_plan,订阅关系存ms_subscription,订单存ms_order。 - 租户超配额时接入层自动限流并提示升级。
支付通道配置
application.yml:
yaml
ms:
pay:
stripe:
enabled: true
api-key: "" # sk_test_xxx / sk_live_xxx,走环境变量注入
webhook-secret: "whsec_xxx"
currency: cny
success-url: "https://www.zbidc.com/billing/result?status=success"
cancel-url: "https://www.zbidc.com/billing/result?status=cancel"
wechat:
enabled: true
appid: ""
mchid: ""
api-v3-key: "" # 32 字节 APIv3 密钥(回调 AES-GCM 解密)
merchant-serial: ""
private-key: "" # 商户私钥(签名)
notify-url: "https://api.zbidc.com/api/billing/webhook/wechat"
platform-cert-path: "" # 生产必填(回调验签);空=跳过验签仅开发生产环境密钥必须走环境变量或密钥管理系统注入,禁止入库或提交到代码仓库。
下单与回调流程
租户选套餐 → POST /api/billing/order/create(返回 Checkout 会话/支付参数)
→ 用户完成支付 → Stripe/微信 异步回调 webhook
→ 验签 + 校验金额 → 订单置为已支付 → 自动开通/续期订阅 → 租户配额生效http
POST /api/billing/order/create # 创建订单(planId + channel)
GET /api/billing/order/{orderNo} # 查询订单状态
POST /api/billing/webhook/stripe # Stripe 回调(验签 stripe-signature)
POST /api/billing/webhook/wechat # 微信支付回调(AES-GCM 解密 + 平台证书验签)
GET /api/billing/subscription/current # 当前租户订阅信息幂等与对账
- 回调按
orderNo幂等处理,重复通知直接返回成功,不重复开通。 - 每日定时任务拉取 Stripe Balance Transactions 与微信账单,与本地订单对账,差异写入告警。
部署拓扑(EE)
用户 → Cloudflare CDN → 前端(Nginx)
→ API 网关 → backend × N(无状态,可水平扩)
→ MySQL(主从)/ Redis / EMQX 集群 / TDengine 集群后端无状态,会话存 Redis;EMQX 集群共享订阅;TDengine 多副本保证时序数据高可用。