订阅制服务的用量计量和三通道支付
505 字
3 分钟
订阅制服务的用量计量和三通道支付
订阅服务看起来是「按月扣一次钱」,真正难的是用量和通道两件事叠在一起:用户用了多少要能说清楚,钱从三条完全不同的通道进来还要对得上同一笔订单。
这套系统跑在 GCP 上,Laravel + Docker。业务形态不在这里展开,只写计费层怎么拆。
用量为什么容易错
原实现把「发生了一次使用」和「账上该记一笔」写在同一条请求路径里。于是会出现:
- 重试一次,用量加两次
- 通道回调晚到,账期已经切到下个月
- 统计用的是缓存里的近似值,对账用的是数据库,两套数永远差一截
我把它拆开:
- 事件:系统里真实发生的使用,只追加,不改历史
- 计量:按账期把事件聚合成用量,可重算
- 账单:计量结果生成应付,和支付通道无关
- 支付:账单去找通道,通道只认识金额和单号
用量对不上时,重算计量即可,不必去改支付流水。支付对不上时,查通道,不必去改事件表。这是从 Jeepay 那条通道经验里带过来的同一条原则:账本和通道不要写在一个 if 里。
三条通道
支付宝、PayPal、USDT 的对账语言不一样:一个是商户订单号,一个是 Capture,一个是链上确认。对上层账单只暴露「待支付 / 已支付 / 失败 / 关闭」。
USDT 尤其不能只信一次通知。链上确认数、重复支付、少付,都要当成一等公民,而不是「先入账再人工改」。
部署
Docker Compose 分环境。计量任务和 Web 进程分开跑,避免请求高峰把账期聚合挤掉。密钥和回调地址按环境隔离,文章里不列。
业务名、域名、节点和商户号不在公开材料里出现。这篇只说明计费为什么要分层。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
订阅制服务的用量计量和三通道支付
https://dr.cctv15.net/posts/subscription-billing-system/相关文章智能推荐
1
给 Jeepay 加一条东南亚支付通道
个人上线的系统Jeepay 是国内比较成熟的开源聚合支付系统,但它内置的通道全是国内的。这篇记录我怎么在不动核心的前提下,给它接一条 ABA Pay。
2
云资源自助交付平台:把「申请一台机器」做成不用找人的事
个人上线的系统对接 GCP / AWS API 做计算实例的自动开通、回收与生命周期管理,用户在自助控制台就能开关机、重装、重置凭据。做这套的动机来自运维本职——重复劳动应该被消灭。
3
GB/T 28181 视频前置接入:让摄像头进得来,又碰不到内网
企业信息化外部摄像头和执法头盔要把视频送进内网平台,但它们一步都不能踏进业务网段。DMZ 前置机 + 媒体强制中继 + 逐条防火墙工单,这是完整的落地方案。
4
海外园区宿舍管理系统:给上万人混住的园区做一套住得下、查得清的平台
个人上线的系统印尼工业园区 8 栋楼、近 3,000 床位、上万名中方与印尼籍员工混住。市面上的开源宿舍系统没有一个能用,因为约束根本不同。这是我从建模到上线做完的一套。
5
用 Rust 写一套直播平台:推流、鉴权、回放,也能当在线教育用
个人上线的系统面向个人、私域和小团队的自建直播平台。RTMP 推流、HLS/FLV 拉流、房间权限、录制回放、实时弹幕——把这几样凑齐,它就不只是直播,也是一套能用的在线教育平台。
随机文章随机推荐


