@chenpbh
2017-12-18T12:04:22.000000Z
字数 10448
阅读 473
接口文档
版本 | 日期 | 人员 | 变更内容 |
---|---|---|---|
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 |