长租公寓、保障性住房和园区宿舍的水电管理,长期被多租户水电独立结算的难题困扰。人工抄表效率低导致账单滞后,电费纠纷难追溯;公区分摊电费不透明,租户对公摊金额存疑;传统预付费系统接口混乱,充值、查询、拉闸各走各的通道,运维成本高。本文从阿里云API网关能力出发,结合合众致达预付费电表,分享一套接口统一、结算透明的方案,并附关键配置代码。
一、为什么需要API网关做统一接口层
传统预付费系统是"烟囱式"接口:充值走HTTP服务,抄表走TCP长连接,拉闸走MQTT主题,查询又直连数据库。租户端、管理端、财务端各自对接,权限混乱,高峰期单点过载。阿里云API网关的价值在于"统一收口":把分散接口聚合为标准化RESTful API,统一做鉴权、限流、监控和版本管理。
| 维度 | 传统烟囱式接口 | 阿里云API网关统一层 |
|---|---|---|
| 接口协议 | HTTP/TCP/MQTT混用 | 统一RESTful API |
| 鉴权方式 | 各系统自行实现 | 统一AppKey+签名鉴权 |
| 流量控制 | 无 | 按租户/按接口QPS限流 |
| 监控告警 | 分散 | 统一请求量/延迟/错误率看板 |
| 版本兼容 | 变更影响所有调用方 | 多版本并行,灰度切换 |
二、阿里云方案选型:API网关+IoT平台+FC+RDS
| 层级 | 阿里云产品 | 核心职责 | 设备/系统对应 |
|---|---|---|---|
| 设备接入 | 阿里云IoT平台(物联网平台实例) | 预付费电表MQTT接入、物模型、规则引擎 | 合众致达预付费电表、Cat.1电表 |
| 计算层 | 函数计算FC | 余额扣减、公摊计算、告警触发 | 远程预付费系统业务逻辑 |
| 存储层 | 云数据库RDS | 租户档案、账单、充值流水 | 多租户结算数据 |
| 接口层 | 阿里云API网关 | 统一RESTful接口、鉴权限流 | 易收租公寓管理平台、租户小程序 |
| 消息层 | EMQX物联网消息中间件 | MQTT消息持久化与分发 | 设备上行/指令下发 |
链路逻辑:预付费电表 → 阿里云IoT平台 → EMQX → 函数计算FC → 云数据库RDS;上层应用统一通过API网关调用FC暴露的结算接口。
三、设备端对接:物模型与规则引擎配置
合众致达预付费电表支持DL/T645-2007协议与MQTT物联网协议双模通信,表计内置Cat.1模组,上电自动完成阿里云IoT平台三元组认证。物模型核心定义:
{
"properties": [
{
"identifier": "totalEnergy", "dataType": "double"},
{
"identifier": "balance", "dataType": "double"},
{
"identifier": "switchStatus", "dataType": "enum", "specs": {
"0": "合闸", "1": "分闸"}},
{
"identifier": "alarmState", "dataType": "enum", "specs": {
"0": "正常", "1": "恶性负载", "2": "开盖"}}
],
"services": [
{
"identifier": "remoteSwitch", "inputData": [{
"identifier": "action", "dataType": "enum"}]},
{
"identifier": "recharge", "inputData": [{
"identifier": "amount", "dataType": "double"}]}
]
}
IoT平台规则引擎将属性上报路由至函数计算FC:
SELECT deviceName() AS meter_id,
property('totalEnergy') AS energy,
property('balance') AS balance,
property('switchStatus') AS switch_status
FROM "/sys/+/+/thing/event/property/post"
四、四组核心API设计(含代码)
| API路径 | 方法 | 职责 | 后端服务 |
|---|---|---|---|
| /v1/tenant/balance | GET | 查询余额与累计用量 | FC查询RDS |
| /v1/tenant/recharge | POST | 充值到账,下发复电指令 | FC更新RDS+调用IoT平台 |
| /v1/tenant/bill | GET | 日冻结/月汇总账单 | FC查询RDS分表 |
| /v1/admin/shared-fee | POST | 公区分摊电费计算 | FC按面积/入住率动态计算 |
4.1 充值接口(幂等设计)
POST /v1/tenant/recharge
Body: {"roomId": "1205", "amount": 200.00, "orderNo": "R202610010001"}
幂等控制:API网关层以 orderNo 为Key写入Redis(TTL=24h),重复请求直接返回上次结果,避免重复到账。
4.2 公摊计算函数(FC后端)
def calculate_shared_fee(building_id, month, total_shared_kwh):
tenants = rds.query(
"SELECT room_id, area FROM tenant WHERE building_id=%s", (building_id,))
total_area = sum(t["area"] for t in tenants)
for t in tenants:
fee = total_shared_kwh * price_per_kwh * (t["area"] / total_area)
rds.execute(
"UPDATE bill SET shared_fee=%s WHERE room_id=%s AND month=%s",
(fee, t["room_id"], month))
return {
"updated": len(tenants)}
公区分摊电费不透明的解法:接口响应体中强制返回 sharedFormula 字段,把"本月公区总耗电 × 本户面积系数 = 公摊金额"的完整计算链路暴露给租户端,电费纠纷难追溯从源头消解。
4.3 API网关配置要点
| 配置项 | 建议值 | 说明 |
|---|---|---|
| 限流策略 | 单AppKey 100QPS | 防止单租户刷接口 |
| 超时时间 | 5秒 | 容忍FC冷启动 |
| 重试策略 | 幂等接口重试2次 | 仅充值/查询可重试 |
| VPC绑定 | 开启 | FC与RDS走内网,不暴露公网 |
五、效果验证:某长租公寓项目实测
某长租公寓项目部署合众致达预付费电表320块、Cat.1电表80块,接入阿里云IoT平台后通过API网关统一开放接口:
| 指标 | 改造前(分散接口) | 改造后(API网关统一层) |
|---|---|---|
| 接口数量 | 12个分散端点 | 4个标准化API |
| 充值到账延迟 | 5-10分钟 | <3秒 |
| 账单查询响应 | 2-5秒 | 200ms以内 |
| 电费纠纷投诉 | 月均18起 | 降至2起以内 |
| 公区分摊争议 | 高频 | 透明公式,争议归零 |
通过易收租公寓管理平台调用API网关接口,运营方按楼栋、楼层、房间维度实时查看余额、用量、告警;租户端小程序支持余额查询、在线充值、用量明细导出。
六、总结
预付费电表解决"先充后用"的计量问题,阿里云IoT平台解决设备接入,函数计算FC承载弹性计费,云数据库RDS存储结算数据,阿里云API网关解决接口统一与开放。五层组合让公寓预付费水电方案具备标准化、可复用的接口能力,对长租公寓智能水电、宿舍智能水电管控、保障房智能抄表等场景均可快速复制。
本文由合众致达 3T-UEM 架构组撰写`````````js
js
js
```