diff --git a/.gitignore b/.gitignore index 692dbb1..b4c392e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,4 @@ dist .playwright-mcp/ .kilo/ .playwright-cli/ -# 开源版附加排除 .apitest-output/ diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 9da9f9b..652f260 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -13,6 +13,7 @@ const webManualItems = [ { text: '企业、用户与角色', link: '/manual/web/enterprise-management' }, { text: '工单管理', link: '/manual/web/work-orders' }, { text: 'API 凭证与执行日志', link: '/manual/web/api-and-logs' }, + { text: '常见问题', link: '/manual/web/faq' }, ] const miniProgramManualItems = [ @@ -25,6 +26,7 @@ const miniProgramManualItems = [ { text: '工单服务', link: '/manual/mini-program/work-orders' }, { text: '批次执行日志', link: '/manual/mini-program/execution-logs' }, { text: '消息与个人中心', link: '/manual/mini-program/messages-and-profile' }, + { text: '常见问题', link: '/manual/mini-program/faq' }, ] function manualSidebar(_active: 'web' | 'mini' | 'both' = 'both') { diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css index 3887898..7c81db9 100644 --- a/.vitepress/theme/custom.css +++ b/.vitepress/theme/custom.css @@ -83,39 +83,7 @@ line-height: 1.4; } -/* 手册图片组共用图片行和图注行,图片高度不同时图注仍保持并排对齐。 */ -.vp-doc .manual-image-grid { - align-items: stretch !important; - row-gap: 6px !important; -} - -.vp-doc .manual-image-grid > figure { - display: grid; - grid-row: span 2; - grid-template-rows: subgrid; - min-width: 0; -} - -.vp-doc .manual-image-grid > figure > img { - align-self: start; - width: 100% !important; - max-width: 100% !important; - margin: 0 !important; -} - -.vp-doc .manual-image-grid > figure > figcaption { - align-self: start; - margin: 0; - text-align: center; - color: var(--vp-c-brand-1); - font-size: 16px; - font-weight: 600; - line-height: 1.4; -} - -/* 接口文档和 Web 端手册的表格铺满正文区域。 */ -.vp-doc[class*="_docs_openapi_"] table, -.vp-doc[class*="_docs_manual_web_"] table { +.vp-doc[class*="_docs_openapi_"] table { display: table; width: 100%; max-width: 100%; @@ -133,8 +101,7 @@ } @media (max-width: 767px) { - .vp-doc[class*="_docs_openapi_"] table, - .vp-doc[class*="_docs_manual_web_"] table { + .vp-doc[class*="_docs_openapi_"] table { display: block; overflow-x: auto; } diff --git a/docker-compose.yml b/docker-compose.yml index 335b99f..396c3f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: docs: - image: your-registry/iotlcm/iotlcm-docs:latest + image: iotlcm-docs:latest container_name: iotlcm-docs restart: unless-stopped networks: diff --git a/docker/nginx.conf b/docker/nginx.conf index 4185448..04e9641 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -5,19 +5,6 @@ server { root /usr/share/nginx/html; index index.html; - # 产物按 VitePress base=/docs/ 生成,HTML 里的资源引用形如 /docs/assets/xxx, - # 而 dist 目录是平铺的。因此必须在 /docs/ 路径下提供服务, - # 用 alias 把 /docs/ 前缀剥掉再落到产物目录,否则资源全部 404(白屏)。 - location /docs/ { - alias /usr/share/nginx/html/; - try_files $uri $uri.html $uri/ $uri/index.html =404; - } - - # 根路径跳到文档入口,避免访问 / 时白屏 - location = / { - return 302 /docs/; - } - location / { try_files $uri $uri.html $uri/ =404; } diff --git a/docs/manual/index.md b/docs/manual/index.md index 7145d00..ff0612a 100644 --- a/docs/manual/index.md +++ b/docs/manual/index.md @@ -17,7 +17,7 @@ features: - title: 版本选型指引 details: 使用浏览器登录企业管理后台,请阅读 Web 端手册;使用 IOTLCM 物联卡用户服务小程序,请阅读小程序端手册。不同端的功能入口、权限和页面结构有所区别。 - title: Web端 - details: 面向企业及平台管理人员,覆盖查卡、诊断、业务受理、套餐定价、流量池、预警、入出库、通道、企业权限、工单和执行日志。 + details: 面向企业管理员和业务人员,覆盖首页、卡信息、智能诊断、业务受理、企业管理、工单、API 凭证与执行日志。 - title: 小程序端 - details: 当前小程序版本为v1.0.2。无需登录可使用公开查卡和卡片排查;登录后可使用账号获授权的设备、办理和服务功能。 + details: 对应 iotlcm-app v1.0.1,覆盖首页公开查卡、扫码与拍照识别、卡片详情、卡片排查和账号密码登录;办理、绑定、微信登录及注册等功能暂未开放。 --- diff --git a/docs/manual/mini-program/devices.md b/docs/manual/mini-program/devices.md index 0b4d3bf..7ba107b 100644 --- a/docs/manual/mini-program/devices.md +++ b/docs/manual/mini-program/devices.md @@ -11,22 +11,23 @@ ![卡片详情中的基础信息和流量信息](/images/manual/mini-program/card-details-traffic.png) -卡号可能已经脱敏,已页面显示为准。点击或长按卡号行可以复制当前显示值。 +卡号可能已经脱敏,页面显示什么就以什么为准。点击或长按卡号行可以复制当前显示值。 公开模式不会展示完整 IMSI、IMEI、备注、总流量、剩余流量、会话信息、APN、IPv4、IPv6 和服务状态,也不会提供重启、开通数据、停用数据等操作按钮。 ## 登录后详情 -登录并通过权限校验后,设备列表和卡片详情可以展示更完整的账号范围数据,例如 MSISDN、ICCID、IMSI、设备 IMEI、套餐流量、剩余流量、流量同步时间和会话信息。详情中的流量区域还可能显示昨日客户用量及其统计日期。字段是否出现取决于接口返回值和账号权限。 +登录并通过权限校验后,设备列表和卡片详情可以展示更完整的账号范围数据,例如 MSISDN、ICCID、IMSI、设备 IMEI、套餐流量和同步时间。字段是否出现取决于接口返回值和账号权限。 -
+
- 登录后的设备列表和详情入口 -
设备列表与详情入口
+ 登录后的设备列表和账号范围数据
- 登录后的卡片基础信息和流量信息 -
卡片基础信息与流量信息
+ 全部设备中的账号范围数据 +
+
+ 登录后的卡片详情账号范围数据
@@ -36,9 +37,3 @@ - 确认查询号码没有空格或遗漏字符; - 从首页重新查询后再点击“详情”; - 若页面提示当前账号没有权限,请使用公开查询,或联系账号管理员确认数据范围。 - -## 卡片操作 - -公开查询详情不会提供业务操作。登录后,卡片详情可按权限显示重启、开通或停用数据服务、卡片划拨及工单入口;操作也会受卡片状态和账号工作区限制。排查页的已用流量信息可在支持时点击同步刷新。当前版本关闭停机、复机等“更多操作”入口,续费、套餐变更和加油包尚未开放。 - -![卡片详情中的快捷操作入口](/images/manual/mini-program/card-details-quick-actions.png) diff --git a/docs/manual/mini-program/diagnosis.md b/docs/manual/mini-program/diagnosis.md index 6380a54..6e385c1 100644 --- a/docs/manual/mini-program/diagnosis.md +++ b/docs/manual/mini-program/diagnosis.md @@ -9,24 +9,24 @@ 1. 首页点击“卡片排查”,手动输入卡号; 2. 首页查询成功后点击“卡片排查”,系统会带入当前查询值; -![首页查询结果中的卡片排查入口](/images/manual/mini-program/diagnosis-entry-from-query-v3.png) +![首页查询结果中的卡片排查入口](/images/manual/mini-program/diagnosis-entry-from-query-v2.png) 3. 直接打开卡片排查页,在输入框填写 `ICCID`、`MSISDN` 或 `IMSI`。 -
+
- 从首页常用入口进入卡片排查 + 从首页常用入口进入卡片排查
首页卡片排查入口
- 卡片排查页手动输入卡号 + 卡片排查页手动输入卡号
输入卡号开始排查
点击“开始排查”提交。排查过程中不要连续重复点击。 -## 结果摘要与卡片操作 +## 结果摘要 普通用户或未登录用户通常可以看到: @@ -36,15 +36,11 @@ 管理员账号可能看到更多卡片、数据服务、停机冻结和限制策略信息。页面会按实际接口返回值隐藏没有数据的字段。 -账号有对应权限且卡片可办理时,排查结果可提供“重启卡”“开通数据服务”或“停用数据服务”操作。按钮随账号权限、卡片状态和数据服务状态变化;提交前确认卡号和操作,完成后以页面提示及业务系统状态为准。卡片详情同样可显示重启、数据服务操作,以及有权限时的划拨入口。 - -当前版本停机、复机等卡片更多操作入口关闭;这不影响在办理页或卡片详情中使用已开放且获授权的卡片划拨。 - ## 流量使用分析 -当前页面提供“近1个月、近3个月、近6个月”三个周期。**当前版本只对顶层管理员显示流量趋势模块;其他账号即使登录也看不到该模块。** +当前页面提供“近1个月、近3个月、近6个月”三个周期。**`v1.0.1` 默认只对顶层管理员显示流量趋势模块;其他账号即使登录,也不保证看到该模块。** -有数据时会显示周期总用量、日均或月均用量、单期峰值和趋势图;没有数据时显示“暂无历史流量数据”。 +有数据时会显示周期总用量、日均或月均用量、单期峰值和趋势图;没有数据时显示“暂无历史流量数据”。趋势只用于辅助排查,不等同于实时计费结果。 ## 排查结果的处理方向 @@ -60,8 +56,6 @@ ## 当前版本限制 -排查页的“重启卡”“开通数据服务”“停用数据服务”按钮只有在登录且账号拥有对应权限时才会出现。工单、客户管理和卡片划拨已在当前版本按权限开放;续费、变更与加油包暂未开放,预警、订单及余额充值等功能仍受版本开关限制。 +排查页的“重启卡”“开通数据服务”“停用数据服务”按钮只有在登录且账号拥有对应权限时才会出现。业务办理路由、套餐、预警、订单和工单在 `v1.0.1` 中暂未开放。 排查接口或流量接口提示请求过于频繁时,请等待一段时间后再试,不要连续提交。 - -排查结果的已用流量信息在支持时可点击“重新同步流量”刷新。同步仍受上游服务频率限制;若提示限频,等待页面提示的时间后再试,不要连续点击。趋势图中未采集周期不会按 0MB 计算;暂无数据不代表用量为零。 diff --git a/docs/manual/mini-program/faq.md b/docs/manual/mini-program/faq.md new file mode 100644 index 0000000..931fc34 --- /dev/null +++ b/docs/manual/mini-program/faq.md @@ -0,0 +1,45 @@ +# 常见问题 + +## v1.0.1 有哪些可用功能? + +无需登录即可在首页手动输入、扫码或拍照识别卡号,并查看公开详情和卡片排查结果。已有账号可以使用账号密码登录,查看权限范围内的设备数据。 + +## 为什么底部没有“办理”Tab? + +`v1.0.1` 关闭了办理 Tab。套餐续费、加油包、套餐变更、停复机、预警、订单、工单和客户管理等路由也暂未开放,直接访问会提示当前版本暂未开放此功能。 + +## 为什么设备页看不到卡片? + +设备页读取登录账号的卡片范围。未登录时请回到首页使用公开查卡;登录后仍为空时,请确认账号已分配卡片或具备相应权限。 + +## 支持哪些查卡方式? + +首页支持输入 `ICCID`、`MSISDN`、`IMSI` 或 `IMEI`,也支持扫码读取内容和从相机或相册拍照识别 ICCID。 + +## 拍照识别失败怎么办? + +请拍摄单张、平整、完整、无反光的卡片,并确保 ICCID 清晰。识别超时或频繁请求时等待后重试;也可以改用扫码或手动输入。 + +## 公开详情为什么字段少? + +公开模式只展示卡号、卡状态、在线状态和已用流量。完整 IMSI、IMEI、会话、APN、IP、服务状态等字段属于受限数据。 + +## 为什么不能绑定卡片或执行重启? + +卡片绑定和“更多操作”在 `v1.0.1` 中统一关闭。即使登录,当前版本也不会提供绑定、套餐办理、停复机、数据服务变更和预警配置入口。 + +## 为什么看不到流量趋势? + +流量趋势模块当前只对顶层管理员开放,且接口必须返回有效历史数据。其他账号或没有历史数据时不会显示趋势图。 + +## 为什么排查显示离线或未查询到会话? + +先检查设备供电、开机状态、信号、天线和 APN,再稍后重新排查。“未查询到会话”只表示当前没有查到数据会话,不等同于卡片已销户。 + +## 账号密码登录有什么限制? + +当前版本只开放已有账号的账号密码登录;微信登录和注册账号未开放。忘记密码页面会提示短信服务接入后开放,请联系管理员或客服处理账号问题。 + +## 排查结果是否是最终结论? + +不是。排查结果仅用于辅助判断,最终以运营商和业务系统状态为准。请勿在查询、排查和反馈内容中提交身份证号、银行卡号或其他无关敏感信息。 diff --git a/docs/manual/mini-program/home.md b/docs/manual/mini-program/home.md index f8b4d6c..e204b5b 100644 --- a/docs/manual/mini-program/home.md +++ b/docs/manual/mini-program/home.md @@ -4,29 +4,29 @@ ## 登录入口 -首页和登录页都保留“未登录也可查卡”入口。需要查看账号名下设备时,可使用密码或手机号短信验证码登录。同一凭据关联多个身份时,按提示选择本次要进入的身份。 +首页和登录页都保留“未登录也可查卡”入口。需要查看账号名下设备时,再通过账号密码登录;微信登录和注册账号暂未开放。 ## 手动查询 1. 在“卡片查询”输入框输入完整的 `ICCID`、`MSISDN`、`IMSI` 或 `IMEI`。 2. 点击“查询”,等待查询完成。 -![点击查询并等待查询完成](/images/manual/mini-program/query-complete-v102.png) +![点击查询并等待查询完成](/images/manual/mini-program/query-complete.png) -3. 查询成功后,结果区域显示卡号、卡状态、已用流量和在线状态;卡号可以点击或长按复制。 -4. 点击结果中的“查看详情”查看公开卡片详情;点击查询框下方的“卡片排查”会带入卡号查看状态摘要。公开查询未找到卡片时,页面也可能直接转入排查页继续核对。 +3. 查询成功后,结果区域显示卡号、使用流量和在线状态。 +4. 点击“详情”查看公开卡片详情,或点击“卡片排查”查看状态摘要。 -
+
- 查询结果中的详情和卡片排查入口 + 查询结果中的详情和卡片排查入口
详情与卡片排查入口
- 卡片详情页展示的公开字段 + 卡片详情页展示的公开字段
卡片详情
- 卡片排查页展示的状态摘要 + 卡片排查页展示的状态摘要
卡片排查
@@ -48,7 +48,7 @@ 1. 点击“拍照”。 -![首页拍照入口](/images/manual/mini-program/photo-entry-v102.png) +![首页拍照入口](/images/manual/mini-program/photo-entry.png) 2. 从相机或相册选择一张卡片图片。 3. 确保图片中只有一张卡片,并且 ICCID 完整、清晰、无反光。 @@ -62,25 +62,6 @@ | 未能识别清晰的 ICCID | 保持卡片平整、对焦清楚后重拍 | | 图片识别超时或请求过于频繁 | 等待后重试,或使用扫码、手动输入 | -## 登录后的设备概览 - -登录后首页还会显示设备概览,最多预览三张卡,并优先展示即将到期的卡;有卡片数据时显示卡片总数。点击卡片查看详情,点击“管理”进入“全部设备”,可搜索 ICCID、MSISDN、IMSI 或 IMEI,按卡片状态筛选、刷新并加载更多。 - -
-
- 登录后首页展示最多三张卡片的设备概览与管理入口 -
首页设备概览
-
-
- 全部设备页面的卡片搜索、状态筛选和列表 -
全部设备
-
-
- -设备数据按当前账号权限范围返回。未登录时不显示账号设备概览;列表为空时请确认账号已分配卡片或具备相应权限。 - ## 首页结果 -首页公开查询显示“使用流量”(已用流量),不展示账号套餐的剩余流量。在线状态可能为在线、离线、未知或未查询到会话。结果区域的查询和排查说明均提示:内容仅供参考,以业务系统结果为准。 - -![首页公开查询结果中的卡号、使用流量和在线状态](/images/manual/mini-program/public-query-result-v102.png) +首页结果中的“剩余流量”按“剩余 / 套餐总量”展示;在线状态可能为在线、离线、未知或未查询到会话。结果区域的查询和排查说明均提示:内容仅供参考,以业务系统结果为准。 diff --git a/docs/manual/mini-program/index.md b/docs/manual/mini-program/index.md index 3471d69..2548977 100644 --- a/docs/manual/mini-program/index.md +++ b/docs/manual/mini-program/index.md @@ -4,7 +4,7 @@ title: 小程序端使用手册 # 小程序端使用手册 -当前小程序版本为v1.0.2。无需登录可使用公开查卡和卡片排查;登录后可使用账号获授权的设备、办理和服务功能。 +本文介绍 iotLCM 平台当前已开放的页面及操作功能,具体可用内容以账号实际权限为准。当前版本以**公开查卡和状态排查**为主,业务办理入口暂未开放。
@@ -20,22 +20,17 @@ title: 小程序端使用手册 | --- | --- | --- | | 首页 | 已开放 | 手动输入、扫码、拍照识别并查询卡片 | | 卡片详情 | 已开放 | 公开查询只展示卡号、卡状态、在线状态和已用流量 | -| 卡片排查 | 已开放 | 输入卡号查看状态摘要;历史流量趋势仍限顶层管理员 | -| 登录 | 已开放 | 支持账号密码或手机号短信验证码;多个身份时选择本次账号 | -| 设备列表 | 登录后使用 | 查看账号权限范围内的卡片,支持搜索、筛选、刷新和详情 | -| 办理 | 登录后按权限显示 | 卡片排查、卡片划拨、客户管理、工单和批次日志等按身份与权限显示 | -| 消息与我的 | 登录后使用 | 查看站内消息、个人资料和授权的业务工作台入口 | -| 续费、变更与加油包 | 暂未开放 | 当前版本暂未开放 | -| 订单、预警、余额充值 | 暂未开放 | 当前版本暂未开放 | -| 绑定卡片、停复机等卡片更多操作 | 暂未开放 | 当前版本不提供这些操作;有划拨权限时可使用卡片划拨 | - -当前底部导航为“首页、设备、办理、我的”。 +| 卡片排查 | 已开放 | 输入卡号查看状态摘要;流量趋势仅对管理员账号显示 | +| 账号密码登录 | 已开放 | 企业、代理商和终端用户使用已有账号登录 | +| 设备列表 | 登录后使用 | 显示当前账号权限范围内的卡片;未登录不要用此页进行公开查卡 | +| 办理、订单、工单、预警、开停数据等 | 暂未开放 | 入口或路由会提示“当前版本暂未开放此功能” | +| 微信登录、注册、绑定卡片、卡片更多操作 | 暂未开放 | 本版本不提供这些入口 | ## 推荐流程 1. 打开小程序首页,在“卡片查询”中输入 ICCID、MSISDN、IMSI 或 IMEI。 -![小程序首页卡片查询输入框](/images/manual/mini-program/home-card-query-v102.png) +![小程序首页卡片查询输入框](/images/manual/mini-program/home-card-query.png) 2. 也可以点击“扫码”读取卡片条码,或点击“拍照”识别卡片上的 ICCID。 @@ -47,62 +42,52 @@ title: 小程序端使用手册 4. 需要查看公开字段时点击“详情”;需要判断异常原因时点击“卡片排查”。 -
+
- 首页查询结果中的详情和卡片排查入口 + 首页查询结果中的详情和卡片排查入口
首页入口
- 卡片详情页展示的公开字段 + 卡片详情页展示的公开字段
卡片详情
- 卡片排查页展示的状态摘要 + 卡片排查页展示的状态摘要
卡片排查
-5. 如需工单、客户管理、卡片划拨或批次日志,请登录后在“办理”或“我的”查看获授权的入口;续费、变更与加油包暂未开放。 +5. 如果需要停复机、开通数据服务、套餐办理、预警或工单,请等待后续版本开放。 -
-
- 我的页面中的工单服务、客户管理和批次执行日志入口 -
“我的”业务工作台入口
-
-
- 办理页面中的卡片划拨、工单服务、客户管理和批次执行日志入口 -
“办理”中的业务入口
-
-
- -## 登录与账号选择 +## 账号密码登录 1. 在需要账号数据的页面进入登录页,或在首页点击登录入口。 -
+
- 从首页底部的我的入口进入登录 + 从首页底部的我的入口进入登录
首页“我的”入口
- 登录页中的账号密码登录入口 + 登录页中的账号密码登录入口
账号密码登录
-2. 选择“密码登录”,输入已有手机号或用户名及密码,点击“登录”;或选择“验证码登录”,输入手机号,获取验证码时完成滑块验证,再输入收到的短信验证码登录。 +2. 输入已有账号和密码,完成页面要求的安全验证后点击“登录”。 -![密码登录与验证码登录选项](/images/manual/mini-program/account-login-methods-v102.png) +![账号密码登录表单](/images/manual/mini-program/account-password-login.png) 3. 如果同一账号匹配多个登录身份,按页面提示选择本次要进入的账号。 4. 登录成功后返回原页面;设备页会按账号权限加载卡片数据。 -![登录后首页显示账号权限范围内的我的设备](/images/manual/mini-program/login-success-home-v102.png) +![登录后设备页按账号权限加载卡片数据](/images/manual/mini-program/devices-page.png) -当前版本未开放注册、微信登录和找回密码。无法登录时请联系账号管理员或客服。 +当前版本不开放注册和微信登录。“忘记密码”页面会提示短信服务接入后开放,无法登录时请联系账号管理员或客服。 ## 使用边界 +- 公开查询和排查结果仅供辅助判断,最终以运营商和业务系统状态为准。 - 未登录查询不会展示完整 IMSI、IMEI、APN、IP、套餐内部信息等受限字段。 - 请勿在查询、排查或反馈内容中提交身份证号、银行卡号等无关敏感信息;密码只应填写在登录表单中。 @@ -111,8 +96,4 @@ title: 小程序端使用手册 - [首页查卡、扫码与拍照](./home) - [卡片详情](./devices) - [卡片排查](./diagnosis) -- [登录后办理概览](./business) -- [客户管理与卡片划拨](./customers-and-allocation) -- [工单服务](./work-orders) -- [批次执行日志](./execution-logs) -- [消息与个人中心](./messages-and-profile) +- [常见问题](./faq) diff --git a/docs/manual/web/api-and-logs.md b/docs/manual/web/api-and-logs.md index 9b7b0ed..1b47516 100644 --- a/docs/manual/web/api-and-logs.md +++ b/docs/manual/web/api-and-logs.md @@ -8,13 +8,11 @@ 页面显示本企业的企业 ID、企业名称、`appKey`(API 账号标识)和 `appSecret`(API 密钥),并提供复制按钮。接口鉴权和请求格式请配合 [OpenAPI 接口文档](/openapi/) 使用。 -页面或旧截图可能将应用标识标成 `appId` 或显示“APPID复制成功”,当前复制操作实际取的是 `appKey`。请按下方说明及目标接口版本区分字段,不根据旧按钮文案替换请求参数。 - -**appKey ≠ appId** - +::: warning appKey ≠ appId - **`appKey`** 和 **`appSecret`** 仅用于调用 `/openapi/v3/query/token` 换取 token - **`appId`**(客户组织编码,如 `CUS-202601-0001`)由 token 接口返回,调用其他接口时在请求体中传入 - 不要把 `appKey` 当作 `appId` 使用,两者是不同的概念 +::: ### 安全要求 @@ -24,51 +22,32 @@ - 不同环境不要共用同一份配置文件。 - 怀疑泄露时立即停止相关调用并联系平台支持更换凭证。 -复制后粘贴到配置前,检查是否带入多余空格或换行。获取 token 失败时,先核对本企业的 appKey 与 appSecret 是否配套;后续请求失败时,按对应版本的接口文档核对 token、appId 和请求地址,不要混用不同版本的鉴权参数。 +复制后粘贴到配置前,检查是否带入多余空格或换行。接口返回鉴权失败时,先核对企业对应的 appId 与 appSecret 是否配套,再检查签名、时间戳和请求地址。 -## 执行日志 +## 执行日志(暂未开放) **入口:** 左侧菜单 → **执行日志**。 -![执行日志入口与操作日志页面](/images/manual/execution-log-entry.png) - 批量续费、套餐变更、加油包、重启、停复机、划拨、达量断网等任务提交后,均应通过执行日志确认最终结果。 ### 查询批次 -可按关键字、批次编号、批次类型、发起渠道、操作规模、输入方式、异步处理状态和创建时间查询。 - -![执行日志查询条件](/images/manual/web/execution-log-query.png) - -列表显示: +可按关键字、批次编号、批次类型、异步处理状态和创建时间查询。列表显示: - 批次编号和批次类型。 - 来源方式,如 Excel 或批量输入。 -- 发起渠道(如 Web、小程序或接口)及操作规模(单卡、批量);旧记录可能显示为未知,不能仅凭总数量推断来源。 - 运行结果和异步状态。 - 总数量、开始时间和结束时间。 点击批次编号可查看逐卡明细,包括行号、ICCID、MSISDN、IMSI、明细状态和异常原因。点击“查看”可查看批次概要、失败原因、源文件、结果文件和处理时间。 -划拨批次的概要还显示划拨单位和接收单位;若目标按每张卡分别指定,接收单位会提示在逐卡明细中查看。核对划拨结果时,先看批次单位,再查看每张卡的接收方和失败原因。 ### 处理失败任务 1. 用提交时记录的批次号查询。 -2. 核对批次和逐卡状态。“待处理”“处理中”或“待核查”尚无确定结果,应先等待或请平台核实,不要重复提交。 +2. 确认批次已结束,避免把“处理中”误判为失败。 3. 点击批次号查看失败卡及异常原因。 -4. 有结果文件时下载核对;文件待生成、生成失败或暂无文件时,先查看逐卡明细。无文件或文件生成失败不代表卡片执行失败。 -5. 原批次结束后,只对确认失败且可修正的卡,核实当前卡片、套餐或归属状态后修正原因并重新提交,不要整批重复提交。划拨和出库还需按[结果有误时的处理步骤](./business-operations#划拨或出库结果有误时)核对。 +4. 下载结果文件,修正卡号、状态、套餐或模板数据。 +5. 只重提失败且可修正的卡,不要整批重复提交。 6. 无法处理的上游错误通过工单反馈,并附批次号和失败原因。 常见失败原因包括卡号不属于当前企业、卡状态不允许办理、套餐不匹配、余额不足、模板字段错误、上游超时或重复业务仍在处理中。 - -## 接口资源与权限组(管理员) - -获授权管理员可通过“接口资源”维护接口名称、权限标识、请求方法、路径、版本及启停状态;通过“API 权限组”维护组名称、编码、状态和包含的接口资源。具体页面名称与分组以当前菜单为准。 - -1. 在接口资源中按名称、版本和状态查询目标接口,确认方法、路径及权限标识与已部署接口一致。 -2. 在权限组中新增或编辑所需资源集合,核对启用状态后保存。 -3. 根据企业实际授权关系核对可访问范围;不要将持有 API 密钥理解为可调用全部接口。 -4. 变更后由获授权的接口调用方按对应 OpenAPI 文档验证,保留脱敏错误信息用于排查。 - -配置资源或权限组不会自动新增后端接口实现。此类权限维护与普通用户复制本企业 API 凭证是不同操作。 diff --git a/docs/manual/web/business-operations.md b/docs/manual/web/business-operations.md index dda8a9f..ca7862c 100644 --- a/docs/manual/web/business-operations.md +++ b/docs/manual/web/business-operations.md @@ -8,7 +8,7 @@ 页面按“套餐及数据”“生命周期”“预警中心”展示业务入口。每个入口都有独立按钮权限,未授权的入口不会显示。 -展示的业务包括: +可能出现的业务包括: | 分类 | 业务 | 用途 | | --- | --- | --- | @@ -25,7 +25,7 @@ | 预警中心 | 流量预警配置 | 配置单卡流量阈值预警 | | 预警中心 | 流量池预警配置 | 配置流量池阈值预警 | -## 通用办理方式 +## 通用办理方式(部分开放) 不同业务会提供以下一种或多种数据来源: @@ -33,32 +33,24 @@ - **批量输入:** 通常每行一个 ICCID;部分业务支持每行填写 `ICCID MSISDN IMSI`。 - **连续号段:** 填写 ICCID、MSISDN 或 IMSI 的起始值和结束值,适合连续卡段。 -当前页面提供的来源如下,不要把接口存在视为界面已提供入口: - -| 业务 | 当前页面来源 | -| --- | --- | -| 续费、加油包、开停数据、达量断网、重启、停复机、划拨、转销户 | Excel、批量输入 | -| 变更套餐、退订、单卡预警 | Excel、批量输入、连续号段 | -| 流量池预警 | Excel、批量输入,不支持连续号段 | - 标准操作流程: 1. 选择业务入口和数据来源。 -2. 上传文件或输入卡号;需要预处理的业务先提交校验。 -3. 记录系统返回的批次号。直接提交型业务按页面确认后提交,不必寻找不存在的预处理步骤。 -4. 对预处理型业务,核对有效数量、失败数量、目标套餐、购买时长、生效方式、金额和余额等信息。 -5. 确认无误后提交原批次的正式任务。 +2. 上传文件或输入卡号,提交预处理。 +3. 记录系统返回的批次号。 +4. 核对有效数量、失败数量、目标套餐、购买时长、生效方式、金额和余额等信息。 +5. 确认无误后提交正式任务。 6. 前往“执行日志”查询批次最终状态和失败原因。 -### 提交前确认 - +::: warning 提交前确认 批量任务可能影响通信、套餐、费用或卡生命周期。提交前应抽查卡号、目标企业、套餐编码、阈值、生效方式和付款方式。不要重复提交仍在处理中的批次。 +::: -## 续费、变更与加油包 +## 续费、变更与加油包(暂未开放) ### 续费套餐 -支持 Excel 或批量输入。预处理后选择可续费套餐、续费年限、续费日期和可用付款方式。余额支付时必须确认余额充足;当前续费页顶层机构可按返回条件选择付款方式,非顶层机构使用余额支付。线下支付仅在实际允许且已完成相应确认时使用。 +支持 Excel 或批量输入。预处理后选择可续费套餐、续费年限、续费日期和付款方式。余额支付时必须确认余额充足;线下支付时按页面要求完成线下确认。 ### 变更套餐 @@ -68,36 +60,27 @@ 可选择“单卡加油包”或“流量池加油包”。单卡 Excel 需填写 ICCID 和加油包套餐编码;流量池 Excel 需填写流量池编码和套餐编码。预处理后核对数量、单价、总金额、付款账户和余额。 -## 生命周期和数据服务 +## 生命周期和数据服务(部分开放) 重启、自主停机、自主复机、开停数据、转销户和退订通常支持 Excel 或批量输入。生命周期任务提交后不会立即在列表全部完成,应通过批次号在执行日志中跟踪。 -![业务受理页面中的生命周期业务入口](/images/manual/business-lifecycle-entry.png) - - 重启适合设备长时间不在线且卡状态正常的场景。 - 自主停机和关闭数据会中断通信,恢复前请确认业务窗口。 - 转销户通常不可逆或需要人工处理,提交前必须复核卡号。 - 划拨前确认目标企业,任务完成后卡的数据归属和可见范围会变化。 -**“开停数据”开关的是数据通信服务,不是 APN。** APN 目前只在[卡信息](./card-info)的会话信息、[智能诊断](./intelligent-diagnosis)的通信服务模块和通道测试结果中作为查询结果展示,业务受理没有单独的 APN 开停入口。需要变更 APN 相关配置时,先确认所属通道是否支持,不要用“开停数据”代替。 +## 达量断网批量配置(部分开放) -另外,达量断网、区域限制等原因造成的断网不能通过重新开启数据服务或 APN 直接解除。诊断提示断网与在线会话需分别判断时,先处理真正的断网原因,再核对服务状态。 - -## 达量断网批量配置 - -在“业务受理”点击“达量断网”,当前页面通过 Excel 或批量输入配置,不显示连续号段入口: - -![业务受理中的达量断网入口](/images/manual/business-threshold-entry.png) +在“业务受理”点击“达量断网”,可通过 Excel、批量输入或连续号段批量配置: 1. 选择开启或关闭。 2. 开启时填写阈值,单位为 MB,阈值必须大于 0,最多保留 3 位小数。 -3. 按需设置“跨月保持断网”。开启后,因达量断网的卡即使跨账期恢复网络,也会再次自动断网,直至人工开网;开启前确认业务要求。 -4. 填写卡号或上传模板后提交。 -5. 记录批次号并在执行日志中检查结果。 +3. 填写卡号或上传模板后提交。 +4. 记录批次号并在执行日志中检查结果。 关闭配置表示不再按该阈值触发断网,不等同于立即恢复所有因其他原因停机的卡。 -## 达量断网页面 +## 达量断网页面(部分开放) **入口:** 左侧菜单 → **通讯管理 → 达量断网**。 @@ -106,49 +89,11 @@ 该页面用于查看和维护已有配置: - 可按 MSISDN、ICCID、IMSI、IMEI 或配置状态查询。 -- 列表显示通道、所属公司、当前套餐、配置状态、阈值及跨月保持断网设置。 +- 列表显示通道、所属公司、当前套餐、配置状态和阈值。 - 有编辑权限时,可修改开启/关闭状态及阈值。 - 有删除权限时,可删除该卡的达量断网配置。 - 有导出权限时,可按当前条件导出配置。 -![业务受理中的达量断网配置与 Excel 导入](/images/manual/business-operations-batch-threshold.png) +批量新增或修改建议从“业务受理 → 达量断网”完成;单卡核对和调整可在本页面完成。 -## 划拨给下级客户 - -划拨用于调整已有业务卡的归属,与库存卡首次出库不同。 - -1. 进入“业务受理 → 划拨”,选择当前有权使用的输入方式。 - - ![业务受理页面中的划拨入口](/images/manual/business-allocation-entry.png) - -2. 选择系统返回的目标客户;目标列表为空时先确认客户关系及划拨权限。 -3. 上传最新模板或输入目标卡号,完成页面提供的预处理。 -4. 复核目标客户、有效卡数量和失败原因,再确认提交原批次。 -5. 保存批次号,在执行日志中核对逐卡结果;完成后查询卡片归属。 - -划拨会改变数据归属和账号可见范围。不要将“任务已提交”当作已划拨成功,也不要在结果未确认时向其他客户重复划拨。 - -## 划拨或出库结果有误时 - -当前版本没有“回拨”或“撤销”按钮,划拨、出库出错后不能一键还原。按以下顺序处理: - -1. 先用批次号在[执行日志](./api-and-logs)核对批次和逐卡状态。若显示“待处理”“处理中”或“待核查”,结果尚未确认,应先等待或请平台核实,不要重复提交。 -2. 原批次结束后,只对逐卡结果已确认为“未执行”或“失败”的卡,分别在[卡信息](./card-info)或库存卡信息中核对当前归属、库存状态及正式卡记录。确认相关状态未变化后,修正原因,仅重新提交这些卡。 -3. 已成功但归属错误的卡,不要再次划拨到其他企业来“覆盖”错误结果。重复划拨会叠加归属变更记录,让后续核对更困难。 -4. 携带批次号、卡号清单、原归属企业、预期目标企业、当前实际归属、操作时间及相关订单号(如有)提交工单,请平台支持核实并给出处理方案。 -5. 处理完成后在[卡信息](./card-info)核对当前归属:列表中的“所属公司”或卡详情中的“所属企业”。订单和批次记录用于追溯处理过程,不单独作为当前归属已修正的依据。 - -出库出错参照同样顺序:先看执行日志,再核对订单、库存与卡信息,不要用重复出库或备注掩盖问题。未执行或失败的卡还应确认是否仍在库存;已成功出库的卡会从库存列表移除,需在卡信息中确认正式卡及归属,不能仅凭库存列表查不到就判断出库成功。 - -## 业务入口不可用时 - -| 现象 | 处理方法 | -| --- | --- | -| 看不到某项业务 | 请管理员核对菜单及该业务的模板、预处理、提交权限 | -| 可打开但无法下载模板或提交 | 不同操作有独立权限,应补齐所需权限后重试 | -| 无可选套餐 | 核对当前套餐的可续费、可变更或加油包关系,以及套餐启用状态和价格 | -| 预处理有失败项 | 按原因修正;正式提交前重新核对有效数量 | -| 余额不足 | 核对付款账户、金额与付款方式,联系财务处理后再办理 | -| 提交超时或结果不明 | 先查执行日志与卡片状态,避免重新创建相同任务 | - -页面没有配置操作行为的占位入口不属于可用业务。例如“添加安装位置”不能仅因显示在业务面板中就视为已可办理。 +![业务受理中的达量断网批量输入](/images/manual/business-operations-batch-threshold.png) diff --git a/docs/manual/web/card-info.md b/docs/manual/web/card-info.md index 9308333..73fd937 100644 --- a/docs/manual/web/card-info.md +++ b/docs/manual/web/card-info.md @@ -5,7 +5,7 @@ 左侧菜单 → **通讯管理 → 卡信息**。 该页面是日常查卡的主要入口,可查询卡的身份标识、运营商状态、套餐、流量、归属企业、通道和到期情况。 -![日常查卡页面入口](/images/manual/web/card-info-main-entry.png) +![日常查卡页面入口](/images/manual/card-info-main-entry.png) ## 查询卡片 @@ -25,12 +25,6 @@ 查询不到卡时,先确认使用的是完整卡号,再清空状态、时间和通道等附加条件重试。 -### 批量查询 - -在列表上方点击“批量操作 → 批量查询”,每行填写 1 至 3 个号码值(ICCID、MSISDN、IMSI),多个号码以空格分隔,同一行应属于同一张卡;单次最多 1000 行。 - -点击“查询”后,结果保留当前筛选条件和公司范围,可使用原有“导出”按钮导出。若结果少于预期,先核对号码及附加条件。完成后点击“清除批量查询”恢复普通查询。 - ## 列表信息 | 字段 | 说明 | @@ -52,12 +46,14 @@ ## 查看卡详情 -点击列表中目标卡的 ICCID 打开详情。详情上方展示:MSISDN、ICCID、IMSI、IMEI、卡状态、网络类型、流量同步时间、套餐总流量、到期时间、出库时间、当前套餐、已用流量、剩余流量、所属企业、所属通道、达量断网配置状态、限额、备注。 +点击目标卡右侧“查看”。详情上方展示:MSISDN、ICCID、IMSI、IMEI、卡状态、网络类型、流量同步时间、套餐总流量、到期时间、出库时间、当前套餐、已用流量、剩余流量、所属企业、所属通道、达量断网配置状态、限额、备注。 + +![在卡信息列表点击“查看”打开卡详情](/images/manual/card-info-view-entry.png) 详情下方包含以下页签: - **会话信息:** APN、IPv4、IPv6、接入方式、在线状态、会话建立时间、实时 IMEI、开关机状态等。点击“刷新”重新查询;“未查询到会话”通常表示设备当前未建立数据会话,并不等同于卡已销户。 -- **归属信息:** 当前套餐编号、套餐名称、所属企业;通道信息以当前账号实际可见字段为准。 +- **归属信息:** 当前套餐编号、套餐名称、所属企业和所属通道(所属通道不予展示)。 - **主套餐:** 订单编号、套餐名称、套餐类型、订购状态、生效时间和到期时间。 - **叠加套餐:** 加油包名称、总流量、支付方式和交易时间。 - **变更历史:** 变更前后套餐、订购状态和办理时间。 @@ -68,30 +64,15 @@ 页面上的操作按钮以账号权限为准。 -![卡信息列表更多菜单中的常用操作](/images/manual/card-info-common-actions.png) - - **备注:** 编辑本企业对卡片的业务备注,便于按项目、设备或使用场景检索。 - **同步用量:** 向上游请求最新用量。同步成功后查看“流量同步时间”是否更新。 - **同步状态:** 向上游请求最新运营商卡状态。 -- **导出:** 按当前筛选条件导出第一页最多 2000 张卡的信息。匹配数量超过 2000 时,应按卡号、时间或其他条件分段查询并分别导出,核对各文件的记录数。 +- **导出:** 按当前筛选条件导出卡信息。 - **诊断:** 在卡详情点击“诊断”,系统会携带当前 ICCID 跳转到智能诊断并自动查询。 -列表行的“更多”菜单还可能显示**开通数据、停用数据、自主停机、自主复机、重启**。这些操作各有独立权限;选择后先核对确认框中的 ICCID 和操作名称,再点击“确认提交”。缺少 ICCID 的卡不能提交。 +“批量操作”当前仍显示为待接入功能。 -单卡操作会创建业务任务;页面提示“任务已提交”或返回批次号不代表运营商侧已经完成。请在[执行日志](./api-and-logs)中按批次号核对最终状态,再刷新卡信息确认结果。 - -列表“备注”弹窗目前只保存备注;出库时间、套餐周期和到期时间在此页为展示字段,不能通过“备注”入口修改。需要变更卡片业务信息时,使用对应的出库或套餐业务流程,并在提交后复核卡详情。 - -## 单卡用量与历史月份 - -列表和卡详情只显示当前账期的总流量、已用流量和剩余流量。需要按时间跨度看用量时,用以下两种方式: - -1. **趋势查看:** 在[智能诊断](./intelligent-diagnosis)执行一键诊断,结果中的流量趋势提供近 7 天、近 30 天和近 6 个月三档,适合判断设备是否持续上报、是否突增或长时间无流量。 -2. **逐月数值:** 需要某个月的确切用量时,通过 OpenAPI 的历史月用量接口按 ICCID 和月份(`yyyyMM`)查询,详见[旧版兼容接口 - 查询 SIM 历史月用量](/openapi/legacy/query)。该接口一次返回一个月份,查近 3 个月或近 6 个月需按月份分别调用。 - -“近 1 个月 / 近 3 个月 / 近 6 个月”这组下拉项在**库存卡信息的“协议到期”条件**里,用于筛选协议到期时间,不是用量区间,两者不要混用。 - -历史月份用量与当前账期的已用流量来自不同取数路径,口径和更新时间可能不同。跨月对比时先确认月份口径,不要直接把两个数值相减。 +![卡信息列表更多操作菜单](/images/manual/card-info-more-actions.png) ## 查看数据异常时 diff --git a/docs/manual/web/enterprise-management.md b/docs/manual/web/enterprise-management.md index 0703617..5c194fb 100644 --- a/docs/manual/web/enterprise-management.md +++ b/docs/manual/web/enterprise-management.md @@ -16,67 +16,52 @@ **入口:** 左侧菜单 → **企业管理 → 角色管理**。 -角色用于向本机构用户分配菜单和按钮权限。列表显示本级角色,可按角色名称、角色权限字符和状态查询。 +![角色管理页面入口](/images/manual/role-management-entry.png) -- **默认管理员:** 本机构绑定的默认角色,只能查看,不能在此修改或删除。 -- **上级下发:** 由上级统一维护,本机构只能查看,不能修改或删除。 -- **本级自建角色:** 可按权限新增、修改;已绑定用户的角色不能删除,需先调整用户的角色分配。 +角色用于把菜单和按钮权限批量授予用户。列表可按角色名称、权限字符和状态查询。 ### 创建角色 1. 点击“新增”。 +![创建角色时点击新增](/images/manual/role-create-add-button.png) +2. 填写角色名称和角色权限字符。 +3. 设置角色状态。 +4. 在“菜单权限”中勾选该角色需要使用的页面和操作。 +5. 需要传递给直属下级企业时,按业务要求设置“下发给下一级”。 - ![角色管理中的新增角色入口](/images/manual/role-create-entry.jpg) + ![设置下发给下一级](/images/manual/role-management-distribute-to-child.png) -2. 填写角色名称和角色权限字符,例如 `agentUser`;角色权限字符用于标识角色,具体页面和操作权限通过“菜单权限”勾选。 -3. 设置角色状态为“正常”或“停用”,按需填写备注。 -4. 在“菜单权限”中选择需要的目录、页面和按钮。可选范围受本机构已获授权的权限限制,不能授予范围之外的权限。默认不启用“父子联动”,勾选父项不会自动选中全部子项;需要联动选择时可勾选“父子联动”,并核对最终选择。 +6. 保存后回到“用户管理”,将角色分配给用户。 +![在用户管理中分配角色](/images/manual/assign-role-to-user.png) - ![新增角色时选择菜单权限及父子联动选项](/images/manual/web/role-menu-permissions.png) - -5. 保存后回到“用户管理”,为用户选择相应角色。用户表单不会提供用于下发的管理员角色供普通用户选择。 - - ![在用户管理中分配角色](/images/manual/web/assign-role-to-user.png) - -本级新增角色用于本机构用户授权;下级企业的默认管理员权限由系统的默认角色及下发规则管理,需要调整时联系上级或平台管理员。 - -为用户配置角色时,只勾选其工作所需的页面和操作,并在分配后核对实际可见菜单及可用按钮。 - -### 顶级与下级账号的权限核对 - -账号层级本身不会自动开放整组功能。平台授权管理员可维护[通道](./channels)、[接口资源与权限组](./api-and-logs)及角色;下级企业管理员可在上级下发的范围内创建直属企业客户、用户和本级角色,并按实际授权使用查卡、同步、诊断、[业务受理](./business-operations)、库存、工单及 API 查询。 - -为下级账号开通业务时,先由上级核对下发角色的菜单范围,再由本级管理员为用户分配角色;用户重新登录后,分别检查左侧菜单、页面按钮和可查询的卡片范围。看得到页面但无法提交时,还需核对该业务独立的模板、预处理或提交权限。默认管理员角色用于本机构管理,并不是一份对所有下级固定相同的功能清单。 +本级机构绑定的默认角色不能修改或删除。新增自定义角色时遵循最小权限原则,不要为普通查询人员授予企业删除、用户删除、角色修改或批量业务提交权限。 ## 企业客户 **入口:** 左侧菜单 → **企业管理 → 企业客户**。 -![企业客户页面入口](/images/manual/web/enterprise-customer-entry.png) +![企业客户页面入口](/images/manual/enterprise-customer-entry.jpg) 该页面面向获准管理下级企业的客户。可按企业名称和状态查询,列表显示企业名称、登录账号、负责人、联系电话、邮箱、组织所在地、详细地址、创建时间和状态。 根据按钮权限,可执行: -- **新增:** 先确认本机构具备有效的下级管理员角色或平台配置的默认角色下发来源,再填写企业名称、登录账号、初始密码、联系方式和地址等信息。当前实现按默认角色及下发规则复制权限,不要求为每个客户创建同名角色。提示未配置唯一的下级管理员角色或默认角色异常时,联系管理员检查角色配置,不反复新建客户。 - - ![新增企业客户页面](/images/manual/web/enterprise-customer-create-form.png) +- **新增:** 创建直属企业客户之前,需在角色管理界面创建该企业客户同名角色,之后返回新增页面设置登录账号、初始密码、联系方式和企业地址等信息。 +![角色管理中创建企业客户同名角色](/images/manual/enterprise-customer-role-match.png) +![新增企业客户页面](/images/manual/enterprise-customer-create-form.jpg) - **修改:** 调整企业名称、登录账号、负责人。 - ![修改企业客户信息](/images/manual/web/enterprise-customer-edit.png) + ![修改企业客户信息](/images/manual/enterprise-customer-edit.png) - **重置密码:** 为该企业主账号设置新密码,密码长度为 5 至 20 位。 - - ![企业客户重置密码](/images/manual/web/enterprise-customer-reset-password.png) - +![企业客户重置密码](/images/manual/enterprise-customer-reset-password.png) - **企业管理:** 分两步维护单位信息和实名认证信息。 ![维护企业单位信息](/images/manual/enterprise-customer-manage.png) - **删除:** 删除前确认该企业没有仍在使用的卡、用户和业务数据。删除属于高风险操作。 - - ![企业客户删除确认](/images/manual/web/enterprise-customer-delete-confirm.png) +![企业客户删除确认](/images/manual/enterprise-customer-delete-confirm.png) 新增企业后,应及时通知对方修改初始密码,并按需要创建角色和用户。 @@ -96,7 +81,7 @@ 4. 至少选择一个角色后保存。 初始密码长度为 5 至 20 位。建议使用更长且不重复的密码,并要求用户首次登录后修改。 -![新增用户页面](/images/manual/web/user-create-form.png) +![新增用户页面](/images/manual/user-create-form.png) ### 维护用户 @@ -104,7 +89,7 @@ - “重置密码”可设置新密码。 - “删除”会使用户失去登录和数据访问能力,操作前确认账号不再使用。 -![维护用户信息](/images/manual/web/user-management-maintain-user.png) +![维护用户信息](/images/manual/user-management-maintain-user.png) ## 建议的角色划分 diff --git a/docs/manual/web/faq.md b/docs/manual/web/faq.md new file mode 100644 index 0000000..0f13e68 --- /dev/null +++ b/docs/manual/web/faq.md @@ -0,0 +1,57 @@ +# 常见问题 + +## 登录后看不到某个菜单 + +平台按角色显示菜单。先联系本企业管理员检查用户是否绑定正确角色、角色是否正常以及菜单权限是否勾选。若整个企业都没有该功能,需要联系平台支持开通。 + +## 同事有按钮,我没有 + +页面权限和按钮权限分别控制。即使都能进入同一页面,新增、编辑、导出、同步、删除或业务提交按钮也可能不同。由企业管理员对比双方角色权限。 + +## 卡信息查询不到卡 + +1. 清空其他筛选条件。 +2. 使用完整 MSISDN、ICCID 或 IMSI 查询。 +3. 检查是否有前后空格或字符缺失。 +4. 确认该卡已划拨到当前企业,且账号有相应数据范围。 +5. 仍无结果时创建工单并提供卡号。 + +## 卡状态或流量没有更新 + +在“卡信息”中分别执行“同步状态”和“同步用量”,完成后刷新列表,并查看同步时间是否变化。运营商接口可能有延迟;短时间内不要反复同步。 + +## 智能诊断显示未查询到会话 + +表示当前没有查到数据会话,不一定是卡异常。检查设备供电、信号、APN 和天线,确认数据服务已开启后重启设备,再稍后诊断。 + +## 诊断提示运营商不支持 + +当前卡所属通道未提供该项实时查询能力。结合卡信息、同步时间、设备侧日志和其他诊断模块判断;需要运营商侧核实时提交工单。 + +## 批量业务提交后一直没有结果 + +记录批次号,进入“执行日志”查看异步状态。仍在处理中时请等待;已失败时查看批次明细和失败原因。不要在结果未明确前重复提交同一批卡。 + +## Excel 上传失败 + +- 使用页面当次下载的最新模板。 +- 文件格式必须为 `.xls` 或 `.xlsx`,且不超过页面限制。 +- 不修改表头、不合并单元格、不增加公式。 +- 卡号列按文本格式保存,避免科学计数法或末位被修改。 +- 根据失败提示修正后,仅重提失败数据。 + +## 达量断网开启后没有立即断网 + +确认阈值单位为 MB、配置任务已成功、卡用量已同步且确实达到阈值。运营商侧执行可能有延迟;同时检查卡是否受其他套餐或通道策略影响。 + +## 如何提交高质量工单 + +提供完整 ICCID、MSISDN、故障开始时间、影响数量、设备位置、复现步骤、诊断结果、执行日志批次号和必要截图。描述中避免使用“卡有问题”这类无法定位的表述,也不要发送密码或 API 凭证。 + +## 使用安全建议 + +- 为每位操作人员创建独立账号,不共享管理员账号。 +- 查询人员、业务操作员和管理员使用不同角色。 +- 定期停用离职或不再使用的账号。 +- 高风险批量任务实行复核,保留批次号和结果文件。 +- 导出的卡信息、企业资料和 API 凭证按敏感数据管理。 diff --git a/docs/manual/web/home.md b/docs/manual/web/home.md index d31cdd1..bfd06f1 100644 --- a/docs/manual/web/home.md +++ b/docs/manual/web/home.md @@ -1,12 +1,10 @@ # 首页与通用操作 -## 首页 +## 首页(暂未开放) **入口:** 登录后默认进入“首页”;如已授权,也可点击左侧“首页”。 -![管理平台首页概览](/images/manual/web/home-dashboard.png) - -首页由运行时配置决定显示哪些模块。当前代码中,部分模块已接入业务接口,部分仍为固定展示,阅读时应区分: +首页用于快速掌握企业卡业务概况,通常包括: - SIM 卡总数、本月新增、本月数据用量、本月短信用量和 SIM 卡月活跃度。 - 生命周期分布、流量池、物联卡位置分布等图表。 @@ -14,14 +12,7 @@ - 流量用尽关停、限额管控关停、封顶关停和套餐余量提醒等流量预警。 - 卡信息、智能诊断等快捷入口。 -| 模块 | 当前实现及使用方式 | -| --- | --- | -| 我的面板、生命周期分布、数据用量、流量池 | 已接入相应业务查询接口,结合账号范围及统计周期阅读 | -| 近 6 月费用、位置分布、业务预警面板 | 当前使用固定展示数据,不能用于账单核对、实际定位或判断当前告警数量 | - -首页只作概览。处理单张卡应进入“卡信息”;费用核对使用订单记录,实际预警核对预警配置和通知记录。 - -业务量模块当前查询的是数据流量,切换“语音”“短信”页签并未切换到独立的语音或短信统计接口,不能将图中的 GB/MB 数值解释为通话或短信量。 +首页数据用于概览和发现异常。处理单张卡时,应进入“卡信息”查看最新详情;预警统计与明细可能存在同步时间差。 ## 列表页通用操作 @@ -33,7 +24,9 @@ 卡号输入框通常支持 MSISDN、ICCID、IMSI。输入前后不要带空格;批量输入时一般每行一张卡。 -![卡信息页面的卡号输入和搜索入口](/images/manual/web/card-info-query.png) +![卡号查询](/images/manual/card-info-query-single.jpg) + +![按号段批量查询](/images/manual/card-info-query-batch.jpg) ### 表格工具 @@ -41,13 +34,9 @@ ![表格工具](/images/manual/table-tools.png) -### 导出 +### 导出(暂未开放) -导出范围因页面而异,不要假定文件包含全部匹配结果。例如“卡信息”当前按查询条件导出第一页最多 2000 条;结果更多时,应分段筛选并分别导出。导出后核对文件记录数,并妥善保管包含卡号、设备号和企业信息的文件。 - -![卡信息页面中的导出入口](/images/manual/web/card-info-export.png) - -![下载中心中的导出文件和下载入口](/images/manual/web/export-download-center.png) +“导出”通常按当前查询条件导出,而不是只导出当前页。建议先缩小查询范围再导出,并妥善保管包含卡号、设备号和企业信息的文件。 ### 状态与数据时间 @@ -61,9 +50,3 @@ - 同一企业内不同用户看到的菜单和数据可能不同。 企业管理员可通过“企业管理 → 用户管理”和“角色管理”调整本企业用户权限。涉及平台未向企业开放的功能时,需要联系平台支持。 - -## 通知公告(管理员) - -获授权管理员可从左侧“通知公告”页面按标题、类型、创建人或时间查询公告,并查看状态和内容。新增或修改时填写标题、类型、正文、状态和通知范围;选择指定组织或用户范围时,再核对目标名单后保存。删除支持单条或勾选多条,提交前确认范围,避免误删仍需展示的公告。 - -“通知公告”的管理权限与普通账号接收站内消息是两回事。保存后可按公告状态、通知范围和用户通知公告记录核对接收对象。小程序[消息中心](../mini-program/messages-and-profile)读取独立的用户消息记录,不能仅凭 Web 公告创建成功就认定小程序会出现同一条公告。 diff --git a/docs/manual/web/index.md b/docs/manual/web/index.md index 3a54e57..7063b90 100644 --- a/docs/manual/web/index.md +++ b/docs/manual/web/index.md @@ -1,6 +1,6 @@ # Web 端使用手册 -本手册面向 iotLCM Web 管理平台的企业客户、业务人员及获授权的平台管理员,说明页面入口、信息含义和操作流程。套餐配置、通道接入、库存出库等章节包含管理员功能,普通企业账号不一定可见。 +本手册面向 iotLCM Web 管理平台的企业客户,说明登录平台后各页面的入口、信息含义和常用操作。 ::: info 权限说明 平台按企业、角色和用户分配权限。左侧菜单、页面按钮可能因企业实际授权不同而不同;看不到某项功能时,先联系本企业管理员确认角色权限。按钮以页面实际显示为准。 @@ -10,19 +10,14 @@ ![iotLCM 管理平台登录页面](/images/manual/login-page.png) -1. 访问 [iotLCM 管理平台](https://admin.5iot.cn/)。 +1. 访问 [iotLCM 管理平台](https://admin.example.com/)。 2. 输入平台分配的账号和密码登录。 -3. 首次登录后,若仍使用初始密码或尚未绑定手机号,页面会弹出“账号安全提示”。按提示点击“去修改”或“去绑定”,分别进入个人中心的安全设置或手机号设置,完成密码修改、手机号绑定。 - - ![首次登录后的账号安全提示](/images/manual/account-security-prompt.png) - +3. 首次登录后建议立即修改初始密码,并确认绑定的手机号、邮箱是否正确。 4. 登录后通过左侧菜单进入业务页面;顶部标签可在已打开页面间切换。 -提示框可选择“稍后再说”,不会阻止进入系统;同一浏览器标签会话内只提示一次。以后仍可从右上角个人中心进入相应设置。邮箱等资料可在个人中心核对。 - 若提示账号停用、密码错误或无可用菜单,请联系本企业管理员;企业管理员无法处理时,可通过工单联系平台支持。 -## 功能地图 +## 功能地图(部分开放) | 菜单 | 页面 | 主要用途 | | --- | --- | --- | @@ -39,14 +34,6 @@ | 工单管理 | 工单记录 | 查询工单的状态变更与操作轨迹 | | 顶级菜单 | 我的 API 凭证 | 查看并复制本企业接口凭证 | | 顶级菜单 | 执行日志 | 跟踪批量任务结果及逐卡失败原因 | -| 系统管理 | 通知公告 | 按权限维护公告内容、状态及通知范围 | -| 系统管理(以部署为准) | 消息日志、通知日志 | 核对站内消息和通知是否发出、发给了谁 | -| 套餐相关页面 | 套餐分类、上游套餐、流量套餐信息、流量套餐定价、流量池 | 维护产品、可办理关系和分层价格,查询池用量 | -| 预警相关页面 | 卡预警配置、流量池预警配置 | 维护提醒阈值、接收方式和启停状态 | -| 生命周期相关页面 | 入库管理、库存卡信息、批次管理、销户卡信息 | 管理入库、出库、批次和销户记录 | -| 通道及同步相关页面 | 通道模板、通道管理、全量同步 | 配置上游接入,检查对接,并按权限发起全量或指定通道同步 | - -后五组使用页面名称定位;菜单由部署环境和权限配置决定,可能采用不同的分组名称。功能已有页面和接口实现不代表当前账号已获授权。列表或表单提交成功也不代表异步任务和运营商侧操作已完成。 “工单问题沟通”是从“我的工单”进入的详情页面,不在左侧单独显示。 @@ -56,13 +43,7 @@ 1. 进入“通讯管理 → 卡信息”。 2. 用 MSISDN、ICCID、IMSI 或 IMEI 查询目标卡。 - - ![卡信息页面的卡号和 IMEI 查询入口](/images/manual/card-info-query-filters.png) - -3. 点击列表中的 ICCID 打开卡详情,核对卡状态、套餐、用量、到期时间和同步时间。 - - ![卡详情中的状态、套餐、用量和时间信息](/images/manual/card-info-detail-summary.jpg) - +3. 打开“查看”,核对卡状态、套餐、用量、到期时间和同步时间。 4. 数据较旧时使用“同步用量”或“同步状态”,再刷新查看。 ![卡信息同步操作示意图](/images/manual/card-info-sync-actions.png) @@ -89,12 +70,9 @@ ![填写创建工单信息](/images/manual/work-order-create-form-new.jpg) -### 办理批量业务 +### 办理批量业务(暂未开放) 1. 进入“通讯管理 → 业务受理”,选择已授权的业务。 - - ![通讯管理中的业务受理入口](/images/manual/business-acceptance-entry-highlighted.png) - 2. 下载最新 Excel 模板,或使用批量输入、连续号段方式提交卡号。 3. 对需要预处理的业务先核对有效数量、失败项、套餐、价格和生效方式。 4. 确认提交后记录批次号。 @@ -102,14 +80,11 @@ ## 阅读指引 -- [首页与通用操作](./home):了解查询、重置、导出、通知公告和数据刷新规则。 -- [卡信息](./card-info):了解卡列表字段、卡详情、会话信息及按权限提交的单卡操作。 +- [首页与通用操作](./home):了解查询、重置、导出和数据刷新规则。 +- [卡信息](./card-info):了解卡列表字段、卡详情和会话信息。 - [智能诊断](./intelligent-diagnosis):了解入口、诊断步骤和结果判断。 - [业务受理与达量断网](./business-operations):了解批量业务及达量断网配置。 - [企业、用户与角色](./enterprise-management):了解组织和账号权限管理。 - [工单管理](./work-orders):了解问题提交、沟通、关闭和评价。 - [API 凭证与执行日志](./api-and-logs):了解凭证保管和批次追踪。 -- [套餐配置与定价](./packages-and-pricing):维护产品、办理关系及客户价格。 -- [预警管理](./warnings):设置单卡和流量池提醒,区分预警与达量断网。 -- [入库、库存与出库](./inventory):管理卡片从入库到出库及销户后的查询。 -- [通道与接入管理](./channels):供获授权管理员配置上游接入。 +- [常见问题](./faq):快速排查菜单、数据、任务和诊断问题。 diff --git a/docs/manual/web/intelligent-diagnosis.md b/docs/manual/web/intelligent-diagnosis.md index 6a4e65e..e2f5c48 100644 --- a/docs/manual/web/intelligent-diagnosis.md +++ b/docs/manual/web/intelligent-diagnosis.md @@ -8,7 +8,7 @@ ![从左侧菜单进入智能诊断](/images/manual/intelligent-diagnosis-menu.png) -2. 左侧菜单 → **通讯管理 → 卡信息** → 在目标卡的“更多”菜单选择“诊断”;也可以点击 ICCID 打开卡详情后选择“诊断”。这两种操作都会带入 ICCID 并开始查询。 +2. 左侧菜单 → **通讯管理 → 卡信息** → 找到目标卡 → “查看” → “诊断”。第二种方式会自动带入 ICCID 并开始查询。 ![从卡详情进入智能诊断](/images/manual/card-detail-diagnosis-entry-attachment.png) diff --git a/docs/manual/web/work-orders.md b/docs/manual/web/work-orders.md index 65de08c..cc37410 100644 --- a/docs/manual/web/work-orders.md +++ b/docs/manual/web/work-orders.md @@ -4,7 +4,7 @@ **入口:** 左侧菜单 → **工单管理 → 我的工单**。 -![我的工单页面入口](/images/manual/web/work-orders-entry.png) +![我的工单页面入口](/images/manual/work-orders-entry.png) 可按工单编号、工单类型和当前处理状态查询。列表显示工单编号、类型、标题、关联业务号、创建人、当前状态、首次响应时间和创建时间。 @@ -14,41 +14,38 @@ 1. 点击“创建工单”。 2. 选择工单类型,如卡问题、套餐问题、订单问题、系统问题或其他问题。 -3. 如需填写“关联业务 ID”,使用对应业务记录的数字 ID,该字段不是 ICCID 或 MSISDN。无法确认时请联系管理员,完整卡号写在问题描述中,不要将长卡号填入数字 ID 字段。 +3. 填写关联业务 ID。卡问题建议填写完整 ICCID,并在问题描述中补充 MSISDN。 4. 填写清晰的工单标题和问题描述。 5. 按需上传截图、日志或结果文件。 6. 核对创建人信息后提交。 - ![创建工单表单与附件上传入口](/images/manual/work-order-create-form-upload.png) - 问题描述建议包含:发生时间、影响范围、卡号、设备所在地、预期结果、实际现象、已执行的同步或诊断操作。不要在附件中上传 API 密钥、账号密码等敏感信息。 +![创建工单表单](/images/manual/work-order-create-form-attachment.png) + ## 沟通与处理 点击工单右侧“沟通”;工单已结束时按钮显示为“查看”。工单问题沟通页会显示历史消息、附件、工单信息和处理轨迹。 -![工单沟通入口](/images/manual/web/work-order-communication-entry.png) +![工单沟通入口](/images/manual/work-order-communication-entry.png) - 在输入区填写回复内容,或按权限上传附件后发送。 +- 平台回复后可继续补充信息,尽量在同一工单中保持上下文完整。 - 有转单权限时,可把工单转交其他处理方。 - 问题确认解决后可执行“解决”;不再需要处理时可“取消”。 - 工单完成后可“关闭”,并按 1 至 5 分提交满意度和评价内容。 -![工单关闭操作](/images/manual/web/work-order-close.png) +![工单沟通与处理操作](/images/manual/work-orders-communication.png) + +![已关闭工单的服务评价入口](/images/manual/work-orders-closed-evaluation.png) 按钮是否出现取决于工单当前状态和用户权限。已完结或已取消的工单通常只能查看。 -### 处理角色与状态 - -创建人、当前处理方及仅有查看权限的用户职责不同。取消由创建人按状态执行,解决和转单由有权限的当前处理方办理,评价由创建人在完结后提交。不要因为可查看工单就认为有权处理。 - -Web 端“已解决”与小程序“待确认”对应同一处理阶段,尚未等同于“已完结”。问题仍存在时按当前端实际提供的操作反馈,保留同一工单的上下文。工单类型在两端可能采用不同的字典或显示文案,按当前表单选择,不根据数字值互相推断。 - ## 工单记录 **入口:** 左侧菜单 → **工单管理 → 工单记录**。 -![工单记录页面入口](/images/manual/web/work-orders-records-entry.png) +![工单记录页面入口](/images/manual/work-orders-records-entry.png) 该页面用于审计工单流转,可按工单编号和操作类型查询。主要字段包括操作类型、操作机构、操作用户、目标部门、目标用户、变更前状态和变更后状态。 diff --git a/docs/openapi/legacy/index.md b/docs/openapi/legacy/index.md index 0c02e1a..4f09dab 100644 --- a/docs/openapi/legacy/index.md +++ b/docs/openapi/legacy/index.md @@ -8,18 +8,18 @@ outline: deep 本文档收录历史 `/route/open/*` 路径下仍在维护的兼容接口。鉴权通过请求体 `verify` 中的 `appId`、`password` 和 `timeStamp` 完成;`sign` 为历史兼容字段,当前服务不校验。 -这些接口由 iotLCM OpenAPI 服务实现并提供,与 V3 接口同域(`apiv3.5iot.cn`),仅请求路径与鉴权方式不同。 +这些接口由 iotLCM OpenAPI 服务实现并提供,与 V3 接口同域(`api.example.com`),仅请求路径与鉴权方式不同。 ## 服务地址 ```text -https://apiv3.5iot.cn +https://api.example.com ``` 完整请求 URL: ```text -https://apiv3.5iot.cn/route/open/{接口名} +https://api.example.com/route/open/{接口名} ``` ## 统一鉴权 @@ -82,7 +82,7 @@ appId={appId}&password={password}&timeStamp={timeStamp}&key={accessKey} ```java // 服务器请求地址 -protected static String server_Ip = "https://apiv3.5iot.cn/route/open"; +protected static String server_Ip = "https://api.example.com/route/open"; // appId public static String appId = null; // 密钥密码 @@ -121,7 +121,7 @@ public static void main(String[] args) { verify.put("sign", getSign(verify, accessKey)); parmap.put("type", "iccid"); - parmap.put("cardno", "89860423123123132135"); + parmap.put("cardno", "89860400000000002135"); map.put("verify", verify); map.put("Param", parmap); diff --git a/docs/openapi/legacy/query.md b/docs/openapi/legacy/query.md index fa6889c..1549f07 100644 --- a/docs/openapi/legacy/query.md +++ b/docs/openapi/legacy/query.md @@ -27,12 +27,12 @@ POST /route/open/cardInfo { "Param": { "type": "iccid", - "cardno": "898604F4152391115474" + "cardno": "89860400000000005474" }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -70,10 +70,10 @@ POST /route/open/cardInfo "result": { "vid": "3933", "msisdn": "1441543605474", - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "imsi": "460087436015474", "imei": "", - "deptName": "山东云则", + "deptName": "示例企业", "statusId": 4, "packageId": "yd-100m-3y", "packageName": "每月100m3年", @@ -107,12 +107,12 @@ POST /route/open/simDataUsage ```json { "Param": { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -156,13 +156,13 @@ POST /route/open/simDataUsageMonthly ```json { "Param": { - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "dateTime": "202509" }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -205,12 +205,12 @@ POST /route/open/simStatus ```json { "Param": { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -253,12 +253,12 @@ POST /route/open/simSession ```json { "Param": { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -328,14 +328,14 @@ POST /route/open/queryCardInfoList { "Param": { "iccid": [ - "898604F4152391115473", - "898604F4152391115474" + "89860400000000005473", + "89860400000000005474" ] }, "verify": { "timeStamp": "1784097284347", - "password": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc", - "appId": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", + "password": "example-password", + "appId": "example-app-id", "sign": "" } } @@ -363,7 +363,7 @@ POST /route/open/queryCardInfoList "message": "", "result": [ { - "iccid": "898604F4152391115473", + "iccid": "89860400000000005473", "activateDate": "2023-05-11", "dueExpireTime": "", "imei": "", @@ -374,7 +374,7 @@ POST /route/open/queryCardInfoList "status": 4 }, { - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "activateDate": "2026-06-01", "dueExpireTime": "2029-01-31 23:59:59", "imei": "", diff --git a/docs/openapi/operator/mobile-v5/index.md b/docs/openapi/operator/mobile-v5/index.md index 74c30c1..3e828e7 100644 --- a/docs/openapi/operator/mobile-v5/index.md +++ b/docs/openapi/operator/mobile-v5/index.md @@ -1,31 +1,31 @@ --- title: 白名单转发 -description: 通过 apiv3.5iot.cn 访问中国移动物联网能力开放平台 V5 接口 +description: 通过 api.example.com 访问中国移动物联网能力开放平台 V5 接口 outline: deep --- # 白名单转发 -本目录说明如何通过 `apiv3.5iot.cn` 访问中国移动物联网能力开放平台 V5 接口。平台仅提供安全代理转发,不改变中国移动 V5 接口的请求方法、请求参数、响应结构和业务语义。 +本目录说明如何通过 `api.example.com` 访问中国移动物联网能力开放平台 V5 接口。平台仅提供安全代理转发,不改变中国移动 V5 接口的请求方法、请求参数、响应结构和业务语义。 ## 服务地址 客户侧统一使用: ```text -https://apiv3.5iot.cn +https://api.example.com ``` V5 接口的请求路径保持与中国移动官方接口一致,将官方域名替换为平台域名即可: ```text -https://apiv3.5iot.cn/v5/{官方接口路径} +https://api.example.com/v5/{官方接口路径} ``` 例如,官方接口路径为 `/v5/ec/query/sim-basic-info` 时,客户侧请求路径为: ```http -POST https://apiv3.5iot.cn/v5/ec/query/sim-basic-info +POST https://api.example.com/v5/ec/query/sim-basic-info ``` 平台会将该请求转发至: @@ -64,7 +64,7 @@ https://api.iot.10086.cn/v5/ec/query/sim-basic-info ### 单卡基本信息查询 ```http -POST https://apiv3.5iot.cn/v5/ec/query/sim-basic-info +POST https://api.example.com/v5/ec/query/sim-basic-info ``` 请求参数: @@ -82,8 +82,8 @@ POST https://apiv3.5iot.cn/v5/ec/query/sim-basic-info ```json { "transid": "113712264334542026051515200001000", - "token": "c5e1cad63e654237052be9908f989bf3515b3bdaeca904dd2e904061b65e8153", - "iccid": "898608501624D0000009" + "token": "example-access-token", + "iccid": "89860800000000000009" } ``` @@ -110,7 +110,7 @@ POST https://apiv3.5iot.cn/v5/ec/query/sim-basic-info { "msisdn": "1442206200009", "imsi": "460240406200009", - "iccid": "898608501624D0000009", + "iccid": "89860800000000000009", "activeDate": "2025-03-26 15:49:50", "openDate": "2025-03-13 16:52:10", "remark": "" diff --git a/docs/openapi/operator/shared-token/index.md b/docs/openapi/operator/shared-token/index.md index b830fa0..3bf8b0d 100644 --- a/docs/openapi/operator/shared-token/index.md +++ b/docs/openapi/operator/shared-token/index.md @@ -11,10 +11,10 @@ outline: deep ## 服务地址 ```text -https://apiv3.5iot.cn +https://api.example.com ``` -HTTP(`http://apiv3.5iot.cn`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 +HTTP(`http://api.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 ## 接口信息 @@ -35,7 +35,7 @@ POST /openapi/v3/query/operator-token ```json { - "appId": "7s9g2p5n8z1d4m6r", + "appId": "example-app-id", "chanKey": "channel_010" } ``` @@ -52,7 +52,7 @@ POST /openapi/v3/query/operator-token "data": { "chanAlias": "中国移动物联网", "chanKey": "channel_010", - "accessToken": "c5e1cad63e654237052be9908f989bf3515b3bdaeca904dd2e904061b65e8153", + "accessToken": "example-access-token", "tokenExpire": "2026-09-09 16:00:00" }, "error": null @@ -76,10 +76,10 @@ POST /openapi/v3/query/operator-token ```bash curl --request POST \ - --url https://apiv3.5iot.cn/openapi/v3/query/operator-token \ + --url https://api.example.com/openapi/v3/query/operator-token \ --header 'Content-Type: application/json' \ --data '{ - "appId": "7s9g2p5n8z1d4m6r", + "appId": "example-app-id", "chanKey": "channel_010" }' ``` diff --git a/docs/openapi/v3/common.md b/docs/openapi/v3/common.md index c1e7e1f..8d6c77d 100644 --- a/docs/openapi/v3/common.md +++ b/docs/openapi/v3/common.md @@ -9,15 +9,23 @@ outline: deep ## 服务地址 ```text -https://apiv3.5iot.cn +https://api.example.com ``` -HTTP(`http://apiv3.5iot.cn`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 +HTTP(`http://api.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 ## 鉴权 先调用 `/openapi/v3/query/token` 获取访问令牌,再在请求头中传入 `X-Access-Token`。请求体中的 `appId` 必须与凭证所属客户一致。 +## 标准入口与兼容入口 + +新接入统一使用本文的 `/openapi/v3/change/*` 路径。原 `/openapi/v3/common/*` 前缀已停止提供,调用返回 `404`,请改用 `/change` 下的对应接口。 + +批量续费使用 `/change/batch-sim-subscribe`;历史 `/change/renew` 接收 `cards[]`,允许每张卡携带套餐信息,作为兼容入口保留。两者共用续费实现。 + +批量变更达量断网使用 `/change/batch-sim-traffic-cutoff`。原 `/change/traffic-cutoff-config` 不再对外提供,请改用标准入口——两者请求参数完全一致,迁移无需改动报文体。`/query/traffic-cutoff-config` 仅查询配置。 + ## 统一返回结构 ```json @@ -63,7 +71,7 @@ POST /openapi/v3/change/sim-subscribe ```json { "appId": "CUS-202608-0001", - "iccid": "89860401785462635152", + "iccid": "89860400000000005152", "packageId": "001", "validity": 1, "remark": "客户单卡续费" @@ -95,7 +103,7 @@ POST /openapi/v3/change/sim-subscribe "data": { "orderId": "54", "orderSn": "REN20260910153546001000001", - "iccid": "89860401785462635152", + "iccid": "89860400000000005152", "planName": "中移-1G", "effectiveType": "immediate", "effectiveDate": "2026-09-10 15:35:46", @@ -116,7 +124,7 @@ POST /openapi/v3/change/sim-subscribe "data": { "orderId": "0", "orderSn": "", - "iccid": "89860401785462635152", + "iccid": "89860400000000005152", "planName": "", "effectiveType": "", "effectiveDate": "", @@ -157,7 +165,7 @@ POST /openapi/v3/change/sim-traffic-cutoff ```json { "appId": "CUS-202608-0001", - "iccid": "89860401785462635152", + "iccid": "89860400000000005152", "trafficCutoffStatus": 1, "trafficCutoffThreshold": 1024, "remark": "客户开启达量断网" @@ -186,8 +194,8 @@ POST /openapi/v3/change/sim-traffic-cutoff "message": "", "data": { "success": true, - "iccid": "89860401785462635152", - "msisdn": "14162635152", + "iccid": "89860400000000005152", + "msisdn": "14100005152", "imsi": "460045462635152", "trafficCutoffStatus": 1, "trafficCutoffThreshold": 1024, @@ -206,7 +214,7 @@ POST /openapi/v3/change/sim-traffic-cutoff "message": "", "data": { "success": false, - "iccid": "89860401785462635152", + "iccid": "89860400000000005152", "trafficCutoffStatus": 1, "trafficCutoffThreshold": 1024, "trafficCutoffThresholdUnit": "MB", @@ -249,7 +257,7 @@ POST /openapi/v3/change/batch-sim-subscribe "appId": "CUS-202608-0001", "cards": [ { - "iccid": "89860401785462635152" + "iccid": "89860400000000005152" } ], "packageId": "001", @@ -313,7 +321,7 @@ POST /openapi/v3/change/batch-sim-traffic-cutoff "appId": "CUS-202608-0001", "cards": [ { - "iccid": "89860401785462635152" + "iccid": "89860400000000005152" } ], "trafficCutoffStatus": 1, diff --git a/docs/openapi/v3/index.md b/docs/openapi/v3/index.md index f5a9e34..11e70ab 100644 --- a/docs/openapi/v3/index.md +++ b/docs/openapi/v3/index.md @@ -9,10 +9,10 @@ outline: deep ## 服务地址 ```text -https://apiv3.5iot.cn +https://api.example.com ``` -HTTP(`http://apiv3.5iot.cn`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 +HTTP(`http://api.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。 ## 统一返回结构 @@ -76,4 +76,6 @@ X-Access-Token: {accessToken} ⚠️ **不要把 `appKey`(API 账号标识)当成 `appId` 使用。** `appKey` 只用于获取 token。 ::: -权限控制:调用接口需具备对应接口资源的访问权限,权限与 API 账号所属权限组关联。未配置资源时,按当前开放策略放行。 +权限控制:调用接口需具备对应接口资源的访问权限,权限与 API 账号所属权限组关联。未登记资源、资源停用、账号未授权均拒绝访问,返回 `10014`;权限数据查询异常返回 `10016`(系统侧故障,不是授权问题)。 + +原 `/openapi/v3/common/*` 前缀已停止提供,调用返回 `404`,请使用 `/openapi/v3/change/*` 下的对应接口。 diff --git a/docs/openapi/v3/query.md b/docs/openapi/v3/query.md index 071ec99..fcdb846 100644 --- a/docs/openapi/v3/query.md +++ b/docs/openapi/v3/query.md @@ -32,7 +32,7 @@ X-Access-Token: {accessToken} ```json { "appId": "CUS-202601-0001", - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" } ``` @@ -90,9 +90,9 @@ X-Access-Token: {accessToken} "code": 0, "message": "", "data": { - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "imei": "", - "username": "山东云则", + "username": "示例企业", "location": "370100000000", "planCategory": "移动小流量", "currentPlanName": "每月100m3年", @@ -162,7 +162,7 @@ X-Access-Token: {accessToken} ```json { "appId": "CUS-202601-0001", - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" } ``` @@ -184,7 +184,7 @@ X-Access-Token: {accessToken} "code": 0, "message": "", "data": { - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "lifeCycle": 2, "lifeCycleName": "已激活" }, @@ -225,7 +225,7 @@ POST /openapi/v3/query/sim-limit ```json { "appId": "CUS-202601-0001", - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" } ``` @@ -272,7 +272,7 @@ POST /openapi/v3/query/sim-imei ```json { "appId": "CUS-202601-0001", - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" } ``` @@ -315,7 +315,7 @@ POST /openapi/v3/query/sim-usage ```json { "appId": "CUS-202601-0001", - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" } ``` @@ -371,13 +371,13 @@ X-Access-Token: {accessToken} "appId": "CUS-202601-0001", "cards": [ { - "iccid": "898604F4152391115473" + "iccid": "89860400000000005473" }, { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, { - "iccid": "8986112223600594371" + "iccid": "8986110000000004371" } ] } @@ -414,19 +414,19 @@ X-Access-Token: {accessToken} "items": [ { "matched": true, - "iccid": "898604F4152391115473", + "iccid": "89860400000000005473", "lifeCycle": 2, "lifeCycleName": "已激活" }, { "matched": true, - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "lifeCycle": 2, "lifeCycleName": "已激活" }, { "matched": true, - "iccid": "8986112223600594371", + "iccid": "8986110000000004371", "lifeCycle": 2, "lifeCycleName": "已激活" } @@ -467,13 +467,13 @@ X-Access-Token: {accessToken} "appId": "CUS-202601-0001", "cards": [ { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, { - "iccid": "898604F4152391115473" + "iccid": "89860400000000005473" }, { - "iccid": "8986112223600594371" + "iccid": "8986110000000004371" } ] } @@ -510,19 +510,19 @@ X-Access-Token: {accessToken} "items": [ { "matched": true, - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "useUnit": "MB", "useAmount": 0.875 }, { "matched": true, - "iccid": "898604F4152391115473", + "iccid": "89860400000000005473", "useUnit": "MB", "useAmount": 12.5 }, { "matched": true, - "iccid": "8986112223600594371", + "iccid": "8986110000000004371", "useUnit": "MB", "useAmount": 36.25 } @@ -563,10 +563,10 @@ X-Access-Token: {accessToken} "appId": "CUS-202601-0001", "cards": [ { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, { - "iccid": "898604F4152391115473" + "iccid": "89860400000000005473" }, { "msisdn": "1441543605474" @@ -605,12 +605,12 @@ X-Access-Token: {accessToken} "items": [ { "matched": true, - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "imei": "" }, { "matched": true, - "iccid": "898604F4152391115473", + "iccid": "89860400000000005473", "imei": "865466070817587" }, { @@ -651,13 +651,13 @@ POST /openapi/v3/query/traffic-cutoff-config "appId": "CUS-202601-0001", "cards": [ { - "iccid": "898604F4152391115474" + "iccid": "89860400000000005474" }, { - "iccid": "898604F4152391115475" + "iccid": "89860400000000005475" }, { - "iccid": "898604F4152391115476" + "iccid": "89860400000000005476" } ], "includeUsage": true @@ -699,7 +699,7 @@ POST /openapi/v3/query/traffic-cutoff-config "items": [ { "matched": true, - "iccid": "898604F4152391115474", + "iccid": "89860400000000005474", "trafficCutoffStatus": 0, "trafficCutoffStatusName": "未配置", "trafficCutoffThreshold": 0, @@ -710,7 +710,7 @@ POST /openapi/v3/query/traffic-cutoff-config }, { "matched": true, - "iccid": "898604F4152391115475", + "iccid": "89860400000000005475", "trafficCutoffStatus": 1, "trafficCutoffStatusName": "已开启", "trafficCutoffThreshold": 100, @@ -721,7 +721,7 @@ POST /openapi/v3/query/traffic-cutoff-config }, { "matched": true, - "iccid": "898604F4152391115476", + "iccid": "89860400000000005476", "trafficCutoffStatus": 2, "trafficCutoffStatusName": "已关闭", "trafficCutoffThreshold": 50, diff --git a/docs/openapi/v3/token.md b/docs/openapi/v3/token.md index 37ba917..69d8000 100644 --- a/docs/openapi/v3/token.md +++ b/docs/openapi/v3/token.md @@ -24,8 +24,8 @@ POST /openapi/v3/query/token ```json { - "appKey": "b96b84a4d70740c1bfe569a11ca62e219affe3a6", - "appSecret": "588035550bd35c0001fbcda2c4d812ebdebae9763127943f097758e029a0fdbc" + "appKey": "example-app-key", + "appSecret": "example-app-secret" } ``` @@ -50,7 +50,7 @@ POST /openapi/v3/query/token "message": "", "data": { "appId": "CUS-202601-0001", - "accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJ1IjoiZWE3ZjJiZGY5MjQyNDFkZjg3NGIwZDMzNmZkN2UzMzEiLCJleHAiOjE3ODQ3MDAyODB9.JiYK-CXdXQKKU0UNhNOqKX5Hzyk4lVMtIpunQJDxlBI" + "accessToken": "example-access-token" }, "error": null } diff --git a/docs/public/images/manual/api-credentials-entry.png b/docs/public/images/manual/api-credentials-entry.png index 4f7fc6a..71a980f 100644 Binary files a/docs/public/images/manual/api-credentials-entry.png and b/docs/public/images/manual/api-credentials-entry.png differ diff --git a/docs/public/images/manual/business-operations-batch-threshold.png b/docs/public/images/manual/business-operations-batch-threshold.png index 361e904..4cd14c9 100644 Binary files a/docs/public/images/manual/business-operations-batch-threshold.png and b/docs/public/images/manual/business-operations-batch-threshold.png differ diff --git a/docs/public/images/manual/card-detail-diagnosis-entry-attachment.png b/docs/public/images/manual/card-detail-diagnosis-entry-attachment.png index 7039a6c..407091a 100644 Binary files a/docs/public/images/manual/card-detail-diagnosis-entry-attachment.png and b/docs/public/images/manual/card-detail-diagnosis-entry-attachment.png differ diff --git a/docs/public/images/manual/card-detail-diagnosis-entry-new.png b/docs/public/images/manual/card-detail-diagnosis-entry-new.png index d1f0fca..0a8d437 100644 Binary files a/docs/public/images/manual/card-detail-diagnosis-entry-new.png and b/docs/public/images/manual/card-detail-diagnosis-entry-new.png differ diff --git a/docs/public/images/manual/card-detail-tabs.png b/docs/public/images/manual/card-detail-tabs.png index b6e766e..2ec16cb 100644 Binary files a/docs/public/images/manual/card-detail-tabs.png and b/docs/public/images/manual/card-detail-tabs.png differ diff --git a/docs/public/images/manual/card-info-common-actions.png b/docs/public/images/manual/card-info-common-actions.png index db5dd71..19fbd08 100644 Binary files a/docs/public/images/manual/card-info-common-actions.png and b/docs/public/images/manual/card-info-common-actions.png differ diff --git a/docs/public/images/manual/card-info-detail-summary.jpg b/docs/public/images/manual/card-info-detail-summary.jpg index 86a5981..6132325 100644 Binary files a/docs/public/images/manual/card-info-detail-summary.jpg and b/docs/public/images/manual/card-info-detail-summary.jpg differ diff --git a/docs/public/images/manual/card-info-main-entry.png b/docs/public/images/manual/card-info-main-entry.png index af7962b..f5d6b99 100644 Binary files a/docs/public/images/manual/card-info-main-entry.png and b/docs/public/images/manual/card-info-main-entry.png differ diff --git a/docs/public/images/manual/card-info-more-actions.png b/docs/public/images/manual/card-info-more-actions.png index 40372f1..76f2d8f 100644 Binary files a/docs/public/images/manual/card-info-more-actions.png and b/docs/public/images/manual/card-info-more-actions.png differ diff --git a/docs/public/images/manual/card-info-query-batch.jpg b/docs/public/images/manual/card-info-query-batch.jpg index 1af0033..81b24c2 100644 Binary files a/docs/public/images/manual/card-info-query-batch.jpg and b/docs/public/images/manual/card-info-query-batch.jpg differ diff --git a/docs/public/images/manual/card-info-query-filters.png b/docs/public/images/manual/card-info-query-filters.png index b348536..fff16bf 100644 Binary files a/docs/public/images/manual/card-info-query-filters.png and b/docs/public/images/manual/card-info-query-filters.png differ diff --git a/docs/public/images/manual/card-info-query-single.jpg b/docs/public/images/manual/card-info-query-single.jpg index f2f8533..87db1df 100644 Binary files a/docs/public/images/manual/card-info-query-single.jpg and b/docs/public/images/manual/card-info-query-single.jpg differ diff --git a/docs/public/images/manual/card-info-sync-actions.png b/docs/public/images/manual/card-info-sync-actions.png index fe68c24..4bcee90 100644 Binary files a/docs/public/images/manual/card-info-sync-actions.png and b/docs/public/images/manual/card-info-sync-actions.png differ diff --git a/docs/public/images/manual/card-info-view-entry.png b/docs/public/images/manual/card-info-view-entry.png index c6e92af..224d306 100644 Binary files a/docs/public/images/manual/card-info-view-entry.png and b/docs/public/images/manual/card-info-view-entry.png differ diff --git a/docs/public/images/manual/card-warning-list-actions.png b/docs/public/images/manual/card-warning-list-actions.png index 0a9c640..85de539 100644 Binary files a/docs/public/images/manual/card-warning-list-actions.png and b/docs/public/images/manual/card-warning-list-actions.png differ diff --git a/docs/public/images/manual/enterprise-customer-create-form.jpg b/docs/public/images/manual/enterprise-customer-create-form.jpg index 1bbf7ae..1366f01 100644 Binary files a/docs/public/images/manual/enterprise-customer-create-form.jpg and b/docs/public/images/manual/enterprise-customer-create-form.jpg differ diff --git a/docs/public/images/manual/enterprise-customer-delete-confirm.png b/docs/public/images/manual/enterprise-customer-delete-confirm.png index ed3c4da..d07b604 100644 Binary files a/docs/public/images/manual/enterprise-customer-delete-confirm.png and b/docs/public/images/manual/enterprise-customer-delete-confirm.png differ diff --git a/docs/public/images/manual/enterprise-customer-edit.png b/docs/public/images/manual/enterprise-customer-edit.png index 77670a3..7d6fc2f 100644 Binary files a/docs/public/images/manual/enterprise-customer-edit.png and b/docs/public/images/manual/enterprise-customer-edit.png differ diff --git a/docs/public/images/manual/enterprise-customer-entry.jpg b/docs/public/images/manual/enterprise-customer-entry.jpg index c81ee81..6175285 100644 Binary files a/docs/public/images/manual/enterprise-customer-entry.jpg and b/docs/public/images/manual/enterprise-customer-entry.jpg differ diff --git a/docs/public/images/manual/enterprise-customer-manage.png b/docs/public/images/manual/enterprise-customer-manage.png index 0028e22..d438fdb 100644 Binary files a/docs/public/images/manual/enterprise-customer-manage.png and b/docs/public/images/manual/enterprise-customer-manage.png differ diff --git a/docs/public/images/manual/enterprise-customer-reset-password.png b/docs/public/images/manual/enterprise-customer-reset-password.png index 1622b32..56de26d 100644 Binary files a/docs/public/images/manual/enterprise-customer-reset-password.png and b/docs/public/images/manual/enterprise-customer-reset-password.png differ diff --git a/docs/public/images/manual/enterprise-customer-role-match.png b/docs/public/images/manual/enterprise-customer-role-match.png new file mode 100644 index 0000000..5b2d475 Binary files /dev/null and b/docs/public/images/manual/enterprise-customer-role-match.png differ diff --git a/docs/public/images/manual/enterprise-information-entry.png b/docs/public/images/manual/enterprise-information-entry.png index f6fc357..2e9a63d 100644 Binary files a/docs/public/images/manual/enterprise-information-entry.png and b/docs/public/images/manual/enterprise-information-entry.png differ diff --git a/docs/public/images/manual/intelligent-diagnosis-result-attachment.png b/docs/public/images/manual/intelligent-diagnosis-result-attachment.png index 226afd2..75bf93f 100644 Binary files a/docs/public/images/manual/intelligent-diagnosis-result-attachment.png and b/docs/public/images/manual/intelligent-diagnosis-result-attachment.png differ diff --git a/docs/public/images/manual/intelligent-diagnosis-result.png b/docs/public/images/manual/intelligent-diagnosis-result.png index addcdc6..da890c0 100644 Binary files a/docs/public/images/manual/intelligent-diagnosis-result.png and b/docs/public/images/manual/intelligent-diagnosis-result.png differ diff --git a/docs/public/images/manual/intelligent-diagnosis-submit-button.png b/docs/public/images/manual/intelligent-diagnosis-submit-button.png index 451ab1c..6407a14 100644 Binary files a/docs/public/images/manual/intelligent-diagnosis-submit-button.png and b/docs/public/images/manual/intelligent-diagnosis-submit-button.png differ diff --git a/docs/public/images/manual/intelligent-diagnosis-submit.jpg b/docs/public/images/manual/intelligent-diagnosis-submit.jpg index 673183b..67eaaeb 100644 Binary files a/docs/public/images/manual/intelligent-diagnosis-submit.jpg and b/docs/public/images/manual/intelligent-diagnosis-submit.jpg differ diff --git a/docs/public/images/manual/inventory-batch-management.png b/docs/public/images/manual/inventory-batch-management.png index 850976f..b1a2a9c 100644 Binary files a/docs/public/images/manual/inventory-batch-management.png and b/docs/public/images/manual/inventory-batch-management.png differ diff --git a/docs/public/images/manual/inventory-card-query-filters.png b/docs/public/images/manual/inventory-card-query-filters.png index d6900ca..f10b3f8 100644 Binary files a/docs/public/images/manual/inventory-card-query-filters.png and b/docs/public/images/manual/inventory-card-query-filters.png differ diff --git a/docs/public/images/manual/inventory-inbound-batch-query.png b/docs/public/images/manual/inventory-inbound-batch-query.png index c56c27c..e97e727 100644 Binary files a/docs/public/images/manual/inventory-inbound-batch-query.png and b/docs/public/images/manual/inventory-inbound-batch-query.png differ diff --git a/docs/public/images/manual/inventory-outbound-entry.png b/docs/public/images/manual/inventory-outbound-entry.png index 78d9d81..0bcc90e 100644 Binary files a/docs/public/images/manual/inventory-outbound-entry.png and b/docs/public/images/manual/inventory-outbound-entry.png differ diff --git a/docs/public/images/manual/login-page.png b/docs/public/images/manual/login-page.png index 68d7838..792124a 100644 Binary files a/docs/public/images/manual/login-page.png and b/docs/public/images/manual/login-page.png differ diff --git a/docs/public/images/manual/mini-program-scan-photo-entry.png b/docs/public/images/manual/mini-program-scan-photo-entry.png index 9483c5b..4ed550f 100644 Binary files a/docs/public/images/manual/mini-program-scan-photo-entry.png and b/docs/public/images/manual/mini-program-scan-photo-entry.png differ diff --git a/docs/public/images/manual/mini-program/account-login-methods-v102.png b/docs/public/images/manual/mini-program/account-login-methods-v102.png index 45d00a6..03ca837 100644 Binary files a/docs/public/images/manual/mini-program/account-login-methods-v102.png and b/docs/public/images/manual/mini-program/account-login-methods-v102.png differ diff --git a/docs/public/images/manual/mini-program/account-password-login.png b/docs/public/images/manual/mini-program/account-password-login.png new file mode 100644 index 0000000..9763984 Binary files /dev/null and b/docs/public/images/manual/mini-program/account-password-login.png differ diff --git a/docs/public/images/manual/mini-program/all-devices-v102.png b/docs/public/images/manual/mini-program/all-devices-v102.png index 1d0337e..08e5951 100644 Binary files a/docs/public/images/manual/mini-program/all-devices-v102.png and b/docs/public/images/manual/mini-program/all-devices-v102.png differ diff --git a/docs/public/images/manual/mini-program/allocation-batch-logs-v102.png b/docs/public/images/manual/mini-program/allocation-batch-logs-v102.png index 9201b14..c3bcd1e 100644 Binary files a/docs/public/images/manual/mini-program/allocation-batch-logs-v102.png and b/docs/public/images/manual/mini-program/allocation-batch-logs-v102.png differ diff --git a/docs/public/images/manual/mini-program/allocation-select-cards-v102.jpg b/docs/public/images/manual/mini-program/allocation-select-cards-v102.jpg index c20ad22..554a778 100644 Binary files a/docs/public/images/manual/mini-program/allocation-select-cards-v102.jpg and b/docs/public/images/manual/mini-program/allocation-select-cards-v102.jpg differ diff --git a/docs/public/images/manual/mini-program/business-account-login-entry.png b/docs/public/images/manual/mini-program/business-account-login-entry.png index 7c46f3e..9644790 100644 Binary files a/docs/public/images/manual/mini-program/business-account-login-entry.png and b/docs/public/images/manual/mini-program/business-account-login-entry.png differ diff --git a/docs/public/images/manual/mini-program/business-device-tab.png b/docs/public/images/manual/mini-program/business-device-tab.png index a64726e..5c8879b 100644 Binary files a/docs/public/images/manual/mini-program/business-device-tab.png and b/docs/public/images/manual/mini-program/business-device-tab.png differ diff --git a/docs/public/images/manual/mini-program/business-login-methods.jpg b/docs/public/images/manual/mini-program/business-login-methods.jpg index 038dc19..6938696 100644 Binary files a/docs/public/images/manual/mini-program/business-login-methods.jpg and b/docs/public/images/manual/mini-program/business-login-methods.jpg differ diff --git a/docs/public/images/manual/mini-program/card-details-account-data-v2.jpg b/docs/public/images/manual/mini-program/card-details-account-data-v2.jpg new file mode 100644 index 0000000..8570b96 Binary files /dev/null and b/docs/public/images/manual/mini-program/card-details-account-data-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/card-details-account-data-v3.png b/docs/public/images/manual/mini-program/card-details-account-data-v3.png index d535f2e..738cdcc 100644 Binary files a/docs/public/images/manual/mini-program/card-details-account-data-v3.png and b/docs/public/images/manual/mini-program/card-details-account-data-v3.png differ diff --git a/docs/public/images/manual/mini-program/card-details-quick-actions.png b/docs/public/images/manual/mini-program/card-details-quick-actions.png index de1a1b0..89c05d8 100644 Binary files a/docs/public/images/manual/mini-program/card-details-quick-actions.png and b/docs/public/images/manual/mini-program/card-details-quick-actions.png differ diff --git a/docs/public/images/manual/mini-program/card-details-traffic.png b/docs/public/images/manual/mini-program/card-details-traffic.png index 95b390a..62ddcfd 100644 Binary files a/docs/public/images/manual/mini-program/card-details-traffic.png and b/docs/public/images/manual/mini-program/card-details-traffic.png differ diff --git a/docs/public/images/manual/mini-program/card-details-v102.png b/docs/public/images/manual/mini-program/card-details-v102.png index 15d234b..b2213a2 100644 Binary files a/docs/public/images/manual/mini-program/card-details-v102.png and b/docs/public/images/manual/mini-program/card-details-v102.png differ diff --git a/docs/public/images/manual/mini-program/card-details-v2.jpg b/docs/public/images/manual/mini-program/card-details-v2.jpg new file mode 100644 index 0000000..b5c28d0 Binary files /dev/null and b/docs/public/images/manual/mini-program/card-details-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/card-details.png b/docs/public/images/manual/mini-program/card-details.png new file mode 100644 index 0000000..4abca70 Binary files /dev/null and b/docs/public/images/manual/mini-program/card-details.png differ diff --git a/docs/public/images/manual/mini-program/card-diagnosis-updated-v102.png b/docs/public/images/manual/mini-program/card-diagnosis-updated-v102.png index 6e77799..63b5e9a 100644 Binary files a/docs/public/images/manual/mini-program/card-diagnosis-updated-v102.png and b/docs/public/images/manual/mini-program/card-diagnosis-updated-v102.png differ diff --git a/docs/public/images/manual/mini-program/card-diagnosis-v102.png b/docs/public/images/manual/mini-program/card-diagnosis-v102.png index 63968f9..236d94b 100644 Binary files a/docs/public/images/manual/mini-program/card-diagnosis-v102.png and b/docs/public/images/manual/mini-program/card-diagnosis-v102.png differ diff --git a/docs/public/images/manual/mini-program/card-diagnosis-v2.jpg b/docs/public/images/manual/mini-program/card-diagnosis-v2.jpg new file mode 100644 index 0000000..af80f61 Binary files /dev/null and b/docs/public/images/manual/mini-program/card-diagnosis-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/card-diagnosis.jpg b/docs/public/images/manual/mini-program/card-diagnosis.jpg new file mode 100644 index 0000000..bf5dd1f Binary files /dev/null and b/docs/public/images/manual/mini-program/card-diagnosis.jpg differ diff --git a/docs/public/images/manual/mini-program/devices-list-account-data-v2.jpg b/docs/public/images/manual/mini-program/devices-list-account-data-v2.jpg new file mode 100644 index 0000000..7e7a803 Binary files /dev/null and b/docs/public/images/manual/mini-program/devices-list-account-data-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/devices-list-account-data-v3.png b/docs/public/images/manual/mini-program/devices-list-account-data-v3.png index 48a0db2..65f4bdd 100644 Binary files a/docs/public/images/manual/mini-program/devices-list-account-data-v3.png and b/docs/public/images/manual/mini-program/devices-list-account-data-v3.png differ diff --git a/docs/public/images/manual/mini-program/devices-list-account-data.jpg b/docs/public/images/manual/mini-program/devices-list-account-data.jpg new file mode 100644 index 0000000..44f6adc Binary files /dev/null and b/docs/public/images/manual/mini-program/devices-list-account-data.jpg differ diff --git a/docs/public/images/manual/mini-program/devices-page.png b/docs/public/images/manual/mini-program/devices-page.png new file mode 100644 index 0000000..e7d1375 Binary files /dev/null and b/docs/public/images/manual/mini-program/devices-page.png differ diff --git a/docs/public/images/manual/mini-program/devices-search-account-data-v2.jpg b/docs/public/images/manual/mini-program/devices-search-account-data-v2.jpg new file mode 100644 index 0000000..bd2ada2 Binary files /dev/null and b/docs/public/images/manual/mini-program/devices-search-account-data-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/diagnosis-entry-from-home-v102.jpg b/docs/public/images/manual/mini-program/diagnosis-entry-from-home-v102.jpg index 4f9f5d8..861d5c4 100644 Binary files a/docs/public/images/manual/mini-program/diagnosis-entry-from-home-v102.jpg and b/docs/public/images/manual/mini-program/diagnosis-entry-from-home-v102.jpg differ diff --git a/docs/public/images/manual/mini-program/diagnosis-entry-from-home.png b/docs/public/images/manual/mini-program/diagnosis-entry-from-home.png new file mode 100644 index 0000000..b9e1a3c Binary files /dev/null and b/docs/public/images/manual/mini-program/diagnosis-entry-from-home.png differ diff --git a/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v2.png b/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v2.png new file mode 100644 index 0000000..54e145f Binary files /dev/null and b/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v2.png differ diff --git a/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v3.png b/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v3.png index 600c2ac..185b077 100644 Binary files a/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v3.png and b/docs/public/images/manual/mini-program/diagnosis-entry-from-query-v3.png differ diff --git a/docs/public/images/manual/mini-program/diagnosis-entry-from-query.jpg b/docs/public/images/manual/mini-program/diagnosis-entry-from-query.jpg new file mode 100644 index 0000000..437b5fe Binary files /dev/null and b/docs/public/images/manual/mini-program/diagnosis-entry-from-query.jpg differ diff --git a/docs/public/images/manual/mini-program/diagnosis-manual-input.jpg b/docs/public/images/manual/mini-program/diagnosis-manual-input.jpg new file mode 100644 index 0000000..db93e4f Binary files /dev/null and b/docs/public/images/manual/mini-program/diagnosis-manual-input.jpg differ diff --git a/docs/public/images/manual/mini-program/diagnosis-manual-input.png b/docs/public/images/manual/mini-program/diagnosis-manual-input.png new file mode 100644 index 0000000..ac515df Binary files /dev/null and b/docs/public/images/manual/mini-program/diagnosis-manual-input.png differ diff --git a/docs/public/images/manual/mini-program/execution-log-allocation-details.png b/docs/public/images/manual/mini-program/execution-log-allocation-details.png index 7c663dc..b11496a 100644 Binary files a/docs/public/images/manual/mini-program/execution-log-allocation-details.png and b/docs/public/images/manual/mini-program/execution-log-allocation-details.png differ diff --git a/docs/public/images/manual/mini-program/execution-log-allocation-entry.png b/docs/public/images/manual/mini-program/execution-log-allocation-entry.png index 5d75113..10e64f8 100644 Binary files a/docs/public/images/manual/mini-program/execution-log-allocation-entry.png and b/docs/public/images/manual/mini-program/execution-log-allocation-entry.png differ diff --git a/docs/public/images/manual/mini-program/execution-log-filters-v102.png b/docs/public/images/manual/mini-program/execution-log-filters-v102.png index a6f327f..45693a0 100644 Binary files a/docs/public/images/manual/mini-program/execution-log-filters-v102.png and b/docs/public/images/manual/mini-program/execution-log-filters-v102.png differ diff --git a/docs/public/images/manual/mini-program/execution-log-load-more.png b/docs/public/images/manual/mini-program/execution-log-load-more.png index ea5a983..309b2b5 100644 Binary files a/docs/public/images/manual/mini-program/execution-log-load-more.png and b/docs/public/images/manual/mini-program/execution-log-load-more.png differ diff --git a/docs/public/images/manual/mini-program/home-card-query-v102.png b/docs/public/images/manual/mini-program/home-card-query-v102.png index 31f791f..291d72c 100644 Binary files a/docs/public/images/manual/mini-program/home-card-query-v102.png and b/docs/public/images/manual/mini-program/home-card-query-v102.png differ diff --git a/docs/public/images/manual/mini-program/home-card-query.png b/docs/public/images/manual/mini-program/home-card-query.png new file mode 100644 index 0000000..3bc6863 Binary files /dev/null and b/docs/public/images/manual/mini-program/home-card-query.png differ diff --git a/docs/public/images/manual/mini-program/home-device-overview-v102.png b/docs/public/images/manual/mini-program/home-device-overview-v102.png index 5a4749f..db82ffe 100644 Binary files a/docs/public/images/manual/mini-program/home-device-overview-v102.png and b/docs/public/images/manual/mini-program/home-device-overview-v102.png differ diff --git a/docs/public/images/manual/mini-program/login-entry-home-v102.png b/docs/public/images/manual/mini-program/login-entry-home-v102.png index 06f29ab..f258b61 100644 Binary files a/docs/public/images/manual/mini-program/login-entry-home-v102.png and b/docs/public/images/manual/mini-program/login-entry-home-v102.png differ diff --git a/docs/public/images/manual/mini-program/login-entry-home.jpg b/docs/public/images/manual/mini-program/login-entry-home.jpg new file mode 100644 index 0000000..8956dc9 Binary files /dev/null and b/docs/public/images/manual/mini-program/login-entry-home.jpg differ diff --git a/docs/public/images/manual/mini-program/login-page-entry-v102.png b/docs/public/images/manual/mini-program/login-page-entry-v102.png index 923cc8e..553e005 100644 Binary files a/docs/public/images/manual/mini-program/login-page-entry-v102.png and b/docs/public/images/manual/mini-program/login-page-entry-v102.png differ diff --git a/docs/public/images/manual/mini-program/login-page-entry.jpg b/docs/public/images/manual/mini-program/login-page-entry.jpg new file mode 100644 index 0000000..b8b58b4 Binary files /dev/null and b/docs/public/images/manual/mini-program/login-page-entry.jpg differ diff --git a/docs/public/images/manual/mini-program/login-success-home-v102.png b/docs/public/images/manual/mini-program/login-success-home-v102.png index 10cd6e3..078df4b 100644 Binary files a/docs/public/images/manual/mini-program/login-success-home-v102.png and b/docs/public/images/manual/mini-program/login-success-home-v102.png differ diff --git a/docs/public/images/manual/mini-program/photo-entry-v102.png b/docs/public/images/manual/mini-program/photo-entry-v102.png index f3af1e6..2b3fcaa 100644 Binary files a/docs/public/images/manual/mini-program/photo-entry-v102.png and b/docs/public/images/manual/mini-program/photo-entry-v102.png differ diff --git a/docs/public/images/manual/mini-program/photo-entry.png b/docs/public/images/manual/mini-program/photo-entry.png new file mode 100644 index 0000000..403a6ce Binary files /dev/null and b/docs/public/images/manual/mini-program/photo-entry.png differ diff --git a/docs/public/images/manual/mini-program/public-card-details-updated-v102.png b/docs/public/images/manual/mini-program/public-card-details-updated-v102.png index 3977d01..3805b6e 100644 Binary files a/docs/public/images/manual/mini-program/public-card-details-updated-v102.png and b/docs/public/images/manual/mini-program/public-card-details-updated-v102.png differ diff --git a/docs/public/images/manual/mini-program/public-query-result-v102.png b/docs/public/images/manual/mini-program/public-query-result-v102.png index 67c7c00..854d7b5 100644 Binary files a/docs/public/images/manual/mini-program/public-query-result-v102.png and b/docs/public/images/manual/mini-program/public-query-result-v102.png differ diff --git a/docs/public/images/manual/mini-program/query-actions-updated-v102.png b/docs/public/images/manual/mini-program/query-actions-updated-v102.png index ee3e264..cbcdbfd 100644 Binary files a/docs/public/images/manual/mini-program/query-actions-updated-v102.png and b/docs/public/images/manual/mini-program/query-actions-updated-v102.png differ diff --git a/docs/public/images/manual/mini-program/query-actions-v102.png b/docs/public/images/manual/mini-program/query-actions-v102.png index ddaa0d1..b554cf9 100644 Binary files a/docs/public/images/manual/mini-program/query-actions-v102.png and b/docs/public/images/manual/mini-program/query-actions-v102.png differ diff --git a/docs/public/images/manual/mini-program/query-actions-v2.jpg b/docs/public/images/manual/mini-program/query-actions-v2.jpg new file mode 100644 index 0000000..2f09818 Binary files /dev/null and b/docs/public/images/manual/mini-program/query-actions-v2.jpg differ diff --git a/docs/public/images/manual/mini-program/query-actions.jpg b/docs/public/images/manual/mini-program/query-actions.jpg new file mode 100644 index 0000000..89b05d3 Binary files /dev/null and b/docs/public/images/manual/mini-program/query-actions.jpg differ diff --git a/docs/public/images/manual/mini-program/query-and-entry.jpg b/docs/public/images/manual/mini-program/query-and-entry.jpg new file mode 100644 index 0000000..89b05d3 Binary files /dev/null and b/docs/public/images/manual/mini-program/query-and-entry.jpg differ diff --git a/docs/public/images/manual/mini-program/query-complete-v102.png b/docs/public/images/manual/mini-program/query-complete-v102.png index 212a786..8b30f2f 100644 Binary files a/docs/public/images/manual/mini-program/query-complete-v102.png and b/docs/public/images/manual/mini-program/query-complete-v102.png differ diff --git a/docs/public/images/manual/mini-program/query-complete.png b/docs/public/images/manual/mini-program/query-complete.png new file mode 100644 index 0000000..a90cc79 Binary files /dev/null and b/docs/public/images/manual/mini-program/query-complete.png differ diff --git a/docs/public/images/manual/mini-program/query-result.png b/docs/public/images/manual/mini-program/query-result.png index 9e93ced..41976c3 100644 Binary files a/docs/public/images/manual/mini-program/query-result.png and b/docs/public/images/manual/mini-program/query-result.png differ diff --git a/docs/public/images/manual/mini-program/scan-entry-highlight.png b/docs/public/images/manual/mini-program/scan-entry-highlight.png index b92684d..6dce04f 100644 Binary files a/docs/public/images/manual/mini-program/scan-entry-highlight.png and b/docs/public/images/manual/mini-program/scan-entry-highlight.png differ diff --git a/docs/public/images/manual/mini-program/work-order-details-v102.png b/docs/public/images/manual/mini-program/work-order-details-v102.png index b31c792..7bc4cf1 100644 Binary files a/docs/public/images/manual/mini-program/work-order-details-v102.png and b/docs/public/images/manual/mini-program/work-order-details-v102.png differ diff --git a/docs/public/images/manual/mini-program/work-order-list-filters.png b/docs/public/images/manual/mini-program/work-order-list-filters.png index 94758d3..79dda20 100644 Binary files a/docs/public/images/manual/mini-program/work-order-list-filters.png and b/docs/public/images/manual/mini-program/work-order-list-filters.png differ diff --git a/docs/public/images/manual/mini-program/work-orders-submit-entry-v102.png b/docs/public/images/manual/mini-program/work-orders-submit-entry-v102.png index bbb60ee..7f2d6f9 100644 Binary files a/docs/public/images/manual/mini-program/work-orders-submit-entry-v102.png and b/docs/public/images/manual/mini-program/work-orders-submit-entry-v102.png differ diff --git a/docs/public/images/manual/role-create-add-button.png b/docs/public/images/manual/role-create-add-button.png index 7dbb043..1bc9147 100644 Binary files a/docs/public/images/manual/role-create-add-button.png and b/docs/public/images/manual/role-create-add-button.png differ diff --git a/docs/public/images/manual/role-management-entry.png b/docs/public/images/manual/role-management-entry.png index fe31ada..5298ca1 100644 Binary files a/docs/public/images/manual/role-management-entry.png and b/docs/public/images/manual/role-management-entry.png differ diff --git a/docs/public/images/manual/table-tools.png b/docs/public/images/manual/table-tools.png index 1c225c4..0a5c0b1 100644 Binary files a/docs/public/images/manual/table-tools.png and b/docs/public/images/manual/table-tools.png differ diff --git a/docs/public/images/manual/user-management-entry.png b/docs/public/images/manual/user-management-entry.png index 76d3f5b..b7a5b5c 100644 Binary files a/docs/public/images/manual/user-management-entry.png and b/docs/public/images/manual/user-management-entry.png differ diff --git a/docs/public/images/manual/web/card-info-export.png b/docs/public/images/manual/web/card-info-export.png index 898a8dc..b292d54 100644 Binary files a/docs/public/images/manual/web/card-info-export.png and b/docs/public/images/manual/web/card-info-export.png differ diff --git a/docs/public/images/manual/web/card-info-main-entry.png b/docs/public/images/manual/web/card-info-main-entry.png index af53053..668c664 100644 Binary files a/docs/public/images/manual/web/card-info-main-entry.png and b/docs/public/images/manual/web/card-info-main-entry.png differ diff --git a/docs/public/images/manual/web/card-info-query.png b/docs/public/images/manual/web/card-info-query.png index 6479ce9..a962a20 100644 Binary files a/docs/public/images/manual/web/card-info-query.png and b/docs/public/images/manual/web/card-info-query.png differ diff --git a/docs/public/images/manual/web/export-download-center.png b/docs/public/images/manual/web/export-download-center.png index bdb1393..77f1b25 100644 Binary files a/docs/public/images/manual/web/export-download-center.png and b/docs/public/images/manual/web/export-download-center.png differ diff --git a/docs/public/images/manual/web/inventory-inbound-methods.png b/docs/public/images/manual/web/inventory-inbound-methods.png index d176234..88b9c35 100644 Binary files a/docs/public/images/manual/web/inventory-inbound-methods.png and b/docs/public/images/manual/web/inventory-inbound-methods.png differ diff --git a/docs/public/images/manual/web/work-order-close.png b/docs/public/images/manual/web/work-order-close.png index 8b55192..f2adf57 100644 Binary files a/docs/public/images/manual/web/work-order-close.png and b/docs/public/images/manual/web/work-order-close.png differ diff --git a/docs/public/images/manual/web/work-order-communication-entry.png b/docs/public/images/manual/web/work-order-communication-entry.png index 6a8762e..6ca3e0f 100644 Binary files a/docs/public/images/manual/web/work-order-communication-entry.png and b/docs/public/images/manual/web/work-order-communication-entry.png differ diff --git a/docs/public/images/manual/web/work-orders-records-entry.png b/docs/public/images/manual/web/work-orders-records-entry.png index df83874..252b569 100644 Binary files a/docs/public/images/manual/web/work-orders-records-entry.png and b/docs/public/images/manual/web/work-orders-records-entry.png differ diff --git a/docs/public/images/manual/work-order-communication-entry.png b/docs/public/images/manual/work-order-communication-entry.png index d5f8551..59d5243 100644 Binary files a/docs/public/images/manual/work-order-communication-entry.png and b/docs/public/images/manual/work-order-communication-entry.png differ diff --git a/docs/public/images/manual/work-order-create-form-attachment.png b/docs/public/images/manual/work-order-create-form-attachment.png index 2331fbf..94e2754 100644 Binary files a/docs/public/images/manual/work-order-create-form-attachment.png and b/docs/public/images/manual/work-order-create-form-attachment.png differ diff --git a/docs/public/images/manual/work-orders-closed-evaluation.png b/docs/public/images/manual/work-orders-closed-evaluation.png index dd20264..0bdc8b0 100644 Binary files a/docs/public/images/manual/work-orders-closed-evaluation.png and b/docs/public/images/manual/work-orders-closed-evaluation.png differ diff --git a/docs/public/images/manual/work-orders-communication.png b/docs/public/images/manual/work-orders-communication.png index 8612f67..538625b 100644 Binary files a/docs/public/images/manual/work-orders-communication.png and b/docs/public/images/manual/work-orders-communication.png differ diff --git a/docs/public/images/manual/work-orders-records-entry.png b/docs/public/images/manual/work-orders-records-entry.png index 9785430..97d53e8 100644 Binary files a/docs/public/images/manual/work-orders-records-entry.png and b/docs/public/images/manual/work-orders-records-entry.png differ diff --git a/scripts/test-apis.ps1 b/scripts/test-apis.ps1 new file mode 100644 index 0000000..fe2baed --- /dev/null +++ b/scripts/test-apis.ps1 @@ -0,0 +1,174 @@ +$ErrorActionPreference = "Continue" +$base = $env:OPENAPI_BASE_URL +$appKey = $env:OPENAPI_APPKEY +$appSecret = $env:OPENAPI_APPSECRET +$iccid = $env:OPENAPI_ICCID +$chanKey = $env:OPENAPI_CHANKEY +if (-not $base -or -not $appKey -or -not $appSecret -or -not $iccid -or -not $chanKey) { + throw "Set OPENAPI_BASE_URL, OPENAPI_APPKEY, OPENAPI_APPSECRET, OPENAPI_ICCID and OPENAPI_CHANKEY first" +} +$tmp = Join-Path $PSScriptRoot ".apitest-output" + +if (-not (Test-Path $tmp)) { New-Item -ItemType Directory -Path $tmp | Out-Null } + +# Try a quick connectivity check +try { + $ping = Invoke-WebRequest -Uri "$base/" -Method GET -TimeoutSec 8 -UseBasicParsing -ErrorAction Stop + Write-Host "[ping] status=$($ping.StatusCode)" +} catch { + Write-Host "[ping] FAIL: $($_.Exception.Message)" +} + +$ts = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds().ToString() + +function Call-Api { + param( + [string]$Label, + [string]$Url, + [string]$Method = "POST", + [hashtable]$Headers = @{}, + [string]$BodyJson = $null, + [int]$TimeoutSec = 15 + ) + Write-Host "" + Write-Host "==== $Label ====" + Write-Host "$Method $Url" + if ($Headers.Count -gt 0) { Write-Host ("Headers: " + (($Headers.GetEnumerator() | ForEach-Object { "$($_.Key): " }) -join "; ")) } + if ($null -ne $BodyJson) { + $logBody = $BodyJson | ConvertFrom-Json + if ($logBody.verify) { + $logBody.verify.password = "" + $logBody.verify.sign = "" + } + Write-Host ("Body: " + ($logBody | ConvertTo-Json -Depth 10 -Compress)) + } + try { + $params = @{ + Uri = $Url + Method = $Method + TimeoutSec = $TimeoutSec + UseBasicParsing = $true + } + if ($Headers.Count -gt 0) { $params.Headers = $Headers } + if ($null -ne $BodyJson) { + $params.ContentType = "application/json; charset=utf-8" + $params.Body = $BodyJson + } + $resp = Invoke-WebRequest @params -ErrorAction Stop + $code = $resp.StatusCode + $text = $resp.Content + Write-Host "HTTP $code" + if ($text.Length -gt 4000) { + Write-Host $text.Substring(0, 4000) + $fn = Join-Path $tmp ("$Label".Replace('\','_').Replace('/','_') + ".txt") + Set-Content -LiteralPath $fn -Value $text -Encoding utf8NoBOM + Write-Host "(truncated, full saved to $fn)" + } else { + Write-Host $text + } + } catch { + $msg = $_.Exception.Message + Write-Host "ERROR: $msg" + if ($_.Exception.Response) { + $sr = New-Object System.IO.StreamReader($_.Exception.Response.GetResponseStream()) + $body = $sr.ReadToEnd() + Write-Host "BODY: $body" + } + } +} + +# ===== V3 ===== +# 3.2 token (obtain once, reuse for the rest of V3) +$tokenJson = $null +try { + $tokenBody = @{ appKey=$appKey; appSecret=$appSecret } | ConvertTo-Json -Compress + $resp = Invoke-WebRequest -Uri "$base/openapi/v3/query/token" -Method POST -ContentType "application/json; charset=utf-8" -Body $tokenBody -TimeoutSec 12 -UseBasicParsing -ErrorAction Stop + $tokenJson = $resp.Content + Write-Host "==== V3-token ====" + Write-Host "POST $base/openapi/v3/query/token" + Write-Host 'Body: ' + Write-Host "HTTP $($resp.StatusCode)" + Write-Host 'Token response received (token redacted)' +} catch { + Write-Host "==== V3-token ====" + Write-Host "POST $base/openapi/v3/query/token" + Write-Host "token fetch FAIL: $($_.Exception.Message)" + if ($_.Exception.Response) { + $sr = New-Object System.IO.StreamReader($_.Exception.Response.GetResponseStream()) + Write-Host "token err body: $($sr.ReadToEnd())" + } +} + +$accessToken = $null +$appId = $null +if ($tokenJson) { + try { + $obj = $tokenJson | ConvertFrom-Json + $accessToken = $obj.data.accessToken + $appId = $obj.data.appId + Write-Host "Got accessToken (len=$($accessToken.Length)), appId=" + } catch { + Write-Host "token parse error: $($_.Exception.Message)" + } +} + +if ($accessToken) { + $authHeader = @{ "X-Access-Token" = $accessToken } + + # 3.3 access-token (carrier) + $b = @{ appId=$appId; chanKey=$chanKey } | ConvertTo-Json -Compress + Call-Api -Label "V3-access-token" -Url "$base/openapi/v3/query/access-token" -Headers $authHeader -BodyJson $b + + # 3.4 sim-info + $b = @{ appId=$appId; iccid=$iccid } | ConvertTo-Json -Compress + Call-Api -Label "V3-sim-info" -Url "$base/openapi/v3/query/sim-info" -Headers $authHeader -BodyJson $b + + # 3.5 sim-limit + $b = @{ appId=$appId; iccid=$iccid } | ConvertTo-Json -Compress + Call-Api -Label "V3-sim-limit" -Url "$base/openapi/v3/query/sim-limit" -Headers $authHeader -BodyJson $b + + # 3.6 sim-imei + $b = @{ appId=$appId; iccid=$iccid } | ConvertTo-Json -Compress + Call-Api -Label "V3-sim-imei" -Url "$base/openapi/v3/query/sim-imei" -Headers $authHeader -BodyJson $b + + # 3.7 sim-usage + $b = @{ appId=$appId; iccid=$iccid } | ConvertTo-Json -Compress + Call-Api -Label "V3-sim-usage" -Url "$base/openapi/v3/query/sim-usage" -Headers $authHeader -BodyJson $b +} else { + Write-Host "[skip] no accessToken; skipping V3 authenticated endpoints" +} + +# ===== V1+V2 ===== +$verify = @{ + timeStamp = $ts + password = $appSecret + appId = $appKey + sign = "" +} + +# 3.1 cardInfo +$b = @{ Param = @{ type="iccid"; cardno=$iccid }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-cardInfo" -Url "$base/route/open/cardInfo" -BodyJson $b + +# 3.2 simDataUsage +$b = @{ Param = @{ iccid=$iccid }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-simDataUsage" -Url "$base/route/open/simDataUsage" -BodyJson $b + +# 3.3 simDataUsageMonthly +$b = @{ Param = @{ iccid=$iccid; dateTime="2025-09-14" }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-simDataUsageMonthly" -Url "$base/route/open/simDataUsageMonthly" -BodyJson $b + +# 3.4 simStatus +$b = @{ Param = @{ iccid=$iccid }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-simStatus" -Url "$base/route/open/simStatus" -BodyJson $b + +# 3.5 simSession +$b = @{ Param = @{ iccid=$iccid }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-simSession" -Url "$base/route/open/simSession" -BodyJson $b + +# 3.6 queryCardInfoList +$b = @{ Param = @{ iccid = @($iccid) }; verify = $verify } | ConvertTo-Json -Depth 6 -Compress +Call-Api -Label "V1V2-queryCardInfoList" -Url "$base/route/open/queryCardInfoList" -BodyJson $b + +Write-Host "" +Write-Host "==== DONE ===="