--- 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 map, String key) { List 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 map = new HashMap<>(); Map parmap = new HashMap<>(); Map 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); } ```