首先,我们来看看第三方公司(充电桩)提供的对接接口文档
接口档@推送停停车费减免信息(供下载)
说明:充电订单账单生成(含挂起),推送减免信息到停车场系统。
业务流程描述
司机驾车驶入停车场。
在设备上启动充电。
结束充电后XX平台将车牌号和减免时长发送给停车场管理系统。
司机驾车驶离。
道闸系统识别车牌,减免充电优化的时长,根据规则进行剩余时长的收费。
注意:一次入场离场之间,最多减免120分钟,如果在这期间多次收到减免信息则需要道闸系统去重,避免叠加。
推送停车费减免接口
字段 说明
URL 停车场系统方定义
Method POST
Type JSON
通讯方式 XX平台调取停车场系统的HTTP接口
服务器地址 XX平台调取停车场系统的服务器地址
请求参数
参数 类型 描述
plateNo String 车牌号
merchId String 停车场唯一标识(停车场系统提供)
duration int 减免时长(分钟)
sign String 签名(调用方按照签名规则生成,停车场系统通过眼前规则校验签名是否正确)
响应
{
"code":10000,
"msg":"成功",
"data":{
}
}
参数 描述
code 10000.减免成功,其他code可自定义,例如{"code":20033,"msg":"减免失败 车辆不在内","data":null}
msg code对应的描述信息
data 其他响应数据,没有为null
下面是签名规则
public void test(String plateNo, String startTime, String endTime) { Map paramMap = Maps.newHashMap(); paramMap.put("plateNo", plateNo); paramMap.put("startTime", startTime); paramMap.put("endTime", endTime); genSign(paramMap, signKey); } public static String genSign(final Map paramMap, String signKey) { String[] keyArray = new String[paramMap.keySet().size()]; paramMap.keySet().toArray(keyArray); Arrays.sort(keyArray); StringBuffer sb = new StringBuffer(); for (String key : keyArray) { if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(paramMap.get(key))) { sb.append(key).append("=").append(paramMap.get(key)).append("&"); } } sb.append("key=").append(DigestUtils.md5Hex(signKey)); logger.info("param : {}", sb.toString()); String sign = DigestUtils.md5Hex(sb.toString()).toUpperCase(); logger.info("param: {} sign: {}", sb.toString(), sign); return sign; }
接下来我们来看看停车系统的数据结构
停车系统为中性版本,T16高清车牌识别管理系统,C/S架构.Windows2008+MsSql2008
分析:
车辆入库后摄像头将识别到的车号等信息插入数据库 MYCARCOMERECORD表.如下字段
ID CardNO CPH CardType InTime OutTime ...InPic ...SFTime...SFGate 等(其他字段忽略不计)
经过模拟软件功能中央收费,发现车辆入库后 中央收费将计算InTime到收费时间点停车费.缴纳后InTime 时间修改为当前时间.再在SFGate由空修改为"中央收费"标记.中央收费后面的停车时间系统将继续统计.
很明显,我们只要将某公司在线支付充电费后发送的 Http POST数据到我们的接口来操作数据库InTime 即可. JAVA/.NET/PHP等语言均可以完成开发.
我采用JAVA开发一套接口,应用在充电桩停车场.运行了一段时间没有发现问题.该方案得到有几个亿用户群体的公司开发技术团队认可.有兴趣的可以联系我 QQ:264059790