96b1edff45
iotlcm-upstream-chan:运营商上游通道适配服务(统一 /sim/* 协议)。 - 内联原私有依赖:yunze-public → internal/pub/(10 包 18 文件), yunze-pb/pb → internal/pb/(9 文件);Consul 注册改用官方 gogf/gf/contrib/registry/consul/v2(API 兼容) - Go module:yz-svr → git.5iot.com/iotlcm-public/iotlcm-upstream-chan - 修复 mingqian 包测试:实现重构后 `adapter.operations` 字段已移除, 测试断言按当前实现语义重写(不改产品行为) - 凭据与内部标识脱敏:MySQL/Redis/Consul 凭据、私网与生产 IP、 内网域名、真实手机号、注释里的真实 token/transid - 移除内部资产:CI 触发器、生产通道种子 SQL、真实凭据测试资源文档 - Dockerfile 改用公共基础镜像,移除写死的 registry 凭据 - 补 Apache-2.0 LICENSE,重写 README,LF 行尾 + .gitattributes
4.1 KiB
4.1 KiB
通道模板模型设计
1. 设计结论
通道配置分成三层:
temp_model 接入方式大类
temp_key 具体上游协议模板
chan_config 具体通道的账号凭证和运行时状态
temp_model 只使用两个值:
direct 直接调用上游 API
shared_token 先获取共享 Token,再调用业务 API
direct 是分类值,不是通用实现。普通模板必须通过 temp_key 找到精确注册的协议实现;不能仅凭 direct 推断运营商或请求协议。
shared_token 是共享 Token 模型的路由值,可以由共享实现工厂创建具体通道。
2. Mermaid 架构图
flowchart TB
DB["模板数据"] --> TEMPLATE["通道模板"]
TEMPLATE --> KEY["temp_key\n具体协议模板"]
TEMPLATE --> MODEL["temp_model\n接入方式"]
MODEL --> DIRECT["direct\n直接调用上游 API"]
MODEL --> SHARED["shared_token\n先获取共享 Token"]
KEY --> TY["sim_recharge_sdtywl_v1\n腾宇直连"]
KEY --> YD["sim_yd_v5\n中国移动官方"]
KEY --> DX["sim_dx_v1\n中国电信官方"]
KEY --> TY_SHARED["sim_onelink_tengyu_v1\n腾宇获取 Token + OneLink"]
KEY --> XZ_SHARED["sim_onelink_xuzhou_mobile_v1\n徐州移动获取 Token + OneLink"]
TY --> DIRECT_IMPL["精确 temp_key 注册的 direct 实现"]
YD --> DIRECT_IMPL
DX --> DIRECT_IMPL
TY_SHARED --> SHARED_IMPL["shared_token 模型工厂\n复用 OneLink 业务能力"]
XZ_SHARED --> SHARED_IMPL
SHARED_IMPL --> PROVIDER["Token Provider"]
PROVIDER --> TOKEN["共享 Token"]
TOKEN --> ONELINK["OneLink 业务 API"]
CREATE["新建通道"] --> SELECT["选择已有 temp_key"]
SELECT --> CREDENTIALS["填写通道凭证"]
CREDENTIALS --> CHANNEL["t_sim_channels"]
RULES["规则"] --> R1["temp_model 只有 direct / shared_token"]
RULES --> R2["temp_key 决定具体协议"]
RULES --> R3["direct 必须有精确注册"]
RULES --> R4["shared_token 使用共享工厂"]
3. 模板示例
sim_yd_v5
temp_model = direct
中国移动官方 OneLink
sim_yd_mock_v5
temp_model = direct
中国移动 Mock OneLink
sim_dx_v1
temp_model = direct
中国电信 CMP
sim_recharge_sdtywl_v1
temp_model = direct
腾宇直连 API
sim_onelink_tengyu_v1
temp_model = shared_token
腾宇获取 Token + OneLink
sim_onelink_xuzhou_mobile_v1
temp_model = shared_token
徐州移动获取 Token + OneLink
4. 路由规则
运行时始终先按 temp_key 查找精确实现。精确注册优先于模型工厂,因此现有直连通道的协议行为不会因为模型分类改变。
当没有精确 temp_key 注册时:
temp_model=shared_token使用共享 Token 模型工厂。temp_model=direct返回明确错误,因为 direct 本身不描述具体协议。- 空值、未知值或旧的具体实现名称返回明确配置错误。
5. 新增三方协议流程
- 实现三方协议的请求、签名、响应映射、错误处理和业务能力。
- 增加新的
temp_key并注册精确实现。 - 为模板设置
temp_model=direct;如果需要共享 Token,则设置temp_model=shared_token。 - 在模板数据中保存公共配置,通道数据中保存账号凭证。
- 业务人员创建通道时选择已有
temp_key,只填写该通道自己的凭证。
6. 配置边界
模板配置适合保存公共 API 地址、固定路径、超时时间和其他非账号协议参数。 通道配置适合保存 appKey、appSecret、pwdKey、channelNo、appId、账号密码及该通道独立的 Token 状态。
配置不能试图描述完整协议;新增协议通常仍需要修改代码。
7. 迁移约束
- 新代码只接受
direct和shared_token两个模型值。 - 部署前通过 DBX 将现有普通模板修正为
direct,共享 Token 模板修正为shared_token。 - 旧的
onelink、onelink_mock、telecom、shared_token_onelink不作为新配置值保留。 - 发现无法根据
temp_key判断类型的模板时,停止自动迁移并人工确认。 - 本仓库不提交数据库修复 SQL;数据库变更由 DBX 直接执行。