停车管理平台通信协议.docx
《停车管理平台通信协议.docx》由会员分享,可在线阅读,更多相关《停车管理平台通信协议.docx(37页珍藏版)》请在冰豆网上搜索。
![停车管理平台通信协议.docx](https://file1.bdocx.com/fileroot1/2022-11/21/77c410f7-f3b4-4d26-a816-b5a61c95ff12/77c410f7-f3b4-4d26-a816-b5a61c95ff121.gif)
停车管理平台通信协议
附件2
平台接入IP/端口——220.248.75.39:
12600
联调联系人:
杨允强QQ:
471004624
上海市公共停车信息接入通讯协议
1.1适用范围
本通讯协议适用于上海市公共停车场(库)采集终端、各公共停车二级平台与市级公共停车管理信息平台之间实时停车信息的上传、交互。
根据各停车场库、平台及运营模式的不同条件,以下3种模式均可适用本协议。
1.1.1停车场库直联模式
在此模式下,停车场库服务器端通过无线通讯装置(如3G路由器/网卡)的方式,直接与市级公共停车管理信息平台之间进行实时停车信息的上传、交互。
通讯方式、内容格式直接按照本协议内容执行。
(典型场库:
10个P+R停车场库)
1.1.2停车场库+采集终端模式
在此模式下,停车场库服务器端以指定格式(沪交科〔2013〕713号《公共停车场(库)电子收费系统技术要求》)将实时停车信息,通过RS485、TCP/IP、USB等物理通讯方式,上传到由交通卡公司提供的场库采集终端设备。
由采集终端设备转换为本协议格式后,通过无线网络转发到市级公共停车管理信息平台。
(典型场库:
50个独立接入的场库中的部分)
1.1.3停车场库二级平台模式
在此模式下,一定数量停车场库的停车信息已能够实时接入到某二级信息平台。
由该二级平台按本协议要求,将所辖范围内所有停车场库的实时停车信息上传到市级公共停车管理平台。
未来有新场库接入时,按照“新增一家,接入一家”的模式进行上传。
(典型平台:
大手公司数据二级平台)
1.2通讯模式
1.2.1同步应答
发送方与接收方采用同步方式,同时支持长连接与短连接。
当连接上长时间无数据传输时,接收方可以主动断开连接。
如下图所示:
客户端使用同步的方式发送数据.流程如下:
.客户端开启一个连接
.客户端发送一条请求
.服务端接收到请求后,返回相应的结果
.客户端收到返回的结果之后,开始发送下一条请求
.服务端接收到请求后,返回相应的结果
(中间省略N个发送与接收的过程)
.客户端关闭连接.
1.2.2传输约定和异常处理
1)以TCP/IP的协议进行传输。
通讯如果需要加密,考虑https方式实现
2)停车点为数据发送方(请求方),“停车信息平台”系统为数据接收方(响应方)。
3)数据发送/接收过程为同步方式,即一问一答方式,接收方接收到发送方发来的数据后做出回复发送方收到接收方的回复后才进行下一条未发送数据的发送。
4)如果收到接收方的回应为错误数据,则该条数据暂不发送,作为补发数据处理。
接收方不能识别的报文,发送方负责记录和保存,双方共同确定报文不能识别的原因和解决方案,报文能够识别后重发。
5)双方约定的接收响应时间为20秒,即发送方发送一条数据后,如20秒还未收到回复,则断开本次连接。
等待3分钟重新连接并发送当前时间的数据。
6)发送方对于三天内未发送成功的数据自动进行补发,补发时间间隔为30分钟一次。
7)超出自动补发时间段的未发送成功的数据需通过手工方式发送给对方
8)考虑到双方都是通过网络来实现数据传输,并可能遇到不可抗力造成的网络中断(网络运营商造成或自然灾害等),故双方应同时对突发情况做好预警工作,能及时做出人工干预。
1.3协议格式
协议头+通讯内容;
协议头:
总长度为5个字节;
4字节
1字节
表示“通讯内容”部分的长度;
通讯内容是否压缩;
1–通讯内容经过压缩;
0–通讯内容未压缩;
如:
[0x00,0x04,0x00,0x00]表示1024;
通讯内容:
采用json方式封装通讯内容,utf-8编码;
压缩方式采用zip算法,压缩包中文件名为“json.txt”;
举例:
{“code”:
“P011”,”commRequest”:
{“clientId”:
”001”,”tsn”:
”1234567890”,”sim”:
”1234567890”,
”pasm”:
”1234567890”,”sysVer”:
”wince5”,”appVer”:
”pm1.0”},”uid”:
”010001”,”pwd”:
”123456”,”longi”:
”123.4567”,”lati”:
”23.4567”,”batchcode”:
”2011080101000101”,”name”:
”华宁国际停车场”,”address”:
”宣化路300号”,”opentime”:
”24小时”,”price”:
”10元每小时”}
以上例子中文需要url编码
如果为加密传输(当前暂不采用),采用https协议,POST方法,KeyValue内容如下:
commLen=json对象的长度
zipFlag=压缩标志,默认0不压缩
jsonContent=json对象的内容
举例:
POST/HTTP/1.1
Host:
停车信息平台URL
User-Agent:
Content-Type:
application/x-www-form-urlencoded
(----此处空一行----)
commLen=394&zipFlag=0&jsonContent={“code”:
“P011”,”commRequest”:
{“clientId”:
”001”,”tsn”:
”1234567890”,”sim”:
”1234567890”,”pasm”:
”1234567890”,”sysVer”:
”wince5”,”appVer”:
”pm1.0”},”uid”:
”010001”,”pwd”:
”123456”,”longi”:
”123.4567”,”lati”:
”23.4567”,”batchcode”:
”2011080101000101”,”name”:
”华宁国际停车场”,”address”:
”宣化路300号”,”opentime”:
”24小时”,”price”:
”10元每小时”}
以上例子中文需要url编码
1.4请求格式
流水号(intseqno),业务编号(stringcode),通用请求字段(commRequest),业务数据字段;
字段命名:
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
要求:
流水号,连续递增,用尽后从1开始。
由发送方维护
举例:
{“seqno”:
12345678,“code”:
”P01”,”commRequest”:
通用请求字段,…业务数据字段…}
1.5通用请求字段
客户编号(stringclientId),终端序列号(终端硬件的唯一标识,stringtsn),SIM卡号(stringsim),PSAM卡号(stringpsam),系统版本号(终端操作系统版本号,stringsysVer),应用版本号(终端应用版本号,stringappVer)
字段命名:
客户编号:
clientId(string)
终端序列号:
tsn(string)
*SIM卡号:
sim(string)
*PSAM卡号:
psam(string)
*系统版本号:
sysVer(string)
*应用版本号:
appVer(string)
要求:
客户编号,停车收费系统厂商维护的停车场客户编号,不超过20个字符
终端序列号:
数据采集器的硬件编号,不超过16个字符
SIM卡号:
可以是手机号码,ICCID号,空卡序列号,不超过20字符
PSAM卡号:
交通卡公司提供的,不超过12字符
系统版本号:
指数据采集器的系统版本,如wince5.0或android4.3等,不超过20字符
应用版本号:
数据采集器的软件应用版本,要求新版本号与旧版本号进行字符串比较的结果是大于,不超过20字符
系统版本和应用版本确定唯一的终端应用版本,为终端应用更新服务。
举例:
{“clientId”:
”001”,”tsn”:
”1234567890”,”sim”:
”1234567890”,”pasm”:
”1234567890”,”sysVer”:
”wince5”,”appVer”:
”pm1.0”}
对于获取不到的字段可以用默认值填充,比如0或者“”
1.6响应格式
流水号(intseqno),业务编号(stringcode),通用响应字段,业务数据字段(可选);
字段命名:
流水号:
seqno(int)
业务编号:
code(string)
通用响应:
commResponse
举例:
{“commResponse”:
通用响应字段,业务数据字段(可选)}
1.7通用响应字段
返回码(string),主机时间(yyyyMMddHHmmss),消息(string);
字段命名:
返回码:
result(string)
主机时间:
systime(DateTime)
消息:
msg(string)
举例:
{“seqno”:
12345678,“code”:
”P01”,“result”:
”1”,”systime“:
”20110701104559”,”msg”:
”成功”}
1.8返回码定义
值
信息
备注
1
成功;
2
无此用户;
3
密码错误;
5
终端被别的用户登录
6
终端未分配停车点
7
批次号不存在;
…
…
101
客户未注册
102
终端未注册
103
SIM卡号未注册
104
PSAM卡号未注册
999
未知错误;
1.9协议定义
1.9.1停车场/采集设备签到
需求要求:
“采集设备接入和管理功能包括采集设备登记注销、任务分配、证书下发、终端参数设置、终端软件远程升级等”
业务编号
P011
请求
{流水号,业务编号,{通用请求字段},停车点编号,平台编号,工号,密码,经度,纬度,批次号,停车点名称,停车点地址,服务时段,收费标准}
命名
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
停车点编号:
parkingSpotId(string)必须
平台编号:
platformId(string)
工号:
uid(string),不超过12字符
密码:
pwd(string),不超过32字符
经度:
longi(string),不超过16字符,如121.480237
纬度:
lati(string),不超过16字符,如31.2363
批次号:
batchCode(string),不超过32字符
停车点名称:
name(string),不超过30字符
停车点地址:
address(string),不超过100字符
服务时段:
opentime(string),不超过100字符
收费标准:
price(string),不超过100字符
停车点编号规则
采用上海市交委网站中“公共停车”页面,许可证号(备案证号),不超过20字符
如:
许可证号(备案证号)
企业名称
企业地址
企业电话
沪市310000000403
上海浦东国际机场货运站有限公司
速航路168号
68842008-1205
沪市310000000439
上海铁城实业有限公司
真南路1709号
62849164
沪市310000000492-001
上海北方商城停车场
真南路1189号
62502602
平台编号规则
PM+N6
如:
大手科技:
PM000001
批次号的作用是划定一个范围,代表一个人或者一个设备一天中的一个工作时间段。
批次号由发送方产生。
响应
{流水号,业务编号,{通用响应字段}}
命名
流水号:
seqno(int)
业务编号:
code(string)
通用响应字段:
commResponse
举例
请求:
{“seqno”:
1,“code”:
“P011”,”commRequest”:
{“clientId”:
”001”,”tsn”:
”1234567890”,”sim”:
”1234567890”,”pasm”:
”1234567890”,”sysVer”:
”wince5”,”appVer”:
”pm1.0”},”uid”:
”010001”,”pwd”:
”123456”,”longi”:
”123.4567”,”lati”:
”23.4567”,”batchcode”:
”2011080101000101”,”name”:
”华宁国际停车场”,”address”:
”宣化路300号”,”opentime”:
”24小时”,”price”:
”10元每小时”}
响应:
{“seqno”:
1,“code”:
“P011”,“commResponse”:
{“result”:
”1”,”systime”:
”20110701104559”}}
1.9.2下载系统参数(预留)
业务编号
P021
请求
{流水号,业务编号,{通用请求字段},工号,停车点编号,平台编号}
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
工号:
uid(string)
停车点编号:
parkingSpotId(string)
平台编号:
platformId(string)
响应
{流水号,业务编号,{通用响应字段},参数列表{key:
value}}
流水号:
seqno(int)
业务编号:
code(string)
通用响应字段:
commResponse
参数列表:
paramList
参数名称:
key(string)
参数值:
value(string)
举例
请求:
{“seqno”:
1,“code”:
”P021”,通用请求,”uid”:
”010001”}
响应:
{“seqno”:
1,“code”:
”P021”,通用响应,”paramList”:
{“ka”:
”valuea”,”kb”:
”valueb”}}
SP001-心跳间隔;
SP002-保留
SP003-保留
SP004-保留
SP005-保留
SP006-保留
SP007-保留
SP008-通讯超时时间
SP009-重新连接的间隔时间
1.9.3上传终端业务操作流水记录-场库进场
该报文与终端接口中的车辆进场信息对应
业务编号
P131
请求
{流水号,业务编号,{通用请求字段},工号,终端业务操作流水记录列表[{批次号,业务流水号,停车点编号,平台编号,泊位编号,附加泊位,业务类型,操作类型,操作时间,车牌号,包月证号,车辆类型,总剩余车位,月租剩余车位,访客剩余车位,停车凭证类型,停车凭证号}]}
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
工号:
uid(string)
终端业务操作流水记录列表:
businessLogList
批次号:
batchCode(string)
业务流水号:
bizSn(int)
停车点编号:
parkingSpotId(string)必须
平台编号:
platformId(string)
泊位编号:
berthId(string),不超过16字符
附加泊位:
addBerth(string),不超过16字符
业务类型:
businessType(int)
操作类型:
actType(int)必须
操作时间:
actTime(DateTime)必须
车牌号:
carNumber(string)必须,不超过16字符
包月证号:
monthlyCertNumber(string),不超过32字符车辆类型:
carType(int)
总剩余车位:
totRemainNum(int)必须
月租剩余车位:
monthlyRemainNum(int)必须
访客剩余车位:
guestRemainNum(int)必须
停车凭证类型:
voucherType(int)
停车凭证号:
voucherNo(String),不超过20字符
响应
{流水号,业务编号,{通用响应字段}}
流水号:
seqno(int)
业务编号:
code(string)
通用响应字段:
commResponse
说明
批次号:
作用是划定一个范围,代表一个人或者一个设备一天中的一个工作时间段。
业务流水号:
是做一笔新业务增加的流水号,是设备维护的一个序号。
在一个批次中保持唯一。
附加泊位:
如果大型车占用多个泊位,则只能最多选择两个泊位,这两个泊位之间互相将对方做为附加泊位;
业务类型:
1-进场;
2-出场;
操作类型:
方案1(推荐)
到达(进场类型)
101(普通到达-道路&场库)
102(包月到达-道路&场库)
103(特殊到达-道路)
104(免费到达-场库)
105(异常未知车辆-场库)
操作类型:
方案2
0代表月租长包车辆,
1代表时租访客车辆,
2代表免费车辆,
3代表异常未知车辆
车辆类型:
1-小型车;
2-大型车;
进场凭证类型:
1、交通卡
2、银联卡
3、第三方支付
51、VIP卡号
101、临时车卡号
102、临时车票号
1.9.4上传终端业务操作流水记录-场库出场
该报文与终端接口中的车辆出场信息对应
业务编号
P132
请求
{流水号,业务编号,{通用请求字段},工号,终端业务操作流水记录列表[{批次号,业务流水号,停车点编号,平台编号,泊位编号,附加泊位,业务类型,操作类型,操作时间,车牌号,包月证号,车辆类型,总剩余车位,月租剩余车位,访客剩余车位,停车时长,收费金额,支付类型,停车凭证类型,停车凭证号}]}
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
工号:
uid(string)
终端业务操作流水记录列表:
businessLogList
批次号:
batchCode(string)
业务流水号:
bizSn(int)
停车点编号:
parkingSpotId(string)
平台编号:
platformId(string)
泊位编号:
berthId(string)
附加泊位:
addBerth(string)
业务类型:
businessType(int)
操作类型:
actType(int)
操作时间:
actTime(DateTime)
车牌号:
carNumber(string)
包月证号:
monthlyCertNumber(string)车辆类型:
carType(int)
总剩余车位:
totRemainNum(int)
月租剩余车位:
monthlyRemainNum(int)
访客剩余车位:
guestRemainNum(int)
停车时长:
parkingTimeLength(int)
收费金额:
payMoney(int)
支付类型:
paymentType(int)
停车凭证类型:
voucherType(int)
停车凭证号:
voucherNo(String)
响应
{流水号,业务编号,{通用响应字段}}
流水号:
seqno(int)
业务编号:
code(string)
通用响应字段:
commResponse
说明
附加泊位:
如果大型车占用多个泊位,则只能最多选择两个泊位,这两个泊位之间互相将对方做为附加泊位;
业务类型:
1-进场;
2-出场;
操作类型:
方案1(推荐)
离开(出场类型)
201(免费离开-道路)
202(包月离开-道路)
203(特殊离开-道路)
204(付费离开-道路)
205(付费未完成离开-道路)
206(未付费离开-道路)
207(拒付费离开-道路)
211(普通离开-场库)
212(包月离开-场库)
214(免费离开-场库)
215(异常未知离开-场库)
操作类型:
方案2
0代表月租长包车辆,
1代表时租访客车辆,
2代表免费车辆,
3代表异常未知车辆
车辆类型:
1-小型车;
2-大型车;
支付类型:
方案1(推荐)
1-交通卡刷卡;(道路)
2-现金;(道路)
3-管卡;(道路)
10代表现金支付,(场库)
11代表交通卡支付,(场库)
12代表银行卡支付,(场库)
13代表手机支付,(场库)
支付类型:
方案2
0代表现金支付,
1代表交通卡支付,
2代表银行卡支付,
3代表手机支付
1.9.5上传一次完整停车记录
业务编号
P141
请求
{流水号,业务编号,{通用请求字段},工号,终端业务记录[{业务类型,停车点编号,平台编号,泊位编号,附加泊位,车牌号,车辆类型,停车操作类型,离开操作类型,到达时间,离开时间,停车时长,到达批次号,到达业务流水号,离开批次号,离开业务流水号,计费金额,计费折扣,应缴金额,实缴金额,实缴折扣,剩余应付,预付费时长,预付费金额,预付费折扣,补缴金额}]}
流水号:
seqno(int)
业务编号:
code(string)
通用请求字段:
commRequest
工号:
uid(string)
终端业务记录对象:
commParkingRecord
业务类型:
parkingRecordType(int)
停车点编号:
parkingSpotId(string)
平台编号:
platformId(string)
泊位编号:
berthId(string)
附加泊位:
addBerth(string)
车牌号:
carNumber(string)
车辆类型:
carType(int)
停车操作类型:
parkingActType(int)
离开操作类型:
leavingActType(int)
到达时间:
parkingTime(DateTime)
离开时间:
leavingTime(DateTime)
停车时长:
parkingTimeLength(int),用秒数表示
到达批次号:
parkingBatchCode(string)
到达业务流水号:
parkingBizSn(int)
离开批次号:
leavingBatchCode(string)
离开业务流水号:
leavingBizSn(int)
计费金额:
factMoney(int)
计费折扣:
factDiscount(int)
应缴金额:
dueMoney(int)
实缴金额:
payMoney(int)
实缴折扣:
payDiscount(int)
剩余应付:
dueBalance(int)
预付费时长:
prepayTimeLength(int)
预付费金额:
prepayMoney(int)
预付费折扣:
prepayDiscount(int)
补缴金额:
compensateMoney(int)
响应
{流水号,业务编号,{通用响应字段}}
流水号:
seqno(int)
业务编号:
code(string)
通用响应字段:
commResponse
说明
业务类型:
1(停车业务)
2(补缴费业务)
停车操作类型:
离开操作类型
计费金额-计费折扣=应缴金额;
应缴金额=实缴金额+实缴折扣+剩余应付;
对于业务类型为补缴费的,
1.9.