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
120 lines
4.1 KiB
Markdown
120 lines
4.1 KiB
Markdown
# 通道模板模型设计
|
|
|
|
## 1. 设计结论
|
|
|
|
通道配置分成三层:
|
|
|
|
```text
|
|
temp_model 接入方式大类
|
|
temp_key 具体上游协议模板
|
|
chan_config 具体通道的账号凭证和运行时状态
|
|
```
|
|
|
|
`temp_model` 只使用两个值:
|
|
|
|
```text
|
|
direct 直接调用上游 API
|
|
shared_token 先获取共享 Token,再调用业务 API
|
|
```
|
|
|
|
`direct` 是分类值,不是通用实现。普通模板必须通过 `temp_key` 找到精确注册的协议实现;不能仅凭 `direct` 推断运营商或请求协议。
|
|
`shared_token` 是共享 Token 模型的路由值,可以由共享实现工厂创建具体通道。
|
|
|
|
## 2. Mermaid 架构图
|
|
|
|
```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. 模板示例
|
|
|
|
```text
|
|
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. 新增三方协议流程
|
|
|
|
1. 实现三方协议的请求、签名、响应映射、错误处理和业务能力。
|
|
2. 增加新的 `temp_key` 并注册精确实现。
|
|
3. 为模板设置 `temp_model=direct`;如果需要共享 Token,则设置 `temp_model=shared_token`。
|
|
4. 在模板数据中保存公共配置,通道数据中保存账号凭证。
|
|
5. 业务人员创建通道时选择已有 `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 直接执行。
|