订阅制服务的用量计量和三通道支付

505 字
3 分钟
订阅制服务的用量计量和三通道支付

订阅服务看起来是「按月扣一次钱」,真正难的是用量和通道两件事叠在一起:用户用了多少要能说清楚,钱从三条完全不同的通道进来还要对得上同一笔订单。

这套系统跑在 GCP 上,Laravel + Docker。业务形态不在这里展开,只写计费层怎么拆。

用量为什么容易错#

原实现把「发生了一次使用」和「账上该记一笔」写在同一条请求路径里。于是会出现:

  • 重试一次,用量加两次
  • 通道回调晚到,账期已经切到下个月
  • 统计用的是缓存里的近似值,对账用的是数据库,两套数永远差一截

我把它拆开:

  1. 事件:系统里真实发生的使用,只追加,不改历史
  2. 计量:按账期把事件聚合成用量,可重算
  3. 账单:计量结果生成应付,和支付通道无关
  4. 支付:账单去找通道,通道只认识金额和单号

用量对不上时,重算计量即可,不必去改支付流水。支付对不上时,查通道,不必去改事件表。这是从 Jeepay 那条通道经验里带过来的同一条原则:账本和通道不要写在一个 if 里。

三条通道#

支付宝、PayPal、USDT 的对账语言不一样:一个是商户订单号,一个是 Capture,一个是链上确认。对上层账单只暴露「待支付 / 已支付 / 失败 / 关闭」。

USDT 尤其不能只信一次通知。链上确认数、重复支付、少付,都要当成一等公民,而不是「先入账再人工改」。

部署#

Docker Compose 分环境。计量任务和 Web 进程分开跑,避免请求高峰把账期聚合挤掉。密钥和回调地址按环境隔离,文章里不列。

业务名、域名、节点和商户号不在公开材料里出现。这篇只说明计费为什么要分层。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

订阅制服务的用量计量和三通道支付
https://dr.cctv15.net/posts/subscription-billing-system/
作者
董锐
发布于
2026-08-15
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
给 Jeepay 加一条东南亚支付通道
个人上线的系统Jeepay 是国内比较成熟的开源聚合支付系统,但它内置的通道全是国内的。这篇记录我怎么在不动核心的前提下,给它接一条 ABA Pay。
2
云资源自助交付平台:把「申请一台机器」做成不用找人的事
个人上线的系统对接 GCP / AWS API 做计算实例的自动开通、回收与生命周期管理,用户在自助控制台就能开关机、重装、重置凭据。做这套的动机来自运维本职——重复劳动应该被消灭。
3
GB/T 28181 视频前置接入:让摄像头进得来,又碰不到内网
企业信息化外部摄像头和执法头盔要把视频送进内网平台,但它们一步都不能踏进业务网段。DMZ 前置机 + 媒体强制中继 + 逐条防火墙工单,这是完整的落地方案。
4
海外园区宿舍管理系统:给上万人混住的园区做一套住得下、查得清的平台
个人上线的系统印尼工业园区 8 栋楼、近 3,000 床位、上万名中方与印尼籍员工混住。市面上的开源宿舍系统没有一个能用,因为约束根本不同。这是我从建模到上线做完的一套。
5
用 Rust 写一套直播平台:推流、鉴权、回放,也能当在线教育用
个人上线的系统面向个人、私域和小团队的自建直播平台。RTMP 推流、HLS/FLV 拉流、房间权限、录制回放、实时弹幕——把这几样凑齐,它就不只是直播,也是一套能用的在线教育平台。
随机文章随机推荐
Profile Image of the Author
董锐
网络 / 系统工程师。身份底座、跨境网络、信息化交付。
公告
这是项目履历站,配合简历看。中英文 PDF 在「关于我」页可下载。
分类
标签
站点统计
文章
16
分类
3
标签
76
总字数
20,278
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.6
文章许可
CC BY-NC-SA 4.0