订阅制服务的用量计量和三通道支付
505 字
3 分钟
订阅制服务的用量计量和三通道支付
订阅服务看起来是「按月扣一次钱」,真正难的是用量和通道两件事叠在一起:用户用了多少要能说清楚,钱从三条完全不同的通道进来还要对得上同一笔订单。
这套系统跑在 GCP 上,Laravel + Docker。业务形态不在这里展开,只写计费层怎么拆。
用量为什么容易错
原实现把「发生了一次使用」和「账上该记一笔」写在同一条请求路径里。于是会出现:
- 重试一次,用量加两次
- 通道回调晚到,账期已经切到下个月
- 统计用的是缓存里的近似值,对账用的是数据库,两套数永远差一截
我把它拆开:
- 事件:系统里真实发生的使用,只追加,不改历史
- 计量:按账期把事件聚合成用量,可重算
- 账单:计量结果生成应付,和支付通道无关
- 支付:账单去找通道,通道只认识金额和单号
用量对不上时,重算计量即可,不必去改支付流水。支付对不上时,查通道,不必去改事件表。这是从 Jeepay 那条通道经验里带过来的同一条原则:账本和通道不要写在一个 if 里。
三条通道
支付宝、PayPal、USDT 的对账语言不一样:一个是商户订单号,一个是 Capture,一个是链上确认。对上层账单只暴露「待支付 / 已支付 / 失败 / 关闭」。
USDT 尤其不能只信一次通知。链上确认数、重复支付、少付,都要当成一等公民,而不是「先入账再人工改」。
部署
Docker Compose 分环境。计量任务和 Web 进程分开跑,避免请求高峰把账期聚合挤掉。密钥和回调地址按环境隔离,文章里不列。
业务名、域名、节点和商户号不在公开材料里出现。这篇只说明计费为什么要分层。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
订阅制服务的用量计量和三通道支付
https://dr.free--china.com/posts/subscription-billing-system/相关文章智能推荐
1
给 Jeepay 加一条东南亚支付通道
项目Jeepay 是国内比较成熟的开源聚合支付系统,但它内置的通道全是国内的。这篇记录我怎么在不动核心的前提下,给它接一条 ABA Pay。
2
人人麻将:从规则状态机到 Android 包的四川血战麻将
项目一个四人实时对战的川麻项目。服务端用 Node.js + Socket.IO 把规则做成纯状态机,客户端用 Cocos Creator 出 H5 和 Android 包,现在跑在自己的 VPS 上。
3
保密产线的网络怎么隔离:分区、准入、访客和审计
企业信息化面向苹果供应链客户的保密产线安保。只写可公开的方法:办公网与产线网怎么分开、终端怎么准入、访客怎么隔离、审计看什么。不写客户工艺、产品线和现场细节。
4
企业 AD 从 0 到 1:域控、终端、证书、无线和 SSO
企业信息化在一家从没有域的制造企业里,把 Active Directory、DNS、证书、SCCM、RADIUS 和 Entra ID 一次铺起来。这篇写边界怎么划、坑在哪,不写客户内网细节。
5
把 Agent 用在信息化交付里:方案、交底和预算
企业信息化在镭射沃期间把 GLM、Gemini、Grok、Claude、GPT 用进日常:写建设方案、整理技术文档、做工程预算,以及跟集成商做功能梳理和技术交底。
随机文章随机推荐


