(1)获取 TOKEN 3
无锡智慧停车云平台接口协议
无锡城投智慧停车运营有限公司
目录
一.概述
本协议主要描述了停车场数据动态接入无锡市智慧停车云平台的协议要求。供具有独立停车场系统的停车场使用,可上传停车场余位数、进出车辆数、进出车辆业务信息、进出车辆照片 等信息。云平台提供以下接口供停车场接入:
(1) 获取 TOKEN
(2) 心跳检测
(3) 时间获取
(4) 车辆到达信息
(5) 车辆离开信息
(6) 车辆业务照片
二.接入步骤
1、向无锡市智慧停车云平台申请,开通接入账号、密码、平台号以及对应密钥信息。
2、向无锡市智慧停车云平台提供需接入的停车场基本信息(参照附表模板提供),获得停车场编号,停车场编号由 6 位行政区划+3位乡镇、街道编码+1 位停车场类别+2 位自编码构成,如 "330203006101"(若停车场信息发生变更,需重新填写停车场基本信息)。
3、根据分配的账号、密码、平台号与停车场编号,调用接口,根据分配的密钥信息加密上传数据。
三.适用范围
本规范描述了无锡市智慧停车云平台具体的接口协议,供停车场系统动态接入到市城管智慧停车云平台,接口总体说明如下。
3.1 消息协议
数据交互地址支持两种方式,http或https的调用方式,如: xxxx://xxxxxxXxx/xxxxxxxXx 或xxxxx://xxxxxxXxx/xxxxxxxXxx
⮚ serverUrl:具体具体服务器地址,如域名或ip+port
⮚ postfixUrl:具体业务地址,如车场信息推送(/xxxx/parkInfo)示例:
停车场信息推送完整地址
xxxxx://x.xxxxxxxx.xxx/xxxxxx/xxxx/xxxxXxxx
3.2 接口规则
描述:无锡智慧停车平台接要求封闭场库动态系统进行数据交互时,应符合相应的接口规范
⮚ 编码格式统一为:UTF-8
⮚ 请求方式统一为:POST
⮚ 请求内容统一为:JSON
除了登录接口(登陆接口无需加密)外,其余接口都需要带上登录获取的 token 字段,token 有失效机制,一旦失效后则重新获取(code参数反馈 20004 时则为 TOKEN 失效)。json 数据的属性见具体接口定义。
请求参数为JSON字符串:
{
“pno”:”平台编号”,
“tn”:”令牌”,
“ts”:”请求时间”
“ve”:”版本号”, “dataItems”:”业务参数”
}
⯎ pno:平台编号(platformNo)
⯎ tn:令牌(token)
⯎ ts:请求时间(yyyyMMddHHmmssSSS)
⯎ ve:版本号(version),可为空,默认1.0
⯎ dataItems:业务参数(有转义符),JSON格式字符串,通过AES对称加密(仅业务参数需要进行加密),key以及向量在申请接入时给出,具体内容及构造方式,见业务接口协议:
⯎
“dataItems”:”[{
\“参数名1\”, \“参数值1\”,
\“参数名2\”, \“参数值2\”,
…
},{
}
\“参数名1\”, \“参数值1\”,
\“参数名2\”, \“参数值2\”,
…
] ”
完整示例:
{
……
“pno”:”test”, “tn”:”757C3F0B0291425E99E0F034DE49855F”, “ts”:”20171124125469456”, “ve”:”1.0”,
“dataItems”:”[{
\“parkId\”: \“330203006101\”,
\“freeCount\”: \“230\”
},{
}]”
}
\“parkId\”: \“330203006101\”,
\“freeCount\”: \“152\”
(1) 通用请求数据见各接口说明文档。
(2) 通用响应数据
序号 | 参数名 | 类型 | 是否必选 | 说明 |
1 | code | String | 是 | 是否成功。1000:成功,其 他:失败 |
2 | msg | String | 是 | 失败原因描述 |
3 | Data | String | 否 | 具体返回数据 |
完整示例:
{
"code":1000, "msg":" 成 功 ",
"data":"xxxxxxxxxxxxxxxxxxxxxx"
}
3.3 安全性
(1) 账号验证
访问接口需提供特定账号、密码。通过账号验证才能调用接口。 账号、密码向无锡市城管局申请。
(2) 停车场权限校验
账号只能对拥有权限的停车场进行接口操作。
(3) 加密规则
业务参数加密后传输,加密方式为AES加密。加密相关配置如下:加密模式: CBC
填充方式: PKCS7Padding密码: parking@123
偏移量: 3202130120001020
输出: HEX
示例:
加密前的:{
“pno”:“test”, “tn”:“757C3F0B0291425E99E0F034DE49855F”, “ts”:“20200605125469456”, “ve”:“1.0”,
“dataItems”:“[{
\“parkId\”: \“330203006101\”,
\“freeCount\”: \“230\”
},{
}]”
}
\“parkId\”: \“330203006102\”,
\“freeCount\”: \“152\”
加密后的内容:
{
“pno”:“test”, “tn”:“757C3F0B0291425E99E0F034DE49855F”, “ts”:“20200605125469456”, “ve”:“1.0”,
“dataItems”: “53fb52b35e1094f1e5b6d137044eab62aa97e1a7c0ce2551b473fe75631444372b3dbe804ea67a4 858f302336b1425ea892d97e1b7fc35420c99ca72761dfa764cd8e5755707054f578ef57298983989
b3731a3c54b5dbc75f164859e4340e7e0b1d69545ff172b92b3efdb5a0e7fea409c1fd6b1f17198ba 3e410689d921281f9fd05fe”
}
解密后的内容:{
“pno”:“test”, “tn”:“757C3F0B0291425E99E0F034DE49855F”, “ts”:“20200605125469456”, “ve”:“1.0”,
“dataItems”:“[{
\“parkId\”: \“330203006101\”,
\“freeCount\”: \“230\”
},{
}]”
}
\“parkId\”: \“330203006102\”,
\“freeCount\”: \“152\”
四. 业务介绍
1、获取 TOKEN
根据用户名密码获取登陆凭证 2、心跳检测
通过心跳,检测停车场通讯是否正常 3、时间获取
统一停车场数据时间 4、车辆到达信息
当停车场有车辆到达时,上传车辆到达信息到市智慧停车云平台系统。
5、车辆离开信息
当停车场有车辆离开时,上传车辆离开信息到市智慧停车云 平台系统。
6、车辆业务照片
上传到达、离开的业务照片。
五.Http 协议接口
5.1 获取TOKEN
功能描述:通过账户、密码进行登录, 登录成功后, 获取对应 token,每次发起请求时,将该字段放于调用tn字段中。
业务说明:在智慧停车云平台系统中,每个停车场都自定义了一 个停车场编号,发送心跳请求需提前获取停车场编号。接口中未提供 停车场信息修改功能,如需修改请联系平台管理员进行操作。
服务地址:bpark-auth/userPark/login请求参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | userName | String | 账户 | 是 |
2 | passWord | String | 密码 | 是 |
返回参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回 1000,失败返 回其他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | Token,有效期为 1 天 |
JSON 请求示例(无需加密):
{
"userName":"admin", "passWord":"123456"
}
JSON 返回示例:失败则返回:
{
"code":20001,
"msg":"用户名密码错误",
"data":""
}
成功则返回:
{
"code":1000, "msg":" 成 功 ",
"data":"xxxxxxxxxxxxxxxxxxxxxx"
}
5.2 心跳检测
功能描述:通过定时发送心跳请求,供平台检测停车场通讯是否 正常,同时同步停车场空位情况。
业务说明:在智慧停车云平台系统中,每个停车场都自定义了一 个停车场编号,发送心跳请求需提前获取停车场编号。接口中未提供 停车场信息修改功能,如需修改请联系平台管理员进行操作。
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | parkId | String | 停车场编号,此编号为系统中的每个停车场的唯一标 识 | 是 |
2 | freeCount | Integer | 停车场空车位数 | 是 |
服务地址:parkpot/heartThrob dataItems业务参数说明:
返回参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回 1000,失败返回 其他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | 系统时间格式(yyyy-mm-dd HH24:mi:ss) | 否 |
{
"pno":"", "tn":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJcIjU2Nzg5MHZibmpta3J0eXV
mZ2hqa2NmdmJuZmdoalwiIiwiZXhwIjoxNTk3OTEzMzI3fQ.b_WVRWXUknc2D4R74OCPLYBq0HiTjd9h8 F5NU4EvD3A",
"ts":"",
"ve":"1.0",
"dataItems":"31d68381c421a69b7a3b47619e82d6abd58123d0077af2573ce519b870d57885d 3490b827aec0c1edc2c80ef8b67dad2"
}
dataItems为加密后的json字符串 dataItems原值(List): [{"parkId":"ym001","freeCount":"0"}] parkId-停车场编号
freeCount-空余车位数
返回参数
{
"code": "1000",
"msg": "成功",
"data": "a4c9e2ca328ecdb5cb0b6e4f8f6d8ebd9fa195193aa718f67ec276370a3a323a
"
}
5.3 时间服务
功能描述:获取系统时间。
业务说明:获取服务器端的系统时间,停车场设备不超过 12 小时应与服务器进行校时以保持前后端时间一致。
服务地址:parkpot/timecheck dataItems业务参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | parkId | String | 停车场编号,此编号为诱导系统中的每个停车场的唯一标 识 | 是 |
返回参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回 1000,失败返回其 他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | 系统时间格式(yyyy-mm-dd HH24:mi:ss) | 否 |
"pno":"", "tn":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJcIjU2Nzg5MHZibmpta3J0eXV
mZ2hqa2NmdmJuZmdoalwiIiwiZXhwIjoxNTk3OTEzMzI3fQ.b_WVRWXUknc2D4R74OCPLYBq0HiTjd9h8 F5NU4EvD3A",
"ts":"",
"ve":"1.0",
"dataItems":"dd9a39ad3def6c1e8401afc7fb302b1949078df2f1c308e86e04f3aca12ea5b1"
}
返回参数
{
"code": "1000",
"msg": "成功",
"data": "6758efb05bfd4d51f653f09ff4d6d636bb2ed885da192e53f6b14e59c0282ea5"
}
5.4 车辆到达业务
功能描述:上传停车场车辆进出业务数据。
业务说明:当车辆到达时,上传到达业务信息;当车辆离开时, 上传离开业务信息。对同一次停车业务,离开业务信息与到达业务信息 的业务编号(recordId)需保持一致。
对于无牌照车辆,当车辆到达时,车牌号可为空;当车辆离开时, 停车场设备自动根据车辆颜色、车辆品牌等信息进行业务识别,匹配 到达业务。
明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | lpn | String | 车牌 | 是 |
2 | plateColor | int | 车牌颜色 (0:未知,1:蓝色,2: 黄色,3:白色,4:黑色,5:绿色) | 是 |
3 | plateType | Int | 车牌类别(0:未知车牌,1:蓝牌小汽车,2:黑牌小汽车,3:单排黄牌,4:双排黄牌(大车尾牌、农用车),5:警车车牌,6:武警车牌,7:个性化车牌,8:单排军车牌,9:双排军车牌,10:使馆 车牌,11:香港进出中国大陆车 | 是 |
服务地址:record/inlog dataItems业务参数说
牌,12: 农用车牌,13: 教练车牌,14: 澳门进出中国大陆车牌,15:双层武警车牌,16:武警总队车牌,17:双层武警总队车 牌,18:民航,19:新能源) | ||||
4 | parkCode | String | 停车场编号(即:parkId) | 是 |
5 | carModel | String | 车型 | 否 |
6 | entryCode | String | 入口编号 | 否 |
7 | inTime | String | 进 场 时 间 (yyyy-MM-dd HH:mm:ss) | 是 |
8 | inChannel | Int | 入场编号 | 是 |
9 | inPicName | String | 入场照片 URL(路径要求:停车 场编号/yyyyMMdd/文件名) | 是 |
10 | carColor | Int | 车辆颜色 (0:" 白 ",1:" 灰 ( 银)",2:" 黄",3:" 粉",4:" 红 ",5:"绿",6:"蓝",7:"棕") | 否 |
11 | recordId | String | 记录 ID 停车场业务编号(业务编号为一次车辆到达离开的业务 ID)为保证唯一性可以考虑 parkId+recordId | 是 |
12 | tollgateID | String | 卡口 id | 是 |
13 | cameraId | String | 摄像机 id | 是 |
14 | freeCount | Int | 剩余车位数 | 是 |
返回参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回 1000,失败返回其他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | 记录 ID 停车场业务编号(业 务编号为一次车辆到达离开的 | 否 |
业务 ID) |
参数:
{
"pno": "",
"tn": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJcIjU2Nzg5M
HZibmpta3J0eXVmZ2hqa2NmdmJuZmdoalwiIiwiZXhwIjoxNTk3OTEzMzI3fQ.b_WVRWXUknc 2D4R74OCPLYBq0HiTjd9h8F5NU4EvD3A",
"ts": "",
"ve": "1.0",
"dataItems": "e202afda14fb7c7e6f98ecba7e4783ff1ddd525c4dee825257b 168f96bce9f94f0a8b50dbad07df2f571f7f490486149a2ea16b983380e9bf150ec7529fa 318bcb7192689433f84415bc26fbdcf6973c0c3283614d82b7a63fdf0076e3b18658e689a 41487317471f64a6cf634b4d12b38685b90d1796b6f053d2234e2d173df2b1948429507da
c659739146c94ac48934cf4f6c15e1de2a690f8e50b449a69bc783da038c4584938c0ec25 e6c643a73aa122e1a9a469720febb24030a2403e5707b26ecb168641bcba075d7a8f4835a 9fbb63fc9083d98d898371d2c9cf21b5"
}
dataItems原值: [{"cameraId":"3","freeCount":34,"inChannel":2,"inPicName":"/sas/xx.
jpg","inTime":"2020-08-20 10:00:00","lpn":"苏
B123124","parkCode":"ym001","plateColor":3,"plateType":2,"recordId": "13513515","tollgateId":"34"}]
返回参数
{
"code": "1000",
"msg": "成功",
"data": ""
}
5.5车辆离开业务
功能描述:上传停车场车辆离开业务数据。
业务说明:当车辆离开时, 上传离开业务信息。对同一次停车业务,离开业务信息与到达业务信息的业务编号(recordId)需保持一致。 对
于无牌照车辆,当车辆到达时,车牌号可为空;当车辆离开时,
停车场设备自动根据车辆颜色、车辆品牌等信息进行业务识别,匹配 到达业务。
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | lpn | String | 车牌 | 是 |
2 | parkCode | String | 停车场编号 | 是 |
3 | exitCode | String | 入口编号 | 否 |
4 | outTime | String | 离 场 时 间 ( yyyy-MM-dd HH:mm:ss) | 是 |
5 | outPicName | String | 出场车辆照片 URL(路径要求:停车场编号 /yyyyMMdd/ 文件 名) | 是 |
6 | outType | Int | 离场类型(1:正常离场;2: 免费放行;3:异常放行) | 是 |
7 | recordId | String | 记录 ID 停车场业务编号(业务编号为一次车辆到达离开的业务 ID)为保证唯一性可以考虑 parkId+recordId | 是 |
8 | shouldPay | int | 应付金额 | 是 |
9 | actualPay | int | 实付金额 | 是 |
10 | remark | String | 备注 | 否 |
11 | tollgateID | String | 卡口 id | 是 |
服务地址:record/outlog dataItems业务参数说明:
12 | outChannel | Int | 出场编号 | 是 |
13 | cameraId | String | 摄像机 id | 是 |
14 | freeCount | Int | 剩余车位数 | 是 |
返回参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回 1000,失败返回其他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | 记录 ID 停车场业务编号(业务编号为一次车辆到达离开的 业务 ID) | 否 |
{
"pno": "",
"tn": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJcIjU2Nzg5M
HZibmpta3J0eXVmZ2hqa2NmdmJuZmdoalwiIiwiZXhwIjoxNTk3OTEzMzI3fQ.b_WVRWXUknc 2D4R74OCPLYBq0HiTjd9h8F5NU4EvD3A",
"ts": "",
"ve": "1.0",
"dataItems": "f489f59b800a2801fef841f9d7b169792ca66c4cd32a8a9e71c 69c379e2fed4783315315b0ad71e6d0371cba91baebde741922f1d4a6ac39ae3a9d1879f2 6231f7afc42e7c49a11cfb50862ceb5561d6ffa3a712bcf830a625b8a8c7ecacd464602b3 5adcb2fc1fbab54c4f30de2b79888b07bbfe23a003bf1ef7782630ad4a3221d6cd1695e72 d5b1781b38a93e936054e509e2d9d445aa49a56f8f2d5219f412f15f43803c426b6f82ceb f5544efb2029877ee8494c9d98b00aa08023a16f2890a7d2f8f2a42f9b2748f110a8f2575 44f5342ee919aa9e181db2939a3578d20251eff5157eaedb5a4fac6141541151"
}
dataItems原值: [{"actualPay":500,"cameraId":"3","freeCount":34,"lpn":"苏
B123124","outChannel":1,"outPicName":"/sas/xx.jpg","outTime":"2020- 08-20
17:00:00","outType":1,"parkCode":"ym001","recordId":"13513515","sho uldPay":500,"tollgateId":"34"}]
返回参数
{
"code": "1000",
"msg": "成功",
"data": ""
}
5.6 车辆业务照片
功能描述:上传停车场进出车辆的相关照片
业务说明:当车辆到达时,上传到达的照片,当车辆离开时,上 传离开的照片。
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | parkId | String | 停车场编号,此编号为诱导系统中的每个停车场的唯 一标识 | 是 |
2 | base64 | String | Base64格式图片 | 是 |
服务地址:file/uploadImg dataItems业务参数说明:
序号 | 字段名称 | 字段类型 | 说明 | 必填 |
1 | String | 成功返回1000,失败返回其 他 | 是 | |
2 | msg | String | 失败原因 | |
3 | data | String | 文件路径 | 否 |
图片文件(不超过 500K)返回参数说明:
图片以base64形式传输
public static String encodeBase64File(String path) throws Exception { File file = new File(path);
FileInputStream inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; xxxxxXxxx.xxxx(buffer);
inputFile.close();
return new BASE64Encoder().encode(buffer);
}
dataItems原值:
{"parkId":"","base64":""} parkId-停车场编号
base64-图片参数:
{
"pno":"", "tn":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJcIjU2Nzg5M
HZibmpta3J0eXVmZ2hqa2NmdmJuZmdoalwiIiwiZXhwIjoxNTk3OTEzMzI3fQ.b_WVRWXUknc 2D4R74OCPLYBq0HiTjd9h8F5NU4EvD3A",
"ts":"",
"ve":"1.0",
"dataItems":"base64 value"
}
返回参数
{
"code": "1000",
"msg": "成功",
"data": "8f7b26d153c4e3ec9718199eacfd277704fe8ae4ff04b5eb05c9fe07
1cb6062926a8aadb84c6d8d4c9925abf690a3148a1c8e39dbfd68b1451c3e49fa762f1ba7 9f7cb49bc10fd5df34639ea5032dfd52ebe0687e2a4defc69cb0a2b4f3330287510bb333b c06ee4cac3338a7408814616561d19408d5f3499ff5375ea3518381e539adc2aafacdb87a bd67f962e91eea6ba5704c34b1bfc9b32c4a58667f2bf6131d6ab108957945deb1083a5f7 011a0c02b03de75f42cbcb75f0fce2e1f6a1"
}
六. 数据字典
6.1 返回码
属性 | 取值 |
code | 1000成功 20001登录失败 20002传参有误 20003token不能为空 20004token无效 20005必填参数不能为空 20007加密方式有误 20008json格式有误 20009场库不存在 20010业务参数不能为空 30001请上传图片 30002图片过大 |
6.2 车牌颜色
属性 | 说明 |
0 | 未知 |
1 | 蓝色 |
2 | 黄色 |
3 | 白色 |
4 | 黑色 |
5 | 绿色 |
6.3 离场类型
属性 | 说明 |
1 | 正常离场 |
2 | 免费放行 |
3 | 异常放行 |
6.4 车牌颜色
属性 | 说明 |
0 | 白 |
1 | 灰(银) |
2 | 黄 |
3 | 粉 |
4 | 红 |
5 | 绿 |
6 | x |
7 | 棕 |
6.5 车牌类别
属性 | 说明 |
0 | 未知车牌 |
1 | 蓝牌小汽车 |
2 | 黑牌小汽车 |
3 | 单排黄牌 |
4 | 双排黄牌(大车尾牌、 农用车) |
5 | 警车车牌 |
6 | 武警车牌 |
7 | 个性化车牌 |
8 | 单排军车牌 |
9 | 双排军车牌 |
10 | 使馆车牌 |
11 | 香港进出中国大陆车牌 |
12 | 农用车牌 |
13 | 教练车牌 |
14 | 澳门进出中国大陆车 牌 |
15 | 双层武警车牌 |
16 | 武警总队车牌 |
17 | 双层武警总队车牌 |
18 | 民航 |
19 | 新能源 |
附表-无锡市公共停车场静态数据信息表
序号 | 停车场名称 | 停车场分类 | 所属区域道 路 | 停车场地址 | 服务电话 | 停车场进口 数 | 停车场出口 数 | 总车位数 | 收费方式 | 收费标准 | 百度经度 | 百度纬度 | 经营单位 |
1 | |||||||||||||
2 |
字段说明:
1、停车场分类包括:道路泊位、公建停车场、配建停车场、临 时停车场
2、收费方式:支持现金支付、支持无感支付、支持支付宝及微 信支付