@chenpbh
2017-12-18T12:04:22.000000Z
字数 10448
阅读 612
接口文档
| 版本 | 日期 | 人员 | 变更内容 |
|---|---|---|---|
| 1.0 | 2016-11-30 | 陈鹏 | 版本初定义 |
| 1.1 | 2016-12-01 | 陈鹏 | 实时数据接口路径改动 |
| 1.2 | 2016-12-14 | 陈鹏 | 增加历史数据接口 |
*xxxxxxxxx*
- AES_KEY:********
- TOKEN:***************
上面两项数据需要申请开通才能提供
public static String encrypt(String content) {try {if (StringUtil.isEmpty(content))return "";String password = AES_KEY;KeyGenerator kgen = KeyGenerator.getInstance("AES");SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());kgen.init(128, secureRandom);SecretKey secretKey = kgen.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");Cipher cipher = Cipher.getInstance("AES");// 创建密码器byte[] byteContent = content.getBytes("utf-8");cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化byte[] result = cipher.doFinal(byteContent);String str = Base64.encode(result);return str; // 加密} catch (NoSuchAlgorithmException e) {// e.printStackTrace();} catch (NoSuchPaddingException e) {// e.printStackTrace();} catch (InvalidKeyException e) {// e.printStackTrace();} catch (UnsupportedEncodingException e) {// e.printStackTrace();} catch (IllegalBlockSizeException e) {// e.printStackTrace();} catch (BadPaddingException e) {// e.printStackTrace();}return null;}
/*** 解密* @param str 待解密内容* @return*/public static String decrypt(String str) {try {String password = AES_KEY;byte[] content = Base64.decode(str);KeyGenerator kgen = KeyGenerator.getInstance("AES");SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());kgen.init(128, secureRandom);SecretKey secretKey = kgen.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");Cipher cipher = Cipher.getInstance("AES");// 创建密码器cipher.init(Cipher.DECRYPT_MODE, key);// 初始化byte[] result = cipher.doFinal(content);return new String(result); // 加密} catch (NoSuchAlgorithmException e) {// e.printStackTrace();} catch (NoSuchPaddingException e) {// e.printStackTrace();} catch (InvalidKeyException e) {// e.printStackTrace();} catch (IllegalBlockSizeException e) {// e.printStackTrace();} catch (BadPaddingException e) {// e.printStackTrace();}catch (Exception e){// e.printStackTrace();}return "";}
1、 统一采用Http Post请求;
2、 接口请求时,要求将token存放到请求头中,供双方验证。请求头应包含以下信息:
| 属性 | 值 | 描述 |
|---|---|---|
| Content-type | application/json;charset=UTF-8 | |
| Authorization | bearer token | 其中token为上面提供的字符串 |
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/services/realData
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| vins | true | String | VIN列表,用逗号分隔 |
| dataIds | true | String | 数据项ID,用逗号分隔 |
{"requestMsg": "xo6+oObvQ071Qw0U9pZn/+QOJsQYcX4YJGKH+Q1j/gdpKaDseLWzM3mOsT9LdYWKgB/8DcZSynck2s5Xi504fGWxpOM1Cvd8Ne7T6/2r0eU=", //这里的requestMsg为请求内容体转化json之后,再进行AES加密得到的字符串,不同的aes-key加密得到的结果不一样"sign": ""}//原始的请求内容体{"dataIds":"2615,2202","vins":"LNBSCB3F0FD120736,LNBSCB3F1FD120728"}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"vin1": {"2502": "40.111","2503": "120.0"},"vin2": {"2502": "40.111","2503": "120.5"},"vin3": {"2502": "40.111","2503": "120.5"}}}
/services/hisData
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| vins | true | String | 车辆vin |
| dataIds | true | String | 数据项ID,用逗号分隔 |
| startTime | true | String | 开始时间,精确到秒 |
| endTime | true | String | 结束时间,精确到秒 |
{"dataIds":"2502,2503","vin":"LNBSCB3F0FD120736","startTime":"2016-10-10 10:22:00","startTime":"2016-10-10 10:23:00",}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"total": "3","rows":[{"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},{"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},{"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},]}}
/services/addOrUpdate
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| size | true | String | 车辆vin |
| rows | true | List | 车辆静态数据列表 |
{"size":2,"rows": [{"operType": 0, //操作类型,0:新增 1:变更(传入VIN及需变更项)"licensePlate":"京A12346", //车牌号"vin":"12346", //VIN"rule":"0", //规约 0:GB/T 32960-3 1:DB11-北京地标"useUnit":"郑州客车股份有限公司", //车辆运营单位 **可为空**"storePoint":"郑州客车股份有限公司", //车辆存放地点 **可为空**"manuUnit":"郑州客车股份有限公司(汽车厂商)", //车辆制造厂商"vehType":"电动公交车", //车辆类别"vehModel":"ZK6805BEVG17A", //车辆类型"batchId":"489", //车辆生产批次 **可为空**"termUnit":"深圳科技股份有限公司", //终端厂商"tremModel":"YT_G2_v02/S_v02", //终端类型"driveMode":"0", //驱动方式 0:纯电动 1:油电混合"vehArea":"深圳", //车辆销售区域"ownerPeople":"小李", //车主姓名 **可为空**"connecterPeople":"小张", //联系人姓名 **可为空**"simCard":"1.0", //SIM卡号"iccid":"12346", //iccid **可为空**"factoryDate":"2017-04-11", //出厂日期"isSmsAlarm":"0", //发送故障短信 0:否 1:是"vehStatus":"0" //车辆状态 0:待销售 1:已销售 2:已报废 3:测试车辆}{"operType": 0, //操作类型,0:新增 1:变更"licensePlate":"京A12347", //车牌号......}]}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填(返回成功条数)。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "OK","data": {"count": "2"}}
/services/del
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| size | true | String | 车辆数 |
| rows | true | List | 车辆VIN列表 |
{"size":2,"rows": ["12346","12346" ]}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填(返回成功条数)。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "OK","data": {"count": "2"}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/services/stateData
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| vins | true | String | VIN列表,用逗号分隔 |
//原始请求内容体{"size":2,"rows": ["LNBSCB3F0FD120736","LNBSCB3F1FD120728" ]}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | object | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "OK","rows": {"LNBSCB3F0FD120736":{"licensePlate":"京A12346", //车牌号"vin":"LNBSCB3F0FD120736", //VIN"rule": //规约 0:GB/T 32960-3 1:DB11-北京地标"useUnit":"郑州客车股份有限公司", //车辆运营单位"storePoint":"郑州客车股份有限公司", //车辆存放地点"manuUnit":"郑州客车股份有限公司(汽车厂商)", //车辆制造厂商"vehType":"电动公交车", //车辆类别"vehModel":"ZK6805BEVG17A", //车辆类型"termUnit":"深圳科技股份有限公司", //终端厂商"termModel":"YT_G2_v02/S_v02", //终端类型"driveMode":"0", //驱动方式 0:纯电动 1:油电混合..."vehArea":"深圳", //车辆销售区域"ownerPeople":"小李", //车主姓名"connecterPeople":"小张", //联系人姓名"simCard":"1.0", //SIM卡号"factoryDate":"2017-04-11", //出厂日期"firstReg":"2017-04-11", //首次上线时间"singleMileageSum":"0" //单次行驶里程总和"mileageSum":"0" //累计行驶里程}"LNBSCB3F1FD120728":{"licensePlate":"京A12347", //车牌号"vin":"LNBSCB3F1FD120728", //VIN......}}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/services/realData
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| vins | true | String | VIN列表,用逗号分隔 |
| dataIds | true | String | 数据项ID,用逗号分隔 |
//原始的请求内容体{"dataIds":"2201,2202,2203,2204,2214,2613,2615,2301,2603,2606,2609,2612,2209,2208,2213,2205,3201,2614,2617","vins":"LNBSCB3F0FD120736,LNBSCB3F1FD120728"}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"LNBSCB3F0FD120736": {"2201": "40.5",//车速 km/h"2202": "120.0",//里程 km"2203": "1",//挡位"2204": "1",//制动状态"2214": "1",//DC-DC状态"2613": "120",//总电压"2615": "40",//soc"2301": "0x01",//充电状态(0x01:停车充电;0x02:行驶充电;0x03:未充电状态;0x04:充 //电完成;“0xFE”表示异常,“0xFF”表示无效。)"2603": "40.5",//单体电池最高电圧"2606": "120.0",//单体电池最低电压"2609": "40.5",//电池最高温度"2612": "120.0",//电池最低温度"2209": "40.5",//制动踏板行程值"2208": "120.0",//加速踏板行程值"2213": "1",//运行模式"2205": "1",//驱动状态"3201": "1",//车辆状态(0:待质检;1:待销售;2:已销售;3:已报废;4:测试车辆)"2614": "40.5",//总电流"2617": "120.0",//正极对地电阻(绝缘电阻)},"LNBSCB3F1FD120728": {"2201": "40.5",//车速 km/h"2202": "120.0",//里程 km......}}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/VehUnitService/getVehMilByUnit
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
该接口不需要输入参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"mileage": "100000"//该企业下所有车辆的运行总里程(单位:KM)}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/VehUnitService/getVehCountByUnit
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
该接口不需要输入参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"count": "100000"//该企业下所有车辆数(单位:辆)}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/VehUnitService/getVehOnlineByUnit
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
该接口不需要输入参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"count": "10000"//该企业当前在线车辆数(单位:辆)}}
发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。
/VehUnitService/getVehProByUnit
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
该接口不需要输入参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"total": "3",//总记录数"rows":[{"province":"山东省","count":"10000"},//province:**省份名** count:**该省车辆总数**{"province":"山西省","count":"1100"},{"province":"河北省","count":"9000"}]}}
/portocolServices/messageQuery
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| vids | true | String | 车辆vid,以逗号分割 |
| startTime | true | String | 开始时间,精确到秒 |
| endTime | true | String | 结束时间,精确到秒 |
| page | true | int | 页码 |
| pageRecorders | true | int | 每页条数 |
| type | true | String | 报文类型 |
//原始的请求内容体{"vids":"LTGACUL51HT000052,LVVDB17B8FB062306","startTime":"2016-10-10 10:22:00","endTime":"2016-10-10 10:23:00","page":1,"pageRecorders":10,"type":"0"//"0":全部 "1":车辆登入 "2":实时信息上报 "3":补发信息上报 "4":车辆登出 "5":平台登入 "6":平台登出 "7":心跳 "8":终端校时(国标)}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"LTGACUL51HT000052": {"licensePlate": "",//车牌"vin": "",//VIN"srvrRecvTime": "",//服务器接收时间"recvTime": "",//报文时间"type": "",//类型"verify": "",//校验"dataLength": "",//报文长度"data": ""//原始报文},"LVVDB17B8FB062306": {"licensePlate": "",//车牌"vin": "",//VIN......}}}
/portocolServices/uploadMessage
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| requestMsg | true | String | 请求内容体 |
| sign | true | String | 签名值,暂时留空,为以后扩展 |
请求内容体定义
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| data | true | String | 原始报文 |
//原始的请求内容体{"data":""}
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| code | true | int | 响应码 |
| msg | true | String | 响应提示 |
| data | true | String | 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理 |
{"code": 0,"msg": "查询成功","data": {"srcCode": "",//原始报文"dataJson": ""//解析报文}}
| 值 | 描述 |
|---|---|
| 0 | 请求正确 |
| 1001 | token不合法 |
| 1002 | 参数缺失 |
| 1003 | 其他错误 |
| 编号 | 数据项名称 | 描述 |
|---|---|---|
| 2615 | soc | 单位为% |
| 2202 | 里程 | 单位KM |
| 2502 | 经度 | 单位度 |
| 2503 | 纬度 | 单位度 |
| 2201 | 速度 | 单位KM/S |