[关闭]
@chenpbh 2017-12-18T12:04:22.000000Z 字数 10448 阅读 473

新源开放数据外部接口

接口文档


变更历史

版本 日期 人员 变更内容
1.0 2016-11-30 陈鹏 版本初定义
1.1 2016-12-01 陈鹏 实时数据接口路径改动
1.2 2016-12-14 陈鹏 增加历史数据接口

1 概要

1.1 地址

*xxxxxxxxx*

1.2 账号信息

  • AES_KEY:********
  • TOKEN:***************
    上面两项数据需要申请开通才能提供

1.3 加密算法

  1. public static String encrypt(String content) {
  2. try {
  3. if (StringUtil.isEmpty(content))
  4. return "";
  5. String password = AES_KEY;
  6. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  7. SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
  8. secureRandom.setSeed(password.getBytes());
  9. kgen.init(128, secureRandom);
  10. SecretKey secretKey = kgen.generateKey();
  11. byte[] enCodeFormat = secretKey.getEncoded();
  12. SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
  13. Cipher cipher = Cipher.getInstance("AES");// 创建密码器
  14. byte[] byteContent = content.getBytes("utf-8");
  15. cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
  16. byte[] result = cipher.doFinal(byteContent);
  17. String str = Base64.encode(result);
  18. return str; // 加密
  19. } catch (NoSuchAlgorithmException e) {
  20. // e.printStackTrace();
  21. } catch (NoSuchPaddingException e) {
  22. // e.printStackTrace();
  23. } catch (InvalidKeyException e) {
  24. // e.printStackTrace();
  25. } catch (UnsupportedEncodingException e) {
  26. // e.printStackTrace();
  27. } catch (IllegalBlockSizeException e) {
  28. // e.printStackTrace();
  29. } catch (BadPaddingException e) {
  30. // e.printStackTrace();
  31. }
  32. return null;
  33. }

1.4 解密算法

  1. /**
  2. * 解密
  3. * @param str 待解密内容
  4. * @return
  5. */
  6. public static String decrypt(String str) {
  7. try {
  8. String password = AES_KEY;
  9. byte[] content = Base64.decode(str);
  10. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  11. SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
  12. secureRandom.setSeed(password.getBytes());
  13. kgen.init(128, secureRandom);
  14. SecretKey secretKey = kgen.generateKey();
  15. byte[] enCodeFormat = secretKey.getEncoded();
  16. SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
  17. Cipher cipher = Cipher.getInstance("AES");// 创建密码器
  18. cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
  19. byte[] result = cipher.doFinal(content);
  20. return new String(result); // 加密
  21. } catch (NoSuchAlgorithmException e) {
  22. // e.printStackTrace();
  23. } catch (NoSuchPaddingException e) {
  24. // e.printStackTrace();
  25. } catch (InvalidKeyException e) {
  26. // e.printStackTrace();
  27. } catch (IllegalBlockSizeException e) {
  28. // e.printStackTrace();
  29. } catch (BadPaddingException e) {
  30. // e.printStackTrace();
  31. }catch (Exception e){
  32. // e.printStackTrace();
  33. }
  34. return "";
  35. }

1.5 请求规范

1、 统一采用Http Post请求;
2、 接口请求时,要求将token存放到请求头中,供双方验证。请求头应包含以下信息:

属性 描述
Content-type application/json;charset=UTF-8
Authorization bearer token 其中token为上面提供的字符串

2. 接口列表

2.1 车辆相关

2.1.1 实时数据

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/services/realData

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
vins true String VIN列表,用逗号分隔
dataIds true String 数据项ID,用逗号分隔
  1. {
  2. "requestMsg": "xo6+oObvQ071Qw0U9pZn/+QOJsQYcX4YJGKH+Q1j/gdpKaDseLWzM3mOsT9LdYWKgB/8DcZSynck2s5Xi504fGWxpOM1Cvd8Ne7T6/2r0eU=", //这里的requestMsg为请求内容体转化json之后,再进行AES加密得到的字符串,不同的aes-key加密得到的结果不一样
  3. "sign": ""
  4. }
  5. //原始的请求内容体
  6. {"dataIds":"2615,2202","vins":"LNBSCB3F0FD120736,LNBSCB3F1FD120728"}
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "vin1": {
  6. "2502": "40.111",
  7. "2503": "120.0"
  8. },
  9. "vin2": {
  10. "2502": "40.111",
  11. "2503": "120.5"
  12. },
  13. "vin3": {
  14. "2502": "40.111",
  15. "2503": "120.5"
  16. }
  17. }
  18. }

2.1.2 历史数据


/services/hisData

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
vins true String 车辆vin
dataIds true String 数据项ID,用逗号分隔
startTime true String 开始时间,精确到秒
endTime true String 结束时间,精确到秒
  1. {
  2. "dataIds":"2502,2503",
  3. "vin":"LNBSCB3F0FD120736",
  4. "startTime":"2016-10-10 10:22:00",
  5. "startTime":"2016-10-10 10:23:00",
  6. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "total": "3",
  6. "rows":[
  7. {"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},
  8. {"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},
  9. {"time":"2016-10-10:22:00","2502":"11.00000","2503":"22.00"},
  10. ]
  11. }
  12. }

2.1.3 新增/更新车辆


/services/addOrUpdate

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
size true String 车辆vin
rows true List 车辆静态数据列表
  1. {
  2. "size":2,
  3. "rows": [
  4. {
  5. "operType": 0 //操作类型,0:新增 1:变更(传入VIN及需变更项)
  6. "licensePlate":"京A12346", //车牌号
  7. "vin":"12346", //VIN
  8. "rule":"0", //规约 0:GB/T 32960-3 1:DB11-北京地标
  9. "useUnit":"郑州客车股份有限公司", //车辆运营单位 **可为空**
  10. "storePoint":"郑州客车股份有限公司", //车辆存放地点 **可为空**
  11. "manuUnit":"郑州客车股份有限公司(汽车厂商)", //车辆制造厂商
  12. "vehType":"电动公交车", //车辆类别
  13. "vehModel":"ZK6805BEVG17A", //车辆类型
  14. "batchId":"489", //车辆生产批次 **可为空**
  15. "termUnit":"深圳科技股份有限公司", //终端厂商
  16. "tremModel":"YT_G2_v02/S_v02", //终端类型
  17. "driveMode":"0", //驱动方式 0:纯电动 1:油电混合
  18. "vehArea":"深圳", //车辆销售区域
  19. "ownerPeople":"小李", //车主姓名 **可为空**
  20. "connecterPeople":"小张", //联系人姓名 **可为空**
  21. "simCard":"1.0", //SIM卡号
  22. "iccid":"12346", //iccid **可为空**
  23. "factoryDate":"2017-04-11", //出厂日期
  24. "isSmsAlarm":"0", //发送故障短信 0:否 1:是
  25. "vehStatus":"0" //车辆状态 0:待销售 1:已销售 2:已报废 3:测试车辆
  26. }
  27. {
  28. "operType": 0 //操作类型,0:新增 1:变更
  29. "licensePlate":"京A12347", //车牌号
  30. ......
  31. }
  32. ]
  33. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填(返回成功条数)。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "OK",
  4. "data": {
  5. "count": "2"
  6. }
  7. }

2.1.4 删除车辆


/services/del

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
size true String 车辆数
rows true List 车辆VIN列表
  1. {
  2. "size":2,
  3. "rows": ["12346","12346" ]
  4. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填(返回成功条数)。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "OK",
  4. "data": {
  5. "count": "2"
  6. }
  7. }

2.1.5 车辆静态数据

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/services/stateData

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
vins true String VIN列表,用逗号分隔
  1. //原始请求内容体
  2. {
  3. "size":2,
  4. "rows": ["LNBSCB3F0FD120736","LNBSCB3F1FD120728" ]
  5. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true object 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "OK",
  4. "rows": {
  5. "LNBSCB3F0FD120736":{
  6. "licensePlate":"京A12346", //车牌号
  7. "vin":"LNBSCB3F0FD120736", //VIN
  8. "rule": //规约 0:GB/T 32960-3 1:DB11-北京地标
  9. "useUnit":"郑州客车股份有限公司", //车辆运营单位
  10. "storePoint":"郑州客车股份有限公司", //车辆存放地点
  11. "manuUnit":"郑州客车股份有限公司(汽车厂商)", //车辆制造厂商
  12. "vehType":"电动公交车", //车辆类别
  13. "vehModel":"ZK6805BEVG17A", //车辆类型
  14. "termUnit":"深圳科技股份有限公司", //终端厂商
  15. "termModel":"YT_G2_v02/S_v02", //终端类型
  16. "driveMode":"0", //驱动方式 0:纯电动 1:油电混合...
  17. "vehArea":"深圳", //车辆销售区域
  18. "ownerPeople":"小李", //车主姓名
  19. "connecterPeople":"小张", //联系人姓名
  20. "simCard":"1.0", //SIM卡号
  21. "factoryDate":"2017-04-11", //出厂日期
  22. "firstReg":"2017-04-11", //首次上线时间
  23. "singleMileageSum":"0" //单次行驶里程总和
  24. "mileageSum":"0" //累计行驶里程
  25. }
  26. "LNBSCB3F1FD120728":{
  27. "licensePlate":"京A12347", //车牌号
  28. "vin":"LNBSCB3F1FD120728", //VIN
  29. ......
  30. }
  31. }
  32. }

2.1.6 整车实时数据

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/services/realData

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
vins true String VIN列表,用逗号分隔
dataIds true String 数据项ID,用逗号分隔
  1. //原始的请求内容体
  2. {"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加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "LNBSCB3F0FD120736": {
  6. "2201": "40.5",//车速 km/h
  7. "2202": "120.0",//里程 km
  8. "2203": "1",//挡位
  9. "2204": "1",//制动状态
  10. "2214": "1",//DC-DC状态
  11. "2613": "120",//总电压
  12. "2615": "40",//soc
  13. "2301": "0x01",//充电状态(0x01:停车充电;0x02:行驶充电;0x03:未充电状态;0x04:充 //电完成;“0xFE”表示异常,“0xFF”表示无效。)
  14. "2603": "40.5",//单体电池最高电圧
  15. "2606": "120.0",//单体电池最低电压
  16. "2609": "40.5",//电池最高温度
  17. "2612": "120.0",//电池最低温度
  18. "2209": "40.5",//制动踏板行程值
  19. "2208": "120.0",//加速踏板行程值
  20. "2213": "1",//运行模式
  21. "2205": "1",//驱动状态
  22. "3201": "1",//车辆状态(0:待质检;1:待销售;2:已销售;3:已报废;4:测试车辆)
  23. "2614": "40.5",//总电流
  24. "2617": "120.0",//正极对地电阻(绝缘电阻)
  25. },
  26. "LNBSCB3F1FD120728": {
  27. "2201": "40.5",//车速 km/h
  28. "2202": "120.0",//里程 km
  29. ......
  30. }
  31. }
  32. }

2.2 车企相关

2.2.1 根据车企名称获取企业所有车辆的运行总里程

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/VehUnitService/getVehMilByUnit

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

该接口不需要输入参数

参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "mileage": "100000"//该企业下所有车辆的运行总里程(单位:KM)
  6. }
  7. }

2.2.2 根据车企名称获取企业所有车辆数

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/VehUnitService/getVehCountByUnit

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

该接口不需要输入参数

参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "count": "100000"//该企业下所有车辆数(单位:辆)
  6. }
  7. }

2.2.3 根据车企名称获取企业当前在线车辆数

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/VehUnitService/getVehOnlineByUnit

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

该接口不需要输入参数

参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "count": "10000"//该企业当前在线车辆数(单位:辆)
  6. }
  7. }

2.2.4 根据车企名称获取企业分省份的车辆数统计

发起请求,应将参数的requestMsg进行加密,然后组合成完整的请求参数。

/VehUnitService/getVehProByUnit

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

该接口不需要输入参数

参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "total": "3",//总记录数
  6. "rows":[
  7. {"province":"山东省","count":"10000"},//province:**省份名** count:**该省车辆总数**
  8. {"province":"山西省","count":"1100"},
  9. {"province":"河北省","count":"9000"}
  10. ]
  11. }
  12. }

2.3 报文查询/分析

2.3.1 报文查询


/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 报文类型
  1. //原始的请求内容体
  2. {
  3. "vids":"LTGACUL51HT000052,LVVDB17B8FB062306",
  4. "startTime":"2016-10-10 10:22:00",
  5. "endTime":"2016-10-10 10:23:00",
  6. "page":1,
  7. "pageRecorders":10,
  8. "type":"0"
  9. //"0":全部 "1":车辆登入 "2":实时信息上报 "3":补发信息上报 "4":车辆登出 "5":平台登入 "6":平台登出 "7":心跳 "8":终端校时(国标)
  10. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "LTGACUL51HT000052": {
  6. "licensePlate": "",//车牌
  7. "vin": "",//VIN
  8. "srvrRecvTime": "",//服务器接收时间
  9. "recvTime": "",//报文时间
  10. "type": "",//类型
  11. "verify": "",//校验
  12. "dataLength": "",//报文长度
  13. "data": ""//原始报文
  14. },
  15. "LVVDB17B8FB062306": {
  16. "licensePlate": "",//车牌
  17. "vin": "",//VIN
  18. ......
  19. }
  20. }
  21. }

2.3.1 报文查询


/portocolServices/uploadMessage

参数 是否必填 类型 说明
requestMsg true String 请求内容体
sign true String 签名值,暂时留空,为以后扩展

请求内容体定义

参数 是否必填 类型 说明
data true String 原始报文
  1. //原始的请求内容体
  2. {
  3. "data":""
  4. }
参数 是否必填 类型 说明
code true int 响应码
msg true String 响应提示
data true String 查询结果,code=0时必填。实现传输的是经过AES加密后的字符串,下面只是方便查看,没有加密处理
  1. {
  2. "code": 0,
  3. "msg": "查询成功",
  4. "data": {
  5. "srcCode": "",//原始报文
  6. "dataJson": ""//解析报文
  7. }
  8. }

附录

响应码定义

描述
0 请求正确
1001 token不合法
1002 参数缺失
1003 其他错误

数据项定义

车辆

编号 数据项名称 描述
2615 soc 单位为%
2202 里程 单位KM
2502 经度 单位度
2503 纬度 单位度
2201 速度 单位KM/S
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注