chore: 初始开源发布

This commit is contained in:
MiFaZhan
2026-10-22 15:16:43 +08:00
commit 92f239fcc4
114 changed files with 8018 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
---
layout: home
hero:
name: iotLCM
text: 文档中心
tagline: iotLCM 平台文档与接口规范。
actions:
- theme: brand
text: 使用手册
link: /manual/
- theme: alt
text: OpenAPI 接口文档
link: /openapi/
- theme: alt
text: 共享 Token 接口文档
link: /openapi/operator/
features:
- title: 使用手册
details: 按使用端提供 Web 管理平台与小程序端手册,覆盖查卡、诊断、业务管理和账号服务。
- title: OpenAPI 接口文档
details: 客户开放接口的鉴权方式、请求参数、响应结构、调用示例与兼容接口说明。
- title: 共享 Token 接口文档
details: 共享 Token 获取与白名单转发说明。
---
+23
View File
@@ -0,0 +1,23 @@
---
layout: home
hero:
name: iotLCM 使用手册
text: 操作指南
tagline: 按使用端查看卡片查询、业务管理与移动服务说明。
actions:
- theme: brand
text: Web端手册
link: /manual/web/
- theme: alt
text: 小程序端手册
link: /manual/mini-program/
features:
- title: 版本选型指引
details: 使用浏览器登录企业管理后台,请阅读 Web 端手册;使用 IOTLCM 物联卡用户服务小程序,请阅读小程序端手册。不同端的功能入口、权限和页面结构有所区别。
- title: Web端
details: 面向企业管理员和业务人员,覆盖首页、卡信息、智能诊断、业务受理、企业管理、工单、API 凭证与执行日志。
- title: 小程序端
details: 对应 iotlcm-app v1.0.1,覆盖首页公开查卡、扫码与拍照识别、卡片详情、卡片排查和账号密码登录;办理、绑定、微信登录及注册等功能暂未开放。
---
+39
View File
@@ -0,0 +1,39 @@
# 卡片详情
从首页查询结果点击“详情”后进入卡片详情页。首页会以公开来源打开详情,因此未登录或公开来源都会使用受限展示模式。
## 公开详情展示内容
公开模式包含两组信息:
- 基础信息:卡号、卡状态、在线状态;
- 流量信息:已用流量。
![卡片详情中的基础信息和流量信息](/images/manual/mini-program/card-details-traffic.png)
卡号可能已经脱敏,页面显示什么就以什么为准。点击或长按卡号行可以复制当前显示值。
公开模式不会展示完整 IMSI、IMEI、备注、总流量、剩余流量、会话信息、APN、IPv4、IPv6 和服务状态,也不会提供重启、开通数据、停用数据等操作按钮。
## 登录后详情
登录并通过权限校验后,设备列表和卡片详情可以展示更完整的账号范围数据,例如 MSISDN、ICCID、IMSI、设备 IMEI、套餐流量和同步时间。字段是否出现取决于接口返回值和账号权限。
<div style="display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: start;">
<figure style="margin: 0;">
<img src="/images/manual/mini-program/devices-list-account-data-v2.jpg" alt="登录后的设备列表和账号范围数据" style="display: block; width: 100%; height: auto;">
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/devices-search-account-data-v2.jpg" alt="全部设备中的账号范围数据" style="display: block; width: 100%; height: auto;">
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/card-details-account-data-v2.jpg" alt="登录后的卡片详情账号范围数据" style="display: block; width: 100%; height: auto;">
</figure>
</div>
## 查不到详情时
- 确认查询号码没有空格或遗漏字符;
- 从首页重新查询后再点击“详情”;
- 若页面提示当前账号没有权限,请使用公开查询,或联系账号管理员确认数据范围。
+61
View File
@@ -0,0 +1,61 @@
# 卡片排查
卡片排查用于根据卡片状态、在线状态、流量和设备信息整理处理方向。
## 进入排查
可以从以下位置进入:
1. 首页点击“卡片排查”,手动输入卡号;
2. 首页查询成功后点击“卡片排查”,系统会带入当前查询值;
![首页查询结果中的卡片排查入口](/images/manual/mini-program/diagnosis-entry-from-query-v2.png)
3. 直接打开卡片排查页,在输入框填写 `ICCID`、`MSISDN` 或 `IMSI`。
<div style="display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start;">
<figure style="margin: 0;">
<img src="/images/manual/mini-program/diagnosis-entry-from-home.png" alt="从首页常用入口进入卡片排查" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">首页卡片排查入口</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/diagnosis-manual-input.jpg" alt="卡片排查页手动输入卡号" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">输入卡号开始排查</figcaption>
</figure>
</div>
点击“开始排查”提交。排查过程中不要连续重复点击。
## 结果摘要
普通用户或未登录用户通常可以看到:
- 卡片状态;
- 在线状态;
- 已用流量或流量状态;
管理员账号可能看到更多卡片、数据服务、停机冻结和限制策略信息。页面会按实际接口返回值隐藏没有数据的字段。
## 流量使用分析
当前页面提供“近1个月、近3个月、近6个月”三个周期。**`v1.0.1` 默认只对顶层管理员显示流量趋势模块;其他账号即使登录,也不保证看到该模块。**
有数据时会显示周期总用量、日均或月均用量、单期峰值和趋势图;没有数据时显示“暂无历史流量数据”。趋势只用于辅助排查,不等同于实时计费结果。
## 排查结果的处理方向
| 结果 | 建议核对 |
| --- | --- |
| 在线 | 继续核对设备业务表现和应用侧请求 |
| 离线 | 检查设备供电、开机状态、信号、天线和 APN |
| 未查询到会话 | 稍后重试,并确认设备是否产生数据会话;不等同于卡已销户 |
| 流量不足或用量异常 | 核对套餐流量、设备上报和业务使用情况 |
| 机卡分离 | 核对卡片与设备的使用关系 |
| 区域受限 | 核对业务限制区域、订购状态和触发状态 |
| 停机或冻结 | 根据页面提示联系业务管理员确认 |
## 当前版本限制
排查页的“重启卡”“开通数据服务”“停用数据服务”按钮只有在登录且账号拥有对应权限时才会出现。业务办理路由、套餐、预警、订单和工单在 `v1.0.1` 中暂未开放。
排查接口或流量接口提示请求过于频繁时,请等待一段时间后再试,不要连续提交。
+45
View File
@@ -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,再稍后重新排查。“未查询到会话”只表示当前没有查到数据会话,不等同于卡片已销户。
## 账号密码登录有什么限制?
当前版本只开放已有账号的账号密码登录;微信登录和注册账号未开放。忘记密码页面会提示短信服务接入后开放,请联系管理员或客服处理账号问题。
## 排查结果是否是最终结论?
不是。排查结果仅用于辅助判断,最终以运营商和业务系统状态为准。请勿在查询、排查和反馈内容中提交身份证号、银行卡号或其他无关敏感信息。
+67
View File
@@ -0,0 +1,67 @@
# 首页查卡
首页是当前版本的主要使用入口。查询不要求登录,支持手动输入、微信小程序扫码和图片识别三种录入方式。
## 登录入口
首页和登录页都保留“未登录也可查卡”入口。需要查看账号名下设备时,再通过账号密码登录;微信登录和注册账号暂未开放。
## 手动查询
1. 在“卡片查询”输入框输入完整的 `ICCID`、`MSISDN`、`IMSI` 或 `IMEI`。
2. 点击“查询”,等待查询完成。
![点击查询并等待查询完成](/images/manual/mini-program/query-complete.png)
3. 查询成功后,结果区域显示卡号、使用流量和在线状态。
4. 点击“详情”查看公开卡片详情,或点击“卡片排查”查看状态摘要。
<div style="display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: start;">
<figure style="margin: 0;">
<img src="/images/manual/mini-program/query-actions-v2.jpg" alt="查询结果中的详情和卡片排查入口" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">详情与卡片排查入口</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/card-details-v2.jpg" alt="卡片详情页展示的公开字段" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">卡片详情</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/card-diagnosis-v2.jpg" alt="卡片排查页展示的状态摘要" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">卡片排查</figcaption>
</figure>
</div>
输入内容请去除前后空格并核对末位字符。查询失败时先检查输入值,再重新提交。
## 扫码查询
1. 点击“扫码”。
![首页扫码入口](/images/manual/mini-program/scan-entry-highlight.png)
2. 将卡片条码或二维码放入扫描区域。
3. 扫描成功后,识别出的内容会自动填入输入框并立即发起查询。
光线不足、反光或距离不合适时可能扫描失败;此时请调整卡片位置,或改用手动输入。
## 拍照识别 ICCID
1. 点击“拍照”。
![首页拍照入口](/images/manual/mini-program/photo-entry.png)
2. 从相机或相册选择一张卡片图片。
3. 确保图片中只有一张卡片,并且 ICCID 完整、清晰、无反光。
4. 识别成功后,系统会将 ICCID 填入输入框并继续查询。
常见提示及处理方式:
| 提示 | 处理方式 |
| --- | --- |
| 图片中存在多个可能的 ICCID | 重新拍摄单张卡片 |
| 未能识别清晰的 ICCID | 保持卡片平整、对焦清楚后重拍 |
| 图片识别超时或请求过于频繁 | 等待后重试,或使用扫码、手动输入 |
## 首页结果
首页结果中的“剩余流量”按“剩余 / 套餐总量”展示;在线状态可能为在线、离线、未知或未查询到会话。结果区域的查询和排查说明均提示:内容仅供参考,以业务系统结果为准。
+99
View File
@@ -0,0 +1,99 @@
---
title: 小程序端使用手册
---
# 小程序端使用手册
本文介绍 iotLCM 平台当前已开放的页面及操作功能,具体可用内容以账号实际权限为准。当前版本以**公开查卡和状态排查**为主,业务办理入口暂未开放。
<div class="mini-program-entry">
<figure class="mini-program-entry__qr">
<img src="/images/manual/mini-program/mini-program-code.jpg" alt="扫码进入 iotLCM 小程序">
<figcaption>扫码进入 iotLCM 小程序</figcaption>
</figure>
<p class="mini-program-entry__hint">使用微信扫一扫即可打开小程序,体验公开查卡和卡片状态排查功能。</p>
</div>
## 版本范围
| 页面或功能 | 当前状态 | 说明 |
| --- | --- | --- |
| 首页 | 已开放 | 手动输入、扫码、拍照识别并查询卡片 |
| 卡片详情 | 已开放 | 公开查询只展示卡号、卡状态、在线状态和已用流量 |
| 卡片排查 | 已开放 | 输入卡号查看状态摘要;流量趋势仅对管理员账号显示 |
| 账号密码登录 | 已开放 | 企业、代理商和终端用户使用已有账号登录 |
| 设备列表 | 登录后使用 | 显示当前账号权限范围内的卡片;未登录不要用此页进行公开查卡 |
| 办理、订单、工单、预警、开停数据等 | 暂未开放 | 入口或路由会提示“当前版本暂未开放此功能” |
| 微信登录、注册、绑定卡片、卡片更多操作 | 暂未开放 | 本版本不提供这些入口 |
## 推荐流程
1. 打开小程序首页,在“卡片查询”中输入 ICCID、MSISDN、IMSI 或 IMEI。
![小程序首页卡片查询输入框](/images/manual/mini-program/home-card-query.png)
2. 也可以点击“扫码”读取卡片条码,或点击“拍照”识别卡片上的 ICCID。
![首页扫码和拍照入口](/images/manual/mini-program-scan-photo-entry.png)
3. 点击“查询”,查看卡号、卡状态、使用流量和在线状态。
![点击查询查看卡号、卡状态、使用流量和在线状态](/images/manual/mini-program/query-result.png)
4. 需要查看公开字段时点击“详情”;需要判断异常原因时点击“卡片排查”。
<div style="display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: start;">
<figure style="margin: 0;">
<img src="/images/manual/mini-program/query-actions-v2.jpg" alt="首页查询结果中的详情和卡片排查入口" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">首页入口</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/card-details-v2.jpg" alt="卡片详情页展示的公开字段" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">卡片详情</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/card-diagnosis-v2.jpg" alt="卡片排查页展示的状态摘要" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">卡片排查</figcaption>
</figure>
</div>
5. 如果需要停复机、开通数据服务、套餐办理、预警或工单,请等待后续版本开放。
## 账号密码登录
1. 在需要账号数据的页面进入登录页,或在首页点击登录入口。
<div style="display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start;">
<figure style="margin: 0;">
<img src="/images/manual/mini-program/login-entry-home.jpg" alt="从首页底部的我的入口进入登录" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">首页“我的”入口</figcaption>
</figure>
<figure style="margin: 0;">
<img src="/images/manual/mini-program/login-page-entry.jpg" alt="登录页中的账号密码登录入口" style="display: block; width: 100%; height: auto;">
<figcaption style="text-align: center;">账号密码登录</figcaption>
</figure>
</div>
2. 输入已有账号和密码,完成页面要求的安全验证后点击“登录”。
![账号密码登录表单](/images/manual/mini-program/account-password-login.png)
3. 如果同一账号匹配多个登录身份,按页面提示选择本次要进入的账号。
4. 登录成功后返回原页面;设备页会按账号权限加载卡片数据。
![登录后设备页按账号权限加载卡片数据](/images/manual/mini-program/devices-page.png)
当前版本不开放注册和微信登录。“忘记密码”页面会提示短信服务接入后开放,无法登录时请联系账号管理员或客服。
## 使用边界
- 公开查询和排查结果仅供辅助判断,最终以运营商和业务系统状态为准。
- 未登录查询不会展示完整 IMSI、IMEI、APN、IP、套餐内部信息等受限字段。
- 请勿在查询、排查或反馈内容中提交身份证号、银行卡号等无关敏感信息;密码只应填写在登录表单中。
## 阅读指引
- [首页查卡、扫码与拍照](./home)
- [卡片详情](./devices)
- [卡片排查](./diagnosis)
- [常见问题](./faq)
+53
View File
@@ -0,0 +1,53 @@
# API 凭证与执行日志
## 我的 API 凭证
**入口:** 左侧菜单 → **我的 API 凭证**。
![我的 API 凭证页面](/images/manual/api-credentials-entry.png)
页面显示本企业的企业 ID、企业名称、`appKey`(API 账号标识)和 `appSecret`(API 密钥),并提供复制按钮。接口鉴权和请求格式请配合 [OpenAPI 接口文档](/openapi/) 使用。
::: warning appKey ≠ appId
- **`appKey`** 和 **`appSecret`** 仅用于调用 `/openapi/v3/query/token` 换取 token
- **`appId`**(客户组织编码,如 `CUS-202601-0001`)由 token 接口返回,调用其他接口时在请求体中传入
- 不要把 `appKey` 当作 `appId` 使用,两者是不同的概念
:::
### 安全要求
- `appSecret` 等同接口密码,只能提供给获准的开发和运维人员。
- 不要把凭证写入前端代码、公开仓库、工单正文、聊天截图或日志。
- 服务端应通过环境变量或密钥管理服务保存凭证。
- 不同环境不要共用同一份配置文件。
- 怀疑泄露时立即停止相关调用并联系平台支持更换凭证。
复制后粘贴到配置前,检查是否带入多余空格或换行。接口返回鉴权失败时,先核对企业对应的 appId 与 appSecret 是否配套,再检查签名、时间戳和请求地址。
## 执行日志(暂未开放)
**入口:** 左侧菜单 → **执行日志**。
批量续费、套餐变更、加油包、重启、停复机、划拨、达量断网等任务提交后,均应通过执行日志确认最终结果。
### 查询批次
可按关键字、批次编号、批次类型、异步处理状态和创建时间查询。列表显示:
- 批次编号和批次类型。
- 来源方式,如 Excel 或批量输入。
- 运行结果和异步状态。
- 总数量、开始时间和结束时间。
点击批次编号可查看逐卡明细,包括行号、ICCID、MSISDN、IMSI、明细状态和异常原因。点击“查看”可查看批次概要、失败原因、源文件、结果文件和处理时间。
### 处理失败任务
1. 用提交时记录的批次号查询。
2. 确认批次已结束,避免把“处理中”误判为失败。
3. 点击批次号查看失败卡及异常原因。
4. 下载结果文件,修正卡号、状态、套餐或模板数据。
5. 只重提失败且可修正的卡,不要整批重复提交。
6. 无法处理的上游错误通过工单反馈,并附批次号和失败原因。
常见失败原因包括卡号不属于当前企业、卡状态不允许办理、套餐不匹配、余额不足、模板字段错误、上游超时或重复业务仍在处理中。
+99
View File
@@ -0,0 +1,99 @@
# 业务受理与达量断网
## 业务受理入口
左侧菜单 → **通讯管理 → 业务受理**。
![业务受理入口](/images/manual/business-acceptance-entry.png)
页面按“套餐及数据”“生命周期”“预警中心”展示业务入口。每个入口都有独立按钮权限,未授权的入口不会显示。
可能出现的业务包括:
| 分类 | 业务 | 用途 |
| --- | --- | --- |
| 套餐及数据 | 续费套餐 | 延长当前套餐或购买可续费套餐 |
| 套餐及数据 | 变更套餐 | 将卡切换到其他可购套餐 |
| 套餐及数据 | 加油包订购 | 为单卡或流量池购买叠加包 |
| 套餐及数据 | 开停数据 | 开启或关闭数据通信服务 |
| 套餐及数据 | 达量断网 | 设置达到指定流量后断网 |
| 生命周期 | 重启 | 向运营商提交卡重启 |
| 生命周期 | 自主停机/自主复机 | 暂停或恢复卡服务 |
| 生命周期 | 转销户 | 将卡转为销户状态 |
| 生命周期 | 划拨 | 将卡划拨给目标下级企业 |
| 生命周期 | 退订 | 退订符合条件的套餐或业务 |
| 预警中心 | 流量预警配置 | 配置单卡流量阈值预警 |
| 预警中心 | 流量池预警配置 | 配置流量池阈值预警 |
## 通用办理方式(部分开放)
不同业务会提供以下一种或多种数据来源:
- **Excel:** 先下载页面提供的最新模板,按模板填写后上传 `.xls` 或 `.xlsx` 文件。不要修改表头或合并单元格。
- **批量输入:** 通常每行一个 ICCID;部分业务支持每行填写 `ICCID MSISDN IMSI`。
- **连续号段:** 填写 ICCID、MSISDN 或 IMSI 的起始值和结束值,适合连续卡段。
标准操作流程:
1. 选择业务入口和数据来源。
2. 上传文件或输入卡号,提交预处理。
3. 记录系统返回的批次号。
4. 核对有效数量、失败数量、目标套餐、购买时长、生效方式、金额和余额等信息。
5. 确认无误后提交正式任务。
6. 前往“执行日志”查询批次最终状态和失败原因。
::: warning 提交前确认
批量任务可能影响通信、套餐、费用或卡生命周期。提交前应抽查卡号、目标企业、套餐编码、阈值、生效方式和付款方式。不要重复提交仍在处理中的批次。
:::
## 续费、变更与加油包(暂未开放)
### 续费套餐
支持 Excel 或批量输入。预处理后选择可续费套餐、续费年限、续费日期和付款方式。余额支付时必须确认余额充足;线下支付时按页面要求完成线下确认。
### 变更套餐
支持 Excel、批量输入和连续号段。预处理后选择新套餐、购买时长、赠送时长和“立即生效/次月生效”。变更前重点确认生效方式,避免影响当前套餐剩余资源。
### 加油包订购
可选择“单卡加油包”或“流量池加油包”。单卡 Excel 需填写 ICCID 和加油包套餐编码;流量池 Excel 需填写流量池编码和套餐编码。预处理后核对数量、单价、总金额、付款账户和余额。
## 生命周期和数据服务(部分开放)
重启、自主停机、自主复机、开停数据、转销户和退订通常支持 Excel 或批量输入。生命周期任务提交后不会立即在列表全部完成,应通过批次号在执行日志中跟踪。
- 重启适合设备长时间不在线且卡状态正常的场景。
- 自主停机和关闭数据会中断通信,恢复前请确认业务窗口。
- 转销户通常不可逆或需要人工处理,提交前必须复核卡号。
- 划拨前确认目标企业,任务完成后卡的数据归属和可见范围会变化。
## 达量断网批量配置(部分开放)
在“业务受理”点击“达量断网”,可通过 Excel、批量输入或连续号段批量配置:
1. 选择开启或关闭。
2. 开启时填写阈值,单位为 MB,阈值必须大于 0,最多保留 3 位小数。
3. 填写卡号或上传模板后提交。
4. 记录批次号并在执行日志中检查结果。
关闭配置表示不再按该阈值触发断网,不等同于立即恢复所有因其他原因停机的卡。
## 达量断网页面(部分开放)
**入口:** 左侧菜单 → **通讯管理 → 达量断网**。
![达量断网入口](/images/manual/data-usage-cutoff-entry.png)
该页面用于查看和维护已有配置:
- 可按 MSISDN、ICCID、IMSI、IMEI 或配置状态查询。
- 列表显示通道、所属公司、当前套餐、配置状态和阈值。
- 有编辑权限时,可修改开启/关闭状态及阈值。
- 有删除权限时,可删除该卡的达量断网配置。
- 有导出权限时,可按当前条件导出配置。
批量新增或修改建议从“业务受理 → 达量断网”完成;单卡核对和调整可在本页面完成。
![业务受理中的达量断网批量输入](/images/manual/business-operations-batch-threshold.png)
+84
View File
@@ -0,0 +1,84 @@
# 卡信息
## 页面入口
左侧菜单 → **通讯管理 → 卡信息**。
该页面是日常查卡的主要入口,可查询卡的身份标识、运营商状态、套餐、流量、归属企业、通道和到期情况。
![日常查卡页面入口](/images/manual/card-info-main-entry.png)
## 查询卡片
常用查询条件如下:
| 条件 | 用法 |
| --- | --- |
| 卡号 | 输入 MSISDN、ICCID 或 IMSI 任一标识 |
| 卡状态 | 按运营商卡状态筛选 |
| IMEI | 按终端设备号查询 |
| 所属通道 | 按运营商或接入通道筛选,支持搜索 |
| 时间类型、时间范围 | 按所选业务时间区间筛选 |
| 查询条件、起始号段、结束号段 | 选择号段类型,并按起止号段范围筛选卡片 |
| 备注信息 | 按备注内容筛选 |
| 维度、维度状态、维度值 | 按指定业务维度进行组合筛选 |
| 排序值、排序类型 | 指定排序字段及升降序 |
查询不到卡时,先确认使用的是完整卡号,再清空状态、时间和通道等附加条件重试。
## 列表信息
| 字段 | 说明 |
| --- | --- |
| ICCID | SIM 卡芯片的唯一识别码,业务办理和故障定位最常用 |
| MSISDN | 运营商分配的移动号码,也常称卡号 |
| IMSI | SIM 卡在移动网络中的用户识别码 |
| 卡状态 | 运营商侧当前生命周期状态 |
| 类型 | “单卡”表示独立计量,“池卡”表示参与流量池共享 |
| 通道 | 卡接入的运营商或上游通道 |
| 所属公司 | 当前卡归属的企业 |
| 套餐 | 当前主套餐名称 |
| 总流量、已用流量、剩余流量 | 当前套餐流量,单位为 MB |
| 到期时间 | 当前套餐预计到期日期 |
| 出库时间 | 卡片分配出库日期 |
| 备注信息 | 企业维护的业务备注 |
列表中的流量不是实时会话流量。需要最新结果时,执行“同步用量”后再刷新。
## 查看卡详情
点击目标卡右侧“查看”。详情上方展示:MSISDN、ICCID、IMSI、IMEI、卡状态、网络类型、流量同步时间、套餐总流量、到期时间、出库时间、当前套餐、已用流量、剩余流量、所属企业、所属通道、达量断网配置状态、限额、备注。
![在卡信息列表点击“查看”打开卡详情](/images/manual/card-info-view-entry.png)
详情下方包含以下页签:
- **会话信息:** APN、IPv4、IPv6、接入方式、在线状态、会话建立时间、实时 IMEI、开关机状态等。点击“刷新”重新查询;“未查询到会话”通常表示设备当前未建立数据会话,并不等同于卡已销户。
- **归属信息:** 当前套餐编号、套餐名称、所属企业和所属通道(所属通道不予展示)。
- **主套餐:** 订单编号、套餐名称、套餐类型、订购状态、生效时间和到期时间。
- **叠加套餐:** 加油包名称、总流量、支付方式和交易时间。
- **变更历史:** 变更前后套餐、订购状态和办理时间。
![卡详情页签](/images/manual/card-detail-tabs.png)
## 常用操作
页面上的操作按钮以账号权限为准。
- **备注:** 编辑本企业对卡片的业务备注,便于按项目、设备或使用场景检索。
- **同步用量:** 向上游请求最新用量。同步成功后查看“流量同步时间”是否更新。
- **同步状态:** 向上游请求最新运营商卡状态。
- **导出:** 按当前筛选条件导出卡信息。
- **诊断:** 在卡详情点击“诊断”,系统会携带当前 ICCID 跳转到智能诊断并自动查询。
“批量操作”当前仍显示为待接入功能。
![卡信息列表更多操作菜单](/images/manual/card-info-more-actions.png)
## 查看数据异常时
1. 先核对卡号和所属企业。
2. 查看卡状态、套餐到期时间及流量同步时间。
3. 分别执行“同步状态”和“同步用量”。
4. 打开详情刷新会话信息。
5. 进入[智能诊断](./intelligent-diagnosis)做完整排查。
6. 仍有异常时创建工单,并提供 ICCID、异常时间和已完成的操作。
+102
View File
@@ -0,0 +1,102 @@
# 企业、用户与角色
## 企业信息
**入口:** 左侧菜单 → **企业管理 → 企业信息**。
![企业信息页面入口](/images/manual/enterprise-information-entry.png)
该页面用于维护当前企业资料,分为单位信息和实名认证信息。
单位信息通常包括联系电话、邮箱、统一社会信用代码、组织所在地和详细地址。实名认证信息包括单位全称、行业、法人姓名、法人身份证号、单位类型、成立时间、开户行名称和开户行账号。
单位信息如需修改请联系管理员。
## 角色管理
**入口:** 左侧菜单 → **企业管理 → 角色管理**。
![角色管理页面入口](/images/manual/role-management-entry.png)
角色用于把菜单和按钮权限批量授予用户。列表可按角色名称、权限字符和状态查询。
### 创建角色
1. 点击“新增”。
![创建角色时点击新增](/images/manual/role-create-add-button.png)
2. 填写角色名称和角色权限字符。
3. 设置角色状态。
4. 在“菜单权限”中勾选该角色需要使用的页面和操作。
5. 需要传递给直属下级企业时,按业务要求设置“下发给下一级”。
![设置下发给下一级](/images/manual/role-management-distribute-to-child.png)
6. 保存后回到“用户管理”,将角色分配给用户。
![在用户管理中分配角色](/images/manual/assign-role-to-user.png)
本级机构绑定的默认角色不能修改或删除。新增自定义角色时遵循最小权限原则,不要为普通查询人员授予企业删除、用户删除、角色修改或批量业务提交权限。
## 企业客户
**入口:** 左侧菜单 → **企业管理 → 企业客户**。
![企业客户页面入口](/images/manual/enterprise-customer-entry.jpg)
该页面面向获准管理下级企业的客户。可按企业名称和状态查询,列表显示企业名称、登录账号、负责人、联系电话、邮箱、组织所在地、详细地址、创建时间和状态。
根据按钮权限,可执行:
- **新增:** 创建直属企业客户之前,需在角色管理界面创建该企业客户同名角色,之后返回新增页面设置登录账号、初始密码、联系方式和企业地址等信息。
![角色管理中创建企业客户同名角色](/images/manual/enterprise-customer-role-match.png)
![新增企业客户页面](/images/manual/enterprise-customer-create-form.jpg)
- **修改:** 调整企业名称、登录账号、负责人。
![修改企业客户信息](/images/manual/enterprise-customer-edit.png)
- **重置密码:** 为该企业主账号设置新密码,密码长度为 5 至 20 位。
![企业客户重置密码](/images/manual/enterprise-customer-reset-password.png)
- **企业管理:** 分两步维护单位信息和实名认证信息。
![维护企业单位信息](/images/manual/enterprise-customer-manage.png)
- **删除:** 删除前确认该企业没有仍在使用的卡、用户和业务数据。删除属于高风险操作。
![企业客户删除确认](/images/manual/enterprise-customer-delete-confirm.png)
新增企业后,应及时通知对方修改初始密码,并按需要创建角色和用户。
## 用户管理
**入口:** 左侧菜单 → **企业管理 → 用户管理**。
![用户管理入口](/images/manual/user-management-entry.png)
可按用户名称、昵称、联系电话、状态和创建时间查询。列表显示用户名称、昵称、角色、联系电话、邮箱、状态和创建时间。
### 新增用户
1. 点击“新增”。
2. 填写用户名称、初始密码、昵称、联系电话、邮箱、性别和备注。
3. 设置账号状态。
4. 至少选择一个角色后保存。
初始密码长度为 5 至 20 位。建议使用更长且不重复的密码,并要求用户首次登录后修改。
![新增用户页面](/images/manual/user-create-form.png)
### 维护用户
- “修改”可调整资料、状态和角色。
- “重置密码”可设置新密码。
- “删除”会使用户失去登录和数据访问能力,操作前确认账号不再使用。
![维护用户信息](/images/manual/user-management-maintain-user.png)
## 建议的角色划分
| 角色 | 建议权限 |
| --- | --- |
| 查询人员 | 卡信息查看、智能诊断,只读查看执行日志 |
| 业务操作员 | 查询权限,以及已批准的业务受理按钮 |
| 工单人员 | 我的工单、沟通、工单记录 |
| 接口开发 | 我的 API 凭证,只读卡信息;凭证按需单独授权 |
| 企业管理员 | 用户、角色和企业资料管理;高风险权限严格控制 |
+58
View File
@@ -0,0 +1,58 @@
# 常见问题
## 登录后看不到某个菜单
平台按角色显示菜单。先联系本企业管理员检查用户是否绑定正确角色、角色是否正常以及菜单权限是否勾选。若整个企业都没有该功能,需要联系平台支持开通。
## 同事有按钮,我没有
页面权限和按钮权限分别控制。即使都能进入同一页面,新增、编辑、导出、同步、删除或业务提交按钮也可能不同。由企业管理员对比双方角色权限。
## 卡信息查询不到卡
1. 清空其他筛选条件。
2. 使用完整 MSISDN、ICCID 或 IMSI 查询。
3. 检查是否有前后空格或字符缺失。
4. 确认该卡已划拨到当前企业,且账号有相应数据范围。
5. 仍无结果时创建工单并提供卡号。
## 卡状态或流量没有更新
在“卡信息”中分别执行“同步状态”和“同步用量”,完成后刷新列表,并查看同步时间是否变化。运营商接口可能有延迟;短时间内不要反复同步。
## 智能诊断显示未查询到会话
表示当前没有查到数据会话,不一定是卡异常。检查设备供电、信号、APN 和天线,确认数据服务已开启后重启设备,再稍后诊断。
## 诊断提示运营商不支持
当前卡所属通道未提供该项实时查询能力。结合卡信息、同步时间、设备侧日志和其他诊断模块判断;需要运营商侧核实时提交工单。
## 批量业务提交后一直没有结果
记录批次号,进入“执行日志”查看异步状态。仍在处理中时请等待;已失败时查看批次明细和失败原因。不要在结果未明确前重复提交同一批卡。
## Excel 上传失败
- 使用页面当次下载的最新模板。
- 文件格式必须为 `.xls` 或 `.xlsx`,且不超过页面限制。
- 不修改表头、不合并单元格、不增加公式。
- 卡号列按文本格式保存,避免科学计数法或末位被修改。
- 根据失败提示修正后,仅重提失败数据。
## 达量断网开启后没有立即断网
确认阈值单位为 MB、配置任务已成功、卡用量已同步且确实达到阈值。运营商侧执行可能有延迟;同时检查卡是否受其他套餐或通道策略影响。
## 如何提交高质量工单
提供完整 ICCID、MSISDN、故障开始时间、影响数量、设备位置、复现步骤、诊断结果、执行日志批次号和必要截图。描述中避免使用“卡有问题”这类无法定位的表述,也不要发送密码或 API 凭证。
## 使用安全建议
- 为每位操作人员创建独立账号,不共享管理员账号。
- 查询人员、业务操作员和管理员使用不同角色。
- 定期停用离职或不再使用的账号。
- 高风险批量任务实行复核,保留批次号和结果文件。
- 导出的卡信息、企业资料和 API 凭证按敏感数据管理。
+52
View File
@@ -0,0 +1,52 @@
# 首页与通用操作
## 首页(暂未开放)
**入口:** 登录后默认进入“首页”;如已授权,也可点击左侧“首页”。
首页用于快速掌握企业卡业务概况,通常包括:
- SIM 卡总数、本月新增、本月数据用量、本月短信用量和 SIM 卡月活跃度。
- 生命周期分布、流量池、物联卡位置分布等图表。
- 欠费停机、主动停机、机卡分离停机、强制停机等业务预警。
- 流量用尽关停、限额管控关停、封顶关停和套餐余量提醒等流量预警。
- 卡信息、智能诊断等快捷入口。
首页数据用于概览和发现异常。处理单张卡时,应进入“卡信息”查看最新详情;预警统计与明细可能存在同步时间差。
## 列表页通用操作
### 查询与重置
1. 在查询区填写一个或多个条件。
2. 点击“查询”;部分页面修改条件后会自动查询。
3. 条件过多导致无结果时,点击“重置”后只保留卡号、批次号等关键条件重试。
卡号输入框通常支持 MSISDN、ICCID、IMSI。输入前后不要带空格;批量输入时一般每行一张卡。
![卡号查询](/images/manual/card-info-query-single.jpg)
![按号段批量查询](/images/manual/card-info-query-batch.jpg)
### 表格工具
列表右上角可能提供刷新、列设置、密度或全屏等工具。横向字段较多时可左右滚动,固定在右侧的“操作”列用于查看或办理业务。
![表格工具](/images/manual/table-tools.png)
### 导出(暂未开放)
“导出”通常按当前查询条件导出,而不是只导出当前页。建议先缩小查询范围再导出,并妥善保管包含卡号、设备号和企业信息的文件。
### 状态与数据时间
卡状态、流量、会话和执行结果来自不同上游接口,更新时间可能不同。判断数据是否最新时,优先查看“同步时间”“开始时间”“结束时间”等时间字段,不要只看页面打开时间。
## 权限与数据范围
- 菜单权限决定页面是否显示。
- 按钮权限决定是否能新增、编辑、导出、同步或删除。
- 数据权限决定能看到本企业、下级企业还是仅本人数据。
- 同一企业内不同用户看到的菜单和数据可能不同。
企业管理员可通过“企业管理 → 用户管理”和“角色管理”调整本企业用户权限。涉及平台未向企业开放的功能时,需要联系平台支持。
+90
View File
@@ -0,0 +1,90 @@
# Web 端使用手册
本手册面向 iotLCM Web 管理平台的企业客户,说明登录平台后各页面的入口、信息含义和常用操作。
::: info 权限说明
平台按企业、角色和用户分配权限。左侧菜单、页面按钮可能因企业实际授权不同而不同;看不到某项功能时,先联系本企业管理员确认角色权限。按钮以页面实际显示为准。
:::
## 登录平台
![iotLCM 管理平台登录页面](/images/manual/login-page.png)
1. 访问 [iotLCM 管理平台](https://iotlcm.example.com/)。
2. 输入平台分配的账号和密码登录。
3. 首次登录后建议立即修改初始密码,并确认绑定的手机号、邮箱是否正确。
4. 登录后通过左侧菜单进入业务页面;顶部标签可在已打开页面间切换。
若提示账号停用、密码错误或无可用菜单,请联系本企业管理员;企业管理员无法处理时,可通过工单联系平台支持。
## 功能地图(部分开放)
| 菜单 | 页面 | 主要用途 |
| --- | --- | --- |
| 顶级菜单 | 首页 | 查看卡量、用量、生命周期和预警概览 |
| 通讯管理 | 业务受理 | 批量办理套餐、数据服务、生命周期和预警业务 |
| 通讯管理 | 卡信息 | 查询卡、查看套餐和会话、同步状态与用量 |
| 通讯管理 | 达量断网 | 查询、编辑和导出单卡达量断网配置 |
| 通讯管理 | 智能诊断 | 按 MSISDN、ICCID 或 IMSI 一键排查卡和网络状态 |
| 企业管理 | 企业信息 | 维护本企业基础资料和实名认证资料 |
| 企业管理 | 用户管理 | 管理本企业用户及其角色 |
| 企业管理 | 角色管理 | 配置角色菜单权限和状态 |
| 企业管理 | 企业客户 | 管理直属企业客户、登录账号和企业资料 |
| 工单管理 | 我的工单 | 创建工单、沟通、跟踪处理和评价 |
| 工单管理 | 工单记录 | 查询工单的状态变更与操作轨迹 |
| 顶级菜单 | 我的 API 凭证 | 查看并复制本企业接口凭证 |
| 顶级菜单 | 执行日志 | 跟踪批量任务结果及逐卡失败原因 |
“工单问题沟通”是从“我的工单”进入的详情页面,不在左侧单独显示。
## 推荐使用流程
### 日常查卡
1. 进入“通讯管理 → 卡信息”。
2. 用 MSISDN、ICCID、IMSI 或 IMEI 查询目标卡。
3. 打开“查看”,核对卡状态、套餐、用量、到期时间和同步时间。
4. 数据较旧时使用“同步用量”或“同步状态”,再刷新查看。
![卡信息同步操作示意图](/images/manual/card-info-sync-actions.png)
### 排查不能联网
1. 从卡详情点击“诊断”,或进入“通讯管理 → 智能诊断”。
![从卡详情进入智能诊断](/images/manual/card-detail-diagnosis-entry-new.png)
![从通讯管理进入智能诊断](/images/manual/intelligent-diagnosis-entry-new.jpg)
2. 输入卡号并执行“一键诊断”。
![输入卡号并执行一键诊断](/images/manual/intelligent-diagnosis-submit.jpg)
3. 依次查看 SIM 卡状态、通信服务、实时流量、策略限制和网络连接。
![智能诊断结果页面](/images/manual/intelligent-diagnosis-result.png)
4. 仍无法定位时创建工单,并附上卡号、故障时间、诊断结果和终端现象。
![进入我的工单并创建工单](/images/manual/work-order-create-entry-new.jpg)
![填写创建工单信息](/images/manual/work-order-create-form-new.jpg)
### 办理批量业务(暂未开放)
1. 进入“通讯管理 → 业务受理”,选择已授权的业务。
2. 下载最新 Excel 模板,或使用批量输入、连续号段方式提交卡号。
3. 对需要预处理的业务先核对有效数量、失败项、套餐、价格和生效方式。
4. 确认提交后记录批次号。
5. 进入“执行日志”按批次号查看最终结果。
## 阅读指引
- [首页与通用操作](./home):了解查询、重置、导出和数据刷新规则。
- [卡信息](./card-info):了解卡列表字段、卡详情和会话信息。
- [智能诊断](./intelligent-diagnosis):了解入口、诊断步骤和结果判断。
- [业务受理与达量断网](./business-operations):了解批量业务及达量断网配置。
- [企业、用户与角色](./enterprise-management):了解组织和账号权限管理。
- [工单管理](./work-orders):了解问题提交、沟通、关闭和评价。
- [API 凭证与执行日志](./api-and-logs):了解凭证保管和批次追踪。
- [常见问题](./faq):快速排查菜单、数据、任务和诊断问题。
+71
View File
@@ -0,0 +1,71 @@
# 智能诊断
## 入口
有两种进入方式:
1. 左侧菜单 → **通讯管理 → 智能诊断**。
![从左侧菜单进入智能诊断](/images/manual/intelligent-diagnosis-menu.png)
2. 左侧菜单 → **通讯管理 → 卡信息** → 找到目标卡 → “查看” → “诊断”。第二种方式会自动带入 ICCID 并开始查询。
![从卡详情进入智能诊断](/images/manual/card-detail-diagnosis-entry-attachment.png)
## 开始诊断
1. 输入 MSISDN、ICCID 或 IMSI 任一完整标识。
2. 点击“一键诊断”。
3. 等待页面提示“诊断完成”。不同上游能力返回速度可能不同,请勿连续重复点击。
4. 展开各诊断模块查看状态、详细字段和提示。
诊断完成后,页面顶部显示 MSISDN、ICCID、IMSI 和实时 IMEI;下方同时查询近 7 天、近 30 天和近 6 个月的流量趋势。
![智能诊断输入卡号并执行一键诊断](/images/manual/intelligent-diagnosis-submit-button.png)
## 诊断结果
![智能诊断结果总览](/images/manual/intelligent-diagnosis-result-attachment.png)
### SIM 卡状态
关注卡状态、停机原因、是否冻结、冻结原因和冻结操作时间。若卡处于停机、冻结、待激活或销户状态,应先处理卡生命周期问题,再排查终端网络。
### 通信服务
关注 APN、IPv4、IPv6、通信服务状态、在线状态、会话状态、会话建立时间、接入方式和实时 IMEI。
- 通信服务关闭时,需先办理开通或复机。
- 没有会话时,检查设备是否开机、天线和信号是否正常、APN 是否正确。
- 实时 IMEI 与预期设备不一致时,确认是否换机、换卡或发生机卡分离。
### 实时流量
展示已用流量、剩余流量和同步时间。历史趋势用于判断设备是否持续上报、是否出现突增或长时间无流量。
### 策略限制
展示区域限制订购、触发状态、限制区域和人联网访问限制等。卡和设备均正常但仍无法联网时,应重点检查此模块。
### 网络连接
展示开关机状态、设备状态和机卡绑定状态。出现关机、设备异常或机卡分离时,优先在终端侧核查供电、信号、插卡和绑定关系。
## 推荐排查顺序
1. **卡是否可用:** 卡状态、冻结和停机原因。
2. **服务是否开启:** 数据通信服务和套餐是否有效。
3. **流量是否充足:** 剩余流量、达量限制和到期时间。
4. **策略是否限制:** 区域、人联网及其他策略。
5. **设备是否在线:** 开关机、设备状态、会话和实时 IMEI。
6. **趋势是否异常:** 对比近 7 天、30 天、6 个月流量。
## 结果提示说明
- **查询成功但未返回数值:** 上游已响应,但本次没有可展示的数据;结合同步时间和其他模块判断。
- **未查询到会话:** 当前没有在线数据会话,可稍后重试并检查终端。
- **运营商暂不支持/不支持查询:** 当前通道没有对应实时查询能力,不代表卡一定异常。
- **查询暂时未完成:** 可能是上游忙、缓存或接口超时,稍后重试。
- **系统无记录:** 先检查卡号是否完整以及卡是否归属当前企业。
需要提交工单时,建议附上诊断时间、完整 ICCID、异常模块、终端所在地、设备指示灯或日志,以及问题首次出现时间。
+61
View File
@@ -0,0 +1,61 @@
# 工单管理
## 我的工单
**入口:** 左侧菜单 → **工单管理 → 我的工单**。
![我的工单页面入口](/images/manual/work-orders-entry.png)
可按工单编号、工单类型和当前处理状态查询。列表显示工单编号、类型、标题、关联业务号、创建人、当前状态、首次响应时间和创建时间。
常见状态包括已分派、处理中、已解决和已完结;取消后的工单也会保留记录。
## 创建工单
1. 点击“创建工单”。
2. 选择工单类型,如卡问题、套餐问题、订单问题、系统问题或其他问题。
3. 填写关联业务 ID。卡问题建议填写完整 ICCID,并在问题描述中补充 MSISDN。
4. 填写清晰的工单标题和问题描述。
5. 按需上传截图、日志或结果文件。
6. 核对创建人信息后提交。
问题描述建议包含:发生时间、影响范围、卡号、设备所在地、预期结果、实际现象、已执行的同步或诊断操作。不要在附件中上传 API 密钥、账号密码等敏感信息。
![创建工单表单](/images/manual/work-order-create-form-attachment.png)
## 沟通与处理
点击工单右侧“沟通”;工单已结束时按钮显示为“查看”。工单问题沟通页会显示历史消息、附件、工单信息和处理轨迹。
![工单沟通入口](/images/manual/work-order-communication-entry.png)
- 在输入区填写回复内容,或按权限上传附件后发送。
- 平台回复后可继续补充信息,尽量在同一工单中保持上下文完整。
- 有转单权限时,可把工单转交其他处理方。
- 问题确认解决后可执行“解决”;不再需要处理时可“取消”。
- 工单完成后可“关闭”,并按 1 至 5 分提交满意度和评价内容。
![工单沟通与处理操作](/images/manual/work-orders-communication.png)
![已关闭工单的服务评价入口](/images/manual/work-orders-closed-evaluation.png)
按钮是否出现取决于工单当前状态和用户权限。已完结或已取消的工单通常只能查看。
## 工单记录
**入口:** 左侧菜单 → **工单管理 → 工单记录**。
![工单记录页面入口](/images/manual/work-orders-records-entry.png)
该页面用于审计工单流转,可按工单编号和操作类型查询。主要字段包括操作类型、操作机构、操作用户、目标部门、目标用户、变更前状态和变更后状态。
常见操作类型为创建、分派、处理、完成、关单和取消。需要核对“谁在何时改变了工单状态”时,以此页面记录为准;如已授权,可查看详情或导出当前查询结果。
## 何时新建工单
- 同一张卡完成状态同步和智能诊断后仍无法联网。
- 批量任务在执行日志中失败,错误原因无法自行处理。
- 套餐、费用或归属与实际业务不符。
- 页面持续报错,且刷新或重新登录后仍可复现。
同一问题不要重复创建多个工单。补充信息应在原工单的沟通页继续发送。
+23
View File
@@ -0,0 +1,23 @@
---
layout: home
hero:
name: iotLCM OpenAPI
text: 接口文档
tagline: 对接说明:鉴权方式、请求参数、响应结构与示例。
actions:
- theme: brand
text: V3 接口(推荐)
link: /openapi/v3/
- theme: alt
text: 旧版兼容接口
link: /openapi/legacy/
features:
- title: 版本选型指引
details: 新接入推荐使用 V3。V3 接口位于 /openapi/v3/query,通过 X-Access-Token 鉴权,调用时需在请求体中传入 token 接口返回的 appId(⚠️ 注意区分:appKey 用于获取 token,appId 由 token 接口返回并在后续调用中传入),数据权限按账号所属客户隔离;旧版兼容接口位于 /route/open,通过请求 body verify 入参鉴权,仅作为存量客户兼容保留。
- title: V3 接口
details: 鉴权、获取客户调用凭证、查询 SIM 卡信息、查询 SIM 流量限制、查询 SIM IMEI(单卡 / 批量)、查询 SIM 流量用量。
- title: 旧版兼容接口
details: 查询 SIM 详情、查询 SIM 账期用量、查询 SIM 历史月用量、查询 SIM 状态、查询 SIM 在线会话、查询卡列表信息。
---
+133
View File
@@ -0,0 +1,133 @@
---
title: 概览与鉴权
description: iotLCM 旧版兼容接口概览与鉴权说明
outline: deep
---
# 概览与鉴权
本文档收录历史 `/route/open/*` 路径下仍在维护的兼容接口。鉴权通过请求体 `verify` 中的 `appId`、`password` 和 `timeStamp` 完成;`sign` 为历史兼容字段,当前服务不校验。
这些接口由 iotLCM OpenAPI 服务实现并提供,与 V3 接口同域(`api.iotlcm.example.com`),仅请求路径与鉴权方式不同。
## 服务地址
```text
https://api.iotlcm.example.com
```
完整请求 URL:
```text
https://api.iotlcm.example.com/route/open/{接口名}
```
## 统一鉴权
以下各接口的“请求示例”均为完整 JSON 请求体,调用时请设置 `Content-Type: application/json`;`verify.sign` 可传空字符串 `""`。
所有接口通过请求体 `verify` 字段鉴权:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| appId | string | 用于唯一标识请求 |
| password | string | 密码 |
| timeStamp | string | 时间戳,`"" + System.currentTimeMillis()` |
| sign | string | 当前服务不校验,可传空字符串 `""`。 |
### 历史签名规则(仅供参考)
当前服务不要求计算签名,也无需提供 `accessKey`。以下为历史客户端示例中的签名算法,仅供维护已有签名逻辑时参考。
```text
appId={appId}&password={password}&timeStamp={timeStamp}&key={accessKey}
```
对拼接后的字符串计算 MD5,并将结果转为大写,即为 `sign`。`sign` 不参与签名计算;`accessKey` 仅用于签名,不放入请求体的 `verify` 字段。
## 统一返回结构
```json
{
"status": 0,
"message": "",
"result": {}
}
```
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| status | number | 业务状态码,成功为 `0` |
| message | string | 错误或提示信息 |
| result | any | 业务数据 |
## 公共字典
卡状态编码(适用于 `cardInfo`、`simStatus`、`queryCardInfoList` 响应中的 `statusId` / `statusCode` / `status`):
| 编码 | 说明 |
| --- | --- |
| 1 | 库存 |
| 2 | 可测试 |
| 3 | 待激活 |
| 4 | 已激活 |
| 5 | 已停机 |
| 6 | 预销户 |
| 7 | 已销户 |
| 8 | 未知 |
## 请求案例
以下为历史 Java 示例,保留原有 `verify` 块与 `sign` 的生成方式供参考。调用当前服务时,可直接设置 `verify.sign` 为 `""`,省略签名计算。
```java
// 服务器请求地址
protected static String server_Ip = "https://api.iotlcm.example.com/route/open";
// appId
public static String appId = null;
// 密钥密码
public static String password = null;
/**
* Sign 加密类
*/
public static String getSign(Map<String, Object> map, String key) {
List<String> list = new ArrayList<>(map.keySet());
Collections.sort(list);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
String k = list.get(i);
String v = (String) map.get(k);
sb.append(k).append("=").append(v).append("&");
}
String signstr = sb.append("key=").append(key).toString();
String sign = MD5Util.MD5Encode(signstr).toUpperCase();
return sign;
}
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
Map<String, Object> parmap = new HashMap<>();
Map<String, Object> verify = new HashMap<>();
String appId = "test";
String password = "uhbhkh223123";
String accessKey = "1234567896132";
String timeStamp = "" + System.currentTimeMillis();
verify.put("password", password);
verify.put("appId", appId);
verify.put("timeStamp", timeStamp);
verify.put("sign", getSign(verify, accessKey));
parmap.put("type", "iccid");
parmap.put("cardno", "89860423123123132135");
map.put("verify", verify);
map.put("Param", parmap);
server_Ip += "/cardInfo";
String result = HttpUtil.post(server_Ip, JSON.toJSONString(map));
System.out.println(result);
}
```
+389
View File
@@ -0,0 +1,389 @@
---
title: 查询类
description: iotLCM 旧版兼容查询类接口
outline: deep
---
# 查询类
## 查询 SIM 详情
```http
POST /route/open/cardInfo
```
简要描述:查询物联卡基础信息。
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| type | string | 查询类型:`msisdn` / `iccid` / `imsi` / `vid` |
| cardno | string | 对应的查询值 |
请求示例:
```json
{
"Param": {
"type": "iccid",
"cardno": "898604F4152391115474"
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| vid | string | 本地卡记录 ID |
| msisdn | string | MSISDN |
| iccid | string | ICCID |
| imsi | string | IMSI |
| imei | string | IMEI |
| deptName | string | 当前归属组织名称 |
| statusId | number | 状态编码,参考公共字典 |
| packageId | string | 当前套餐编码 |
| packageName | string | 当前套餐名称 |
| used | number | 当前周期已用流量,单位 MB |
| remaining | number | 当前周期剩余流量,单位 MB |
| type | string | 卡类型名称 |
| packetArr | array | 资费计划,未配置时返回 `null` |
| remark | string | 备注 |
| grouping | string | 分组,未配置时为空字符串 |
| deliverDate | string | 发货日期,未配置时为空字符串 |
| activateDate | string | 激活日期 |
| expireTime | string | 到期时间 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": {
"vid": "3933",
"msisdn": "1441543605474",
"iccid": "898604F4152391115474",
"imsi": "460087436015474",
"imei": "",
"deptName": "示例企业",
"statusId": 4,
"packageId": "yd-100m-3y",
"packageName": "每月100m3年",
"used": 0.875,
"remaining": 99.125,
"type": "",
"packetArr": null,
"remark": "测试卡",
"grouping": "",
"deliverDate": "",
"activateDate": "2026-06-01",
"expireTime": "2029-01-31 23:59:59"
}
}
```
## 查询 SIM 账期用量
```http
POST /route/open/simDataUsage
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | string | ICCID |
请求示例:
```json
{
"Param": {
"iccid": "898604F4152391115474"
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| useUnit | string | 单位,当前为 `MB` |
| useAmount | number | 当前周期已用流量 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": {
"useUnit": "MB",
"useAmount": 0.875
}
}
```
## 查询 SIM 历史月用量
```http
POST /route/open/simDataUsageMonthly
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | string | ICCID |
| dateTime | string | 查询月份,格式 `yyyyMM`(示例:`202509`) |
请求示例:
```json
{
"Param": {
"iccid": "898604F4152391115474",
"dateTime": "202509"
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| useUnit | string | 单位,当前为 `MB` |
| useAmount | number | 指定月份用量 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": {
"useUnit": "MB",
"useAmount": 0
}
}
```
## 查询 SIM 状态
```http
POST /route/open/simStatus
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | string | ICCID |
请求示例:
```json
{
"Param": {
"iccid": "898604F4152391115474"
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| statusMessage | string | 状态描述 |
| statusCode | number | 状态编码,参考公共字典 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": {
"statusMessage": "已激活",
"statusCode": 4
}
}
```
## 查询 SIM 在线会话
```http
POST /route/open/simSession
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | string | ICCID |
请求示例:
```json
{
"Param": {
"iccid": "898604F4152391115474"
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| typeName | string | 运营商系统类型,未上报时为空字符串 |
| imei | string | IMEI,未上报时为空字符串 |
| statusMessage | string | 状态描述,未上报时为空字符串 |
| statusCode | number | 状态码,未上报时为 `0` |
| data | object | 会话详情 |
`data` 字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| apnId | string | APN ID |
| rat | string | 接入方式 |
| ipv6 | string | IPv6 地址 |
| ip | string | IPv4 地址 |
| ipv6Prefix | string | IPv6 前缀 |
| status | string | 在线状态 |
| createDate | string | 会话创建时间 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": {
"typeName": "",
"imei": "",
"statusMessage": "",
"statusCode": 0,
"data": {
"apnId": "",
"rat": "",
"ipv6": "",
"ip": "",
"ipv6Prefix": "",
"status": "",
"createDate": ""
}
}
}
```
## 查询卡列表信息
```http
POST /route/open/queryCardInfoList
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | `array<string>` | ICCID 列表,最多支持 100 个 |
请求示例:
```json
{
"Param": {
"iccid": [
"898604F4152391115473",
"898604F4152391115474"
]
},
"verify": {
"timeStamp": "1784097284347",
"password": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc",
"appId": "YOUR_APP_ID",
"sign": ""
}
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| iccid | string | ICCID |
| activateDate | string | 激活日期 |
| dueExpireTime | string | 到期时间 |
| imei | string | IMEI |
| imsi | string | IMSI |
| msisdn | string | MSISDN |
| type | string | 卡类型 |
| remarks | string | 备注 |
| status | number | 状态编码,参考公共字典 |
响应示例:
```json
{
"status": 0,
"message": "",
"result": [
{
"iccid": "898604F4152391115473",
"activateDate": "2023-05-11",
"dueExpireTime": "",
"imei": "",
"imsi": "460087436015473",
"msisdn": "1441543605473",
"type": "",
"remarks": "测试卡",
"status": 4
},
{
"iccid": "898604F4152391115474",
"activateDate": "2026-06-01",
"dueExpireTime": "2029-01-31 23:59:59",
"imei": "",
"imsi": "460087436015474",
"msisdn": "1441543605474",
"type": "",
"remarks": "测试卡",
"status": 4
}
]
}
```
+14
View File
@@ -0,0 +1,14 @@
---
title: 共享 Token 接口概览
description: 共享 Token 接口与白名单转发说明
outline: deep
---
# 共享 Token 接口概览
本目录包含共享 Token 获取接口和白名单转发说明。
## 接口文档
- [共享 Token 接口](./shared-token/)
- [白名单转发](./mobile-v5/)
+138
View File
@@ -0,0 +1,138 @@
---
title: 白名单转发
description: 通过 api.iotlcm.example.com 访问中国移动物联网能力开放平台 V5 接口
outline: deep
---
# 白名单转发
本目录说明如何通过 `api.iotlcm.example.com` 访问中国移动物联网能力开放平台 V5 接口。平台仅提供安全代理转发,不改变中国移动 V5 接口的请求方法、请求参数、响应结构和业务语义。
## 服务地址
客户侧统一使用:
```text
https://api.iotlcm.example.com
```
V5 接口的请求路径保持与中国移动官方接口一致,将官方域名替换为平台域名即可:
```text
https://api.iotlcm.example.com/v5/{官方接口路径}
```
例如,官方接口路径为 `/v5/ec/query/sim-basic-info` 时,客户侧请求路径为:
```http
POST https://api.iotlcm.example.com/v5/ec/query/sim-basic-info
```
平台会将该请求转发至:
```text
https://api.iot.10086.cn/v5/ec/query/sim-basic-info
```
> [!IMPORTANT] 使用 POST 时务必携带 JSON 请求体
> 中国移动 V5 接口对 `POST` 只接受 JSON 格式。通过代理请求时必须设置
> `Content-Type: application/json`,并在请求体中传入参数;
> 未带该请求头或使用表单编码(`application/x-www-form-urlencoded`)会返回
> `{"status":"11012","message":"POST请求仅支持JSON格式","result":[]}`。
>
> 若使用 `GET`,则以 Query 参数传参,无需设置 `Content-Type`。
## 调用前准备
调用 V5 业务接口前,需要先从平台取得以下信息:
| 参数 | 说明 |
| --- | --- |
| `appid` | 第三方应用唯一标识 |
| `password` | 应用密钥 |
| `transid` | 按官方规则生成的事务编码 |
| `token` | 通过共享 Token 接口获取的运营商令牌 |
其中 `transid` 由客户生成,通常遵循 `appid + YYYYMMDDHHMISS + 8位数字序列`;中国移动通常不校验此事务编号。具体规则及字段约束以中国移动当前发布的接口文档为准。
## 业务接口示例
以下接口字段摘自中国移动 V5 接口清单,用于说明代理路径的写法。完整接口、字段、错误码和版本变更请以官方文档为准。
### 单卡基本信息查询
```http
POST https://api.iotlcm.example.com/v5/ec/query/sim-basic-info
```
请求参数:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `transid` | string | 事务编码 |
| `token` | string | V5 Token |
| `msisdn` | string | 物联卡号码 |
| `iccid` | string | ICCID;与 `msisdn`、`imsi` 按官方规则选择 |
| `imsi` | string | IMSI |
请求示例:
```json
{
"transid": "YOUR_TRANSID",
"token": "YOUR_ACCESS_TOKENf3515b3bdaeca904dd2e904061b65e8153",
"iccid": "898608501624D0000009"
}
```
响应主要字段:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `status` | string | `0` 表示成功,非 `0` 表示失败 |
| `message` | string | 错误或提示信息 |
| `result` | array | 查询结果 |
| `result[].msisdn` | string | 物联卡号码 |
| `result[].iccid` | string | ICCID |
| `result[].imsi` | string | IMSI |
| `result[].activeDate` | string | 首次激活日期 |
| `result[].openDate` | string | 开卡时间 |
响应示例:
```json
{
"status": "0",
"message": "正确",
"result": [
{
"msisdn": "1442206200009",
"imsi": "460240406200009",
"iccid": "898608501624D0000009",
"activeDate": "2025-03-26 15:49:50",
"openDate": "2025-03-13 16:52:10",
"remark": ""
}
]
}
```
## 请求与响应约定
- V5 接口支持的请求方法、参数位置(Query 或 Form)、参数格式和字段大小写均以中国移动官方文档为准。
- `GET` 与 `POST` 均可通过本代理访问。使用 `POST` 时**必须**设置 `Content-Type: application/json` 并携带 JSON 请求体,否则返回 `11012`;使用表单编码亦不被接受。
- 代理会以平台固定出口地址访问中国移动,因此客户端侧的来源 IP 无需加入中国移动白名单;请勿在请求中自行添加 `X-Forwarded-For`、`X-Real-IP` 等来源标识请求头,中国移动会依据其判定 IP 鉴权,携带非白名单地址将返回 `12003`。
- 平台不将 V5 响应包装成 iotLCM V3 的 `code/message/data` 结构,客户应直接按照中国移动 V5 响应结构解析。
- 运营商 Token 具有有效期,收到 Token 失效类错误后应重新获取,不建议长期缓存。
## 官方资料
接口完整清单、参数定义、返回示例、错误码和 SDK 示例请参阅:
[中国移动物联网能力开放平台 V5 接口文档下载页面](https://api.iot.10086.cn/api/index.html#/resourceCenter/docDownload)
平台代理入口仅替换访问域名,不替代中国移动官方接口规范。
@@ -0,0 +1,87 @@
---
title: 共享 Token 接口
description: 共享 Token 接口说明
outline: deep
---
# 共享 Token 接口
本接口用于获取平台已开放共享权限的移动运营商访问 Token。客户无需直接维护运营商应用密钥,平台根据客户已授权的通道配置完成校验并向运营商申请 Token。
## 服务地址
```text
https://api.iotlcm.example.com
```
HTTP(`http://api.iotlcm.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。
## 接口信息
```http
POST /openapi/v3/query/operator-token
```
请求头:`Content-Type: application/json`。
请求体:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 平台分配的客户应用标识 |
| `chanKey` | string | 已开通共享 Token 权限的通道标识 |
请求示例:
```json
{
"appId": "7s9g2p5n8z1d4m6r",
"chanKey": "channel_010"
}
```
响应中的 `data.accessToken` 用于调用移动运营商 V5 接口。Token 的有效期以 `data.tokenExpire` 为准,请勿将 Token 写入代码仓库或日志。
响应示例:
失败时,接口返回的 `data` 为 `{}`,不是 `null`;例如 `code=50` 表示平台侧获取运营商 Token 失败。
```json
{
"code": 0,
"message": "",
"data": {
"chanAlias": "中国移动物联网",
"chanKey": "channel_010",
"accessToken": "YOUR_ACCESS_TOKENf3515b3bdaeca904dd2e904061b65e8153",
"tokenExpire": "2026-09-09 16:00:00"
},
"error": null
}
```
## 字段说明
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 平台业务状态码,`0` 表示成功;`50` 表示平台侧获取运营商 Token 失败 |
| `message` | string | 错误或提示信息 |
| `data` | object | 成功时返回 Token 信息;失败时返回空对象 `{}`,不是 `null` |
| `data.chanAlias` | string | 通道名称 |
| `data.chanKey` | string | 通道标识 |
| `data.accessToken` | string | 移动运营商接口访问 Token |
| `data.tokenExpire` | string | Token 过期时间 |
| `error` | any | 错误详情;无错误时通常为 `null` |
## 调用示例
```bash
curl --request POST \
--url https://api.iotlcm.example.com/openapi/v3/query/operator-token \
--header 'Content-Type: application/json' \
--data '{
"appId": "7s9g2p5n8z1d4m6r",
"chanKey": "channel_010"
}'
```
共享 Token 仅适用于已开通共享权限的通道。若通道未授权、客户应用标识与通道不匹配,或运营商 Token 获取失败,接口将返回失败信息。
+10
View File
@@ -0,0 +1,10 @@
---
title: 共享 Token 接口
description: 共享 Token 接口文档兼容入口
sidebar: false
search: false
---
# 共享 Token 接口
文档已归档到运营商接口模块,请访问[共享 Token 接口](./operator/shared-token/)。
+344
View File
@@ -0,0 +1,344 @@
---
title: 业务类
description: iotLCM V3 业务类接口
outline: deep
---
# 业务类
## 服务地址
```text
https://api.iotlcm.example.com
```
HTTP(`http://api.iotlcm.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。
## 鉴权
先调用 `/openapi/v3/query/token` 获取访问令牌,再在请求头中传入 `X-Access-Token`。请求体中的 `appId` 必须与凭证所属客户一致。
## 统一返回结构
```json
{
"code": 0,
"message": "",
"data": {},
"error": null
}
```
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 业务状态码,成功为 `0` |
| `message` | string | 错误或提示信息 |
| `data` | object | 业务数据 |
| `error` | any | 错误详情 |
## 单卡套餐续费
```http
POST /openapi/v3/change/sim-subscribe
```
单卡续费按串行方式执行,接口等待本卡处理完成后直接返回结果。
请求参数:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `iccid` | string | ICCID |
| `msisdn` | string | MSISDN/卡号 |
| `imsi` | string | IMSI |
| `packageId` | string | 目标套餐编码 |
| `validity` | integer | 续费时长,单位为年,最小值为 `1` |
| `remark` | string | 续费备注 |
> `iccid`、`msisdn`、`imsi` 至少传一个。
请求示例:
```json
{
"appId": "CUS-202608-0001",
"iccid": "89860401785462635152",
"packageId": "001",
"validity": 1,
"remark": "客户单卡续费"
}
```
响应字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `orderId` | string | 订单 ID |
| `orderSn` | string | 订单号 |
| `iccid` | string | 续费卡 ICCID |
| `planName` | string | 续费套餐名称 |
| `effectiveType` | string | 生效类型 |
| `effectiveDate` | string | 套餐生效日期 |
| `expireDate` | string | 套餐到期日期 |
| `amount` | number | 续费金额 |
| `status` | string | 续费状态,成功为 `success`,失败为 `failed` |
| `errorCode` | string | 失败时返回的错误编码 |
| `errorMessage` | string | 失败时返回的错误说明 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"orderId": "54",
"orderSn": "REN20260910153546001000001",
"iccid": "89860401785462635152",
"planName": "中移-1G",
"effectiveType": "immediate",
"effectiveDate": "2026-09-10 15:35:46",
"expireDate": "2027-09-10 15:35:46",
"amount": 0,
"status": "success"
},
"error": null
}
```
失败时仍按统一返回结构返回 `data`,并通过 `status=failed` 和 `errorMessage` 说明失败原因。
```json
{
"code": 0,
"message": "",
"data": {
"orderId": "0",
"orderSn": "",
"iccid": "89860401785462635152",
"planName": "",
"effectiveType": "",
"effectiveDate": "",
"expireDate": "",
"amount": 0,
"status": "failed",
"errorCode": "RENEW_FAILED",
"errorMessage": "卡片不存在或无权限"
},
"error": null
}
```
## 单卡限额变更
```http
POST /openapi/v3/change/sim-traffic-cutoff
```
单卡配置按串行方式执行,接口等待本卡处理完成后直接返回配置结果。
请求参数:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `iccid` | string | ICCID |
| `msisdn` | string | MSISDN/卡号 |
| `imsi` | string | IMSI |
| `trafficCutoffStatus` | integer | `0` 删除,`1` 开启,`2` 关闭 |
| `trafficCutoffThreshold` | number | 达量阈值,单位为 MB;开启时必须大于 `0` |
| `remark` | string | 配置备注 |
> `iccid`、`msisdn`、`imsi` 三码至少传一个。trafficCutoffStatus=0 表示取消达量断网配置。
请求示例:
```json
{
"appId": "CUS-202608-0001",
"iccid": "89860401785462635152",
"trafficCutoffStatus": 1,
"trafficCutoffThreshold": 1024,
"remark": "客户开启达量断网"
}
```
响应字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `success` | boolean | 是否配置成功 |
| `iccid` | string | 平台卡 ICCID |
| `msisdn` | string | MSISDN |
| `imsi` | string | IMSI |
| `trafficCutoffStatus` | integer | `0` 删除,`1` 已开启,`2` 已关闭 |
| `trafficCutoffThreshold` | number | 达量阈值,单位为 MB |
| `trafficCutoffThresholdUnit` | string | 阈值单位,固定为 `MB` |
| `message` | string | 处理结果说明 |
| `errorCode` | string | 失败时的错误编码 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"success": true,
"iccid": "89860401785462635152",
"msisdn": "141****5152",
"imsi": "460045462635152",
"trafficCutoffStatus": 1,
"trafficCutoffThreshold": 1024,
"trafficCutoffThresholdUnit": "MB",
"message": "traffic cutoff configuration succeeded"
},
"error": null
}
```
失败时仍返回同一响应结构,`success=false`,`message` 为失败原因。
```json
{
"code": 0,
"message": "",
"data": {
"success": false,
"iccid": "89860401785462635152",
"trafficCutoffStatus": 1,
"trafficCutoffThreshold": 1024,
"trafficCutoffThresholdUnit": "MB",
"message": "卡片不存在或无权限",
"errorCode": "TRAFFIC_CUTOFF_FAILED"
},
"error": null
}
```
## 物联网卡批量套餐续费
```http
POST /openapi/v3/change/batch-sim-subscribe
```
批量续费只创建异步批次,不等待所有卡执行完成。请保存响应中的 `batchNo`,再通过批次查询接口跟踪处理结果。
批量接口提交成功后只返回批次信息;卡片执行成功或失败请通过批次查询接口获取。
请求参数:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `cards` | array | 续费卡列表 |
| `cards[].iccid` | string | ICCID |
| `cards[].msisdn` | string | MSISDN/卡号 |
| `cards[].imsi` | string | IMSI |
| `packageId` | string | 目标套餐编码 |
| `validity` | integer | 续费时长,单位为年 |
| `remark` | string | 续费备注 |
> 每个 `cards[]` 明细中的`iccid`、`msisdn`、`imsi` 三码至少传一个。
请求示例:
```json
{
"appId": "CUS-202608-0001",
"cards": [
{
"iccid": "89860401785462635152"
}
],
"packageId": "001",
"validity": 1,
"remark": "客户批量续费"
}
```
响应字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `batchNo` | string | 系统生成的续费批次号 |
| `batchType` | integer | 批次类型,续费为 `101` |
| `total` | integer | 提交的卡数量 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"batchNo": "REN20260910153546001000002",
"batchType": 101,
"total": 1
},
"error": null
}
```
## 物联网卡批量限额变更
```http
POST /openapi/v3/change/batch-sim-traffic-cutoff
```
批量配置只创建异步批次,不等待所有卡执行完成。请保存响应中的 `batchNo`,再通过批次查询接口跟踪处理结果。
批量接口提交成功后只返回批次信息;卡片执行成功或失败请通过批次查询接口获取。
请求参数:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `cards` | array | 配置卡列表,单次最多 1000 张 |
| `cards[].iccid` | string | ICCID |
| `cards[].msisdn` | string | MSISDN/卡号 |
| `cards[].imsi` | string | IMSI |
| `trafficCutoffStatus` | integer | `0` 删除,`1` 开启,`2` 关闭 |
| `trafficCutoffThreshold` | number | 达量阈值,单位为 MB;开启时必须大于 `0` |
| `remark` | string | 配置批次备注 |
> 每个 `cards[]` 明细中的`iccid`、`msisdn`、`imsi` 三码至少传一个。`trafficCutoffStatus=0`时表示取消达量断网配置。
请求示例:
```json
{
"appId": "CUS-202608-0001",
"cards": [
{
"iccid": "89860401785462635152"
}
],
"trafficCutoffStatus": 1,
"trafficCutoffThreshold": 1024,
"remark": "客户批量开启达量断网"
}
```
响应字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `batchNo` | string | 系统生成的达量断网配置批次号 |
| `batchType` | integer | 批次类型,达量断网配置为 `41` |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"batchNo": "TCC20260910153546001000001",
"batchType": 41
},
"error": null
}
```
+79
View File
@@ -0,0 +1,79 @@
---
title: 概览与鉴权
description: iotLCM V3 接口概览与鉴权说明
outline: deep
---
# 概览与鉴权
## 服务地址
```text
https://api.iotlcm.example.com
```
HTTP(`http://api.iotlcm.example.com`)仅为存量兼容保留,不做自动跳转,新接入请使用 HTTPS。
## 统一返回结构
V3 返回格式:
```json
{
"code": 0,
"message": "",
"data": {},
"error": null
}
```
字段说明:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| code | number | 业务状态码,成功为 `0` |
| message | string | 错误或提示信息 |
| data | object | 业务数据 |
| error | any | 错误信息字段 |
## 公共字典
卡状态编码
| 编码 | 说明 |
| :-: | :-: |
| 0 | 未知 |
| 1 | 待激活 |
| 2 | 已激活 |
| 4 | 停机 |
| 6 | 可测试 |
| 7 | 库存 |
| 8 | 预销户 |
| 9 | 已销户 |
## V3 鉴权
V3 路由前缀:
```text
/openapi/v3/query
/openapi/v3/change
```
文档中的“请求示例”仅展示请求 body;调用 V3 POST 接口时,请设置 `Content-Type: application/json` 并将示例 JSON 作为请求体发送。请求路径和鉴权请求头见各接口说明。
除获取 token 接口外,其他 V3 接口需要请求头:
```http
X-Access-Token: {accessToken}
```
也支持传入带 `Bearer ` 前缀的值,服务端会去掉前缀。
::: info 重要:请求体中的 appId 必须正确
先调用 `/openapi/v3/query/token` 获取 token,接口响应中会返回 `data.appId`(客户组织编码,格式如 `CUS-202601-0001`)。**后续调用所有 V3 接口时,请求体都必须传入这个 `appId` 值**,且要与 token 所属的客户组织匹配,否则返回 `code: 61 "登录已过期"`。
⚠️ **不要把 `appKey`(API 账号标识)当成 `appId` 使用。** `appKey` 只用于获取 token。
:::
权限控制:调用接口需具备对应接口资源的访问权限,权限与 API 账号所属权限组关联。未配置资源时,按当前开放策略放行。
+783
View File
@@ -0,0 +1,783 @@
---
title: 查询类
description: iotLCM V3 查询类接口
outline: deep
---
# 查询类
## 单卡基本信息查询
```http
POST /openapi/v3/query/sim-info
```
请求头:
```http
X-Access-Token: {accessToken}
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| appId | string | 客户组织编码 |
| iccid | string | ICCID,`iccid`、`msisdn`、`imsi` 至少传一个 |
| msisdn | string | MSISDN |
| imsi | string | IMSI |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"iccid": "898604F4152391115474"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.iccid` | string | ICCID |
| `data.msisdn` | string | MSISDN |
| `data.imsi` | string | IMSI |
| `data.imei` | string | IMEI |
| `data.username` | string | 当前归属客户/组织名称 |
| `data.location` | string | 归属地 |
| `data.planCategory` | string | 套餐分类 |
| `data.currentPlanName` | string | 当前套餐名称 |
| `data.plangroup` | string | 套餐分组,未配置时为空字符串 |
| `data.planid` | string | 当前套餐编码 |
| `data.appid` | string | 归属客户组织编码 |
| `data.allowPlanChange` | number | 是否允许改套餐,未启用时返回 `0` |
| `data.lastSyncTime` | string | 状态最后同步时间 |
| `data.accessType` | string | 接入方式 |
| `data.cardStatus` | string | 卡状态 |
| `data.cardType` | any | 卡类型 |
| `data.networkType` | any | 网络类型 |
| `data.activationDate` | string | 出库/激活相关日期 |
| `data.activeDate` | string | 当前套餐生效日期 |
| `data.validityPeriod` | number | 有效期,按月份计算 |
| `data.expiryDate` | string | 当前套餐到期日期 |
| `data.testPeriod` | number | 测试期,未启用时返回 `0` |
| `data.testPeriodExpiryDate` | any | 测试期到期时间,未启用时返回 `null` |
| `data.silentPeriod` | number | 沉默期,未启用时返回 `0` |
| `data.silentPeriodExpiryDate` | any | 沉默期到期时间,未启用时返回 `null` |
| `data.dataService` | number | 数据服务状态,`1` 启用,`0` 禁用 |
| `data.planData` | number | 套餐总流量,单位 MB |
| `data.usedData` | number | 已用流量,单位 MB |
| `data.remainingData` | string | 剩余流量,单位 MB |
| `data.smsService` | number | 短信服务状态 |
| `data.planSMS` | number | 套餐短信总量 |
| `data.usedSMS` | number | 已用短信数 |
| `data.remainingSMS` | string | 剩余短信数 |
| `data.voiceService` | number | 语音服务状态 |
| `data.planMinutes` | number | 套餐语音分钟数 |
| `data.usedMinutes` | number | 已用语音分钟数 |
| `data.remainingMinutes` | string | 剩余语音分钟数 |
| `data.internationalRoamingService` | number | 国际漫游服务状态 |
| `data.planInternationalData` | number | 国际漫游套餐流量 |
| `data.usedInternationalData` | number | 已用国际漫游流量 |
| `data.remainingInternationalData` | string | 剩余国际漫游流量 |
| `data.description` | any | 备注描述,未填写时返回 `null` |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"iccid": "898604F4152391115474",
"imei": "",
"username": "示例企业",
"location": "370100000000",
"planCategory": "移动小流量",
"currentPlanName": "每月100m3年",
"plangroup": "",
"planid": "yd-100m-3y",
"appid": "CUS-202601-0001",
"allowPlanChange": 0,
"lastSyncTime": "2026-06-24 00:03:19",
"accessType": "",
"cardStatus": "已激活",
"cardType": "",
"networkType": "",
"activationDate": "2026-06-01",
"activeDate": "2026-06-01",
"validityPeriod": 32,
"expiryDate": "2029-01-31",
"testPeriod": 0,
"testPeriodExpiryDate": null,
"silentPeriod": 0,
"silentPeriodExpiryDate": null,
"dataService": 1,
"planData": 100,
"usedData": 0.875,
"remainingData": "99.1",
"smsService": 1,
"planSMS": 0,
"usedSMS": 0,
"remainingSMS": "0",
"voiceService": 1,
"planMinutes": 0,
"usedMinutes": 0,
"remainingMinutes": "0",
"internationalRoamingService": 0,
"planInternationalData": 0,
"usedInternationalData": 0,
"remainingInternationalData": "0.0",
"description": null
},
"error": null
}
```
## 单卡状态信息查询
```http
POST /openapi/v3/query/sim-status
```
请求头:
```http
X-Access-Token: {accessToken}
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | token 返回的客户组织编码 |
| `iccid` | string | ICCID;与 `msisdn`、`imsi` 至少传一个 |
| `msisdn` | string | MSISDN |
| `imsi` | string | IMSI |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"iccid": "898604F4152391115474"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 业务状态码,成功为 `0` |
| `message` | string | 错误或提示信息 |
| `data.iccid` | string | ICCID,查询命中时返回 |
| `data.lifeCycle` | number | 卡生命周期状态编码 |
| `data.lifeCycleName` | string | 卡生命周期状态文字 |
| `error` | any | 错误信息字段 |
响应示例(查询命中):
```json
{
"code": 0,
"message": "",
"data": {
"iccid": "898604F4152391115474",
"lifeCycle": 2,
"lifeCycleName": "已激活"
},
"error": null
}
```
响应示例(未命中):
```json
{
"code": 50,
"message": "查询sim卡信息失败,请确认ICCID,MSISDN,IMSI是否正确",
"data": {},
"error": null
}
```
`lifeCycleName` 为状态文字;`lifeCycle` 是此接口的状态编码,不要与其他接口或字典中的状态编码混用。
## 单卡流量限额查询
```http
POST /openapi/v3/query/sim-limit
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `iccid` | string | ICCID |
| `msisdn` | string | MSISDN |
| `imsi` | string | IMSI |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"iccid": "898604F4152391115474"
}
```
响应字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.trafficCutoffStatus` | integer | 达量断网状态:`0` 未配置、`1` 已开启、`2` 已关闭 |
| `data.trafficCutoffName` | string | 状态名称,返回 `未配置`、`已开启` 或 `已关闭` |
| `data.trafficCutoffThreshold` | number | 达量断网阈值,单位 MB |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"trafficCutoffStatus": 1,
"trafficCutoffName": "已开启",
"trafficCutoffThreshold": 1024
},
"error": null
}
```
## 单卡实时终端 IMEI 查询
```http
POST /openapi/v3/query/sim-imei
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| appId | string | 客户组织编码 |
| iccid | string | ICCID |
| msisdn | string | MSISDN |
| imsi | string | IMSI |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"iccid": "898604F4152391115474"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.imei` | string | IMEI |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"imei": ""
},
"error": null
}
```
## 单卡本月流量使用量查询
```http
POST /openapi/v3/query/sim-usage
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| appId | string | 客户组织编码 |
| iccid | string | ICCID |
| msisdn | string | MSISDN |
| imsi | string | IMSI |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"iccid": "898604F4152391115474"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.useUnit` | string | 流量单位,固定为 `MB` |
| `data.useAmount` | number | 当前周期已用流量 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"useUnit": "MB",
"useAmount": 0.875
},
"error": null
}
```
## 物联网卡批量状态信息查询
```http
POST /openapi/v3/query/sim-status-batch
```
单次最多查询 1000 张卡。每张卡至少提供 `iccid`、`msisdn`、`imsi` 中的一个;同一条记录提供多个标识时,必须对应同一张卡。
请求头:
```http
X-Access-Token: {accessToken}
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | token 返回的客户组织编码,示例为 `CUS-202601-0001` |
| `cards` | array | 卡片标识列表;示例包含 3 张卡,单次最多 1000 项 |
| `cards[].iccid` | string | ICCID;示例中每项均使用 ICCID,实际调用时与 `msisdn`、`imsi` 至少传一个 |
| `cards[].msisdn` | string | MSISDN,可代替 ICCID 标识卡片 |
| `cards[].imsi` | string | IMSI,可代替 ICCID 标识卡片 |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"cards": [
{
"iccid": "898604F4152391115473"
},
{
"iccid": "898604F4152391115474"
},
{
"iccid": "8986112223600594371"
}
]
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 业务状态码,成功为 `0` |
| `message` | string | 错误或提示信息 |
| `data.total` | integer | 本次请求的卡片总数;示例为 `3` |
| `data.matchedCount` | integer | 匹配成功的卡片数量;示例为 `3` |
| `data.notFoundCount` | integer | 未匹配成功的卡片数量;示例为 `0` |
| `data.items` | array | 每张卡的查询结果;示例依次对应请求中的 3 张卡 |
| `data.items[].matched` | boolean | 是否匹配成功;示例中均为 `true` |
| `data.items[].iccid` | string | 匹配成功时返回的 ICCID |
| `data.items[].lifeCycle` | number | 匹配成功时返回的卡生命周期状态编码;示例中 `2` 为已激活 |
| `data.items[].lifeCycleName` | string | 匹配成功时返回的卡生命周期状态文字 |
| `data.items[].errorCode` | string | 匹配失败时返回的错误码;示例均匹配成功,因此未返回 |
| `data.items[].errorMessage` | string | 匹配失败时返回的错误说明;示例均匹配成功,因此未返回 |
| `error` | any | 错误信息字段 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"total": 3,
"matchedCount": 3,
"notFoundCount": 0,
"items": [
{
"matched": true,
"iccid": "898604F4152391115473",
"lifeCycle": 2,
"lifeCycleName": "已激活"
},
{
"matched": true,
"iccid": "898604F4152391115474",
"lifeCycle": 2,
"lifeCycleName": "已激活"
},
{
"matched": true,
"iccid": "8986112223600594371",
"lifeCycle": 2,
"lifeCycleName": "已激活"
}
]
},
"error": null
}
```
## 物联网卡批量流量信息查询
```http
POST /openapi/v3/query/sim-usage-batch
```
单次最多查询 1000 张卡。请求体需传入 `appId` 和 `cards` 数组;数组中的每张卡至少提供 `iccid`、`msisdn`、`imsi` 中的一个。同一条记录提供多个标识时,必须对应同一张卡。
请求头:
```http
X-Access-Token: {accessToken}
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | token 返回的客户组织编码 |
| `cards` | array | 卡片标识列表,单次最多 1000 项 |
| `cards[].iccid` | string | ICCID;每项与 `msisdn`、`imsi` 至少传一个 |
| `cards[].msisdn` | string | MSISDN,可代替 ICCID 标识卡片 |
| `cards[].imsi` | string | IMSI,可代替 ICCID 标识卡片 |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"cards": [
{
"iccid": "898604F4152391115474"
},
{
"iccid": "898604F4152391115473"
},
{
"iccid": "8986112223600594371"
}
]
}
```
响应结构(流量单位为 MB):
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 业务状态码,成功为 `0` |
| `message` | string | 错误或提示信息 |
| `data.total` | integer | 本次请求的卡片总数 |
| `data.matchedCount` | integer | 匹配成功的卡片数量 |
| `data.notFoundCount` | integer | 未匹配成功的卡片数量 |
| `data.items` | array | 每张卡的查询结果 |
| `data.items[].matched` | boolean | 是否匹配成功 |
| `data.items[].iccid` | string | 匹配成功时返回的 ICCID |
| `data.items[].useUnit` | string | 流量单位,示例为 `MB` |
| `data.items[].useAmount` | number | 流量使用量 |
| `data.items[].errorCode` | string | 匹配失败时返回的错误码;匹配成功时不返回 |
| `data.items[].errorMessage` | string | 匹配失败时返回的错误说明;匹配成功时不返回 |
| `error` | any | 错误信息字段 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"total": 3,
"matchedCount": 3,
"notFoundCount": 0,
"items": [
{
"matched": true,
"iccid": "898604F4152391115474",
"useUnit": "MB",
"useAmount": 0.875
},
{
"matched": true,
"iccid": "898604F4152391115473",
"useUnit": "MB",
"useAmount": 12.5
},
{
"matched": true,
"iccid": "8986112223600594371",
"useUnit": "MB",
"useAmount": 36.25
}
]
},
"error": null
}
```
## 物联网卡批量 IMEI 查询
```http
POST /openapi/v3/query/sim-imei-batch
```
单次最多查询 1000 张卡。每张卡至少提供 `iccid`、`msisdn`、`imsi` 中的一个;同一条记录提供多个标识时,必须对应同一张卡。
请求头:
```http
X-Access-Token: {accessToken}
```
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | token 返回的客户组织编码 |
| `cards` | array | 卡片标识列表,单次最多 1000 项 |
| `cards[].iccid` | string | ICCID;每项与 `msisdn`、`imsi` 至少传一个 |
| `cards[].msisdn` | string | MSISDN,可代替 ICCID 标识卡片 |
| `cards[].imsi` | string | IMSI,可代替 ICCID 标识卡片 |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"cards": [
{
"iccid": "898604F4152391115474"
},
{
"iccid": "898604F4152391115473"
},
{
"msisdn": "1441543605474"
}
]
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | number | 业务状态码,成功为 `0` |
| `message` | string | 错误或提示信息 |
| `data.total` | integer | 本次请求的卡片总数 |
| `data.matchedCount` | integer | 匹配成功的卡片数量 |
| `data.notFoundCount` | integer | 未匹配成功的卡片数量 |
| `data.items` | array | 每张卡的查询结果,顺序与请求中的 `cards` 一致 |
| `data.items[].matched` | boolean | 是否匹配成功 |
| `data.items[].iccid` | string | 匹配成功时返回的 ICCID |
| `data.items[].imei` | string | IMEI;尚未采集到该卡 IMEI 时为空字符串 |
| `data.items[].errorCode` | string | 匹配失败时返回的错误码;匹配成功时不返回 |
| `data.items[].errorMessage` | string | 匹配失败时返回的错误说明;匹配成功时不返回 |
| `error` | any | 错误信息字段 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"total": 3,
"matchedCount": 2,
"notFoundCount": 1,
"items": [
{
"matched": true,
"iccid": "898604F4152391115474",
"imei": ""
},
{
"matched": true,
"iccid": "898604F4152391115473",
"imei": "865466070817587"
},
{
"matched": false,
"imei": "",
"errorCode": "CARD_NOT_FOUND",
"errorMessage": "卡片不存在或无权限"
}
]
},
"error": null
}
```
## 物联网卡批量限额信息查询
```http
POST /openapi/v3/query/traffic-cutoff-config
```
根据卡片标识批量查询当前达量断网配置。`cards[]` 中的 `iccid`、`msisdn`、`imsi` 三码至少传一个。
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `cards` | array | 卡片标识列表 |
| `cards[].iccid` | string | ICCID |
| `cards[].msisdn` | string | MSISDN |
| `cards[].imsi` | string | IMSI |
| `includeUsage` | boolean | 是否返回套餐和流量使用信息 |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"cards": [
{
"iccid": "898604F4152391115474"
},
{
"iccid": "898604F4152391115475"
},
{
"iccid": "898604F4152391115476"
}
],
"includeUsage": true
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.total` | integer | 请求中的卡片数量 |
| `data.matchedCount` | integer | 匹配成功的卡片数量 |
| `data.notFoundCount` | integer | 未匹配成功的卡片数量 |
| `data.items` | array | 每张卡的查询结果 |
| `data.items[].matched` | boolean | 是否匹配成功 |
| `data.items[].iccid` | string | 平台返回的 ICCID |
| `data.items[].trafficCutoffStatus` | integer | 达量断网状态:`0` 未配置、`1` 已开启、`2` 已关闭 |
| `data.items[].trafficCutoffStatusName` | string | 达量断网状态名称 |
| `data.items[].trafficCutoffThreshold` | number | 达量断网阈值,单位 MB |
| `data.items[].trafficCutoffThresholdUnit` | string | 阈值单位,固定为 `MB` |
| `data.items[].packageTotalFlowMb` | number | 套餐总流量;`includeUsage=true` 时返回 |
| `data.items[].usedFlowMb` | number | 已用流量;`includeUsage=true` 时返回 |
| `data.items[].remainingFlowMb` | number | 剩余流量;`includeUsage=true` 时返回 |
| `data.items[].errorCode` | string | 匹配失败时返回 |
| `data.items[].errorMessage` | string | 匹配失败时返回 |
响应示例:
以下状态、阈值和流量数值用于展示批量响应结构,实际结果以接口查询为准。
```json
{
"code": 0,
"message": "",
"data": {
"total": 3,
"matchedCount": 3,
"notFoundCount": 0,
"items": [
{
"matched": true,
"iccid": "898604F4152391115474",
"trafficCutoffStatus": 0,
"trafficCutoffStatusName": "未配置",
"trafficCutoffThreshold": 0,
"trafficCutoffThresholdUnit": "MB",
"packageTotalFlowMb": 0,
"usedFlowMb": 18,
"remainingFlowMb": 0
},
{
"matched": true,
"iccid": "898604F4152391115475",
"trafficCutoffStatus": 1,
"trafficCutoffStatusName": "已开启",
"trafficCutoffThreshold": 100,
"trafficCutoffThresholdUnit": "MB",
"packageTotalFlowMb": 200,
"usedFlowMb": 80,
"remainingFlowMb": 120
},
{
"matched": true,
"iccid": "898604F4152391115476",
"trafficCutoffStatus": 2,
"trafficCutoffStatusName": "已关闭",
"trafficCutoffThreshold": 50,
"trafficCutoffThresholdUnit": "MB",
"packageTotalFlowMb": 100,
"usedFlowMb": 30,
"remainingFlowMb": 70
}
]
},
"error": null
}
```
## 批次状态查询
```http
POST /openapi/v3/query/batch-status
```
根据指定批次号查询异步处理状态,支持续费、达量断网等异步批次。
请求参数:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `appId` | string | 客户组织编码 |
| `batchNo` | string | 异步 API 返回的批次号 |
请求示例:
```json
{
"appId": "CUS-202601-0001",
"batchNo": "REN20260910153546001000001"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `data.batchNo` | string | 请求中的批次号 |
| `data.batchAsyncStatus` | integer | 异步状态:`0` 已创建、`1` 待处理、`2` 处理中、`3` 成功、`4` 失败、`5` 部分成功 |
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"batchNo": "REN20260910153546001000001",
"batchAsyncStatus": 3
},
"error": null
}
```
+57
View File
@@ -0,0 +1,57 @@
---
title: 获取调用凭证
description: 使用 appKey、appSecret 换取 V3 接口调用凭证
outline: deep
---
# 获取调用凭证
```http
POST /openapi/v3/query/token
```
说明:使用 `appKey`、`appSecret` 换取接口调用凭证。
请求体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| appKey | string | API 账号标识,在管理后台申请获取 |
| appSecret | string | API 密钥,在管理后台申请获取 |
| refresh | string | 是否刷新 token:`1` 强制生成新 token,`0` 或留空时尽量复用已有 token |
请求示例:
```json
{
"appKey": "YOUR_APP_ID",
"appSecret": "YOUR_APP_SECRETebdebae9763127943f097758e029a0fdbc"
}
```
响应结构:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| data.appId | string | 客户组织编码,**后续所有接口请求体中都要传入此值** |
| data.accessToken | string | 接口调用凭证,后续放入 `X-Access-Token` |
::: info 注意:appId ≠ appKey
- **`appKey`**(如 `SDYZ`)只用于获取 token,调用 `/openapi/v3/query/token` 后就不再需要
- **`appId`**(如 `CUS-202601-0001`)由 token 接口返回,后续调用 sim-info 等接口时,请求体中的 `appId` 字段必须填这个值
- 如果传错会导致 `code: 61 "登录已过期"` 错误
:::
响应示例:
```json
{
"code": 0,
"message": "",
"data": {
"appId": "CUS-202601-0001",
"accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJ1IjoiZWE3ZjJiZGY5MjQyNDFkZjg3NGIwZDMzNmZkN2UzMzEiLCJleHAiOjE3ODQ3MDAyODB9.JiYK-CXdXQKKU0UNhNOqKX5Hzyk4lVMtIpunQJDxlBI"
},
"error": null
}
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB