公安视图库1400的协议

一、平台注册/注销

1.1 注册/注销流程

注册流程1如图所示

图 1

下级平台主动向上级平台注册;注册鉴权信息(用户名和密码)由上级平台提供;

1.2 报文说明

1.2.1 下级第一次注册

POST /VIID/System/Register HTTP/1.1

Host: 192.168.1.240:10000

Accept: application/json,application/*+json

Content-Type: application/VIID+JSON;charset=UTF-8

Connection: keepalive

User-Identify:34020000001110000001

User-Agent: libghttp/1.0

Content-Length: 64

{

."RegisterObject":.{

.."DeviceID":."34020000001110000001"

.}

}

其中192.168.1.240:10000为注册平台的地址

 1.2.2 上级响应未认证

HTTP/1.1 401 Unauthorized

Content-Type: application/json

WWW-Authenticate: Digest realm="firberhome", nonce="8qx43l7i"

1.2.3 下级第二次注册

POST /VIID/System/Register HTTP/1.1

Host: 192.168.1.240:10008

Accept: application/json,application/*+json

Content-Type: application/*+JSON;charset=UTF-8

Connection: keepalive

User-Identify:34020000001110000001

Authorization: Digest username="dbTest", realm="firberhome", nonce="8qx43l7i", uri="/VIID/System/Register", algorithm="MD5", cnonce="wenminchen@126.com", nc=00000001, qop=auth, response="48164a9699ccec9345016d62bc27384e"

User-Agent: libghttp/1.0

Content-Length: 64

{

."RegisterObject":.{

.."DeviceID":."34020000001110000001"

.}

}

1.2.4 注册成功上级响应

HTTP/1.1 200 OK

Content-Type: application/json

{"ResponseStatus":{"Id":"34020000001110000001","LocalTime":"20200512161231","RequestURL":"/VIID/System/Register","StatusCode":0,"StatusString":"OK"}}

以上为完整的注册流程,注销流程类似

二、Keepalived保活

2.1保活流程

下级向上级上报心跳数据

2.2 报文说明

2.2.1 下级上报保活

POST /VIID/System/Keepalive HTTP/1.1

Host: 192.168.1.240:10000

Accept: application/json,application/*+json

Content-Type: application/VIID+JSON;charset=UTF-8

Connection: keepalive

User-Identify:34020000001110000001

User-Agent: libghttp/1.0

Content-Length: 65

{

."KeepaliveObject":.{

.."DeviceID":."34020000001110000001"

.}

}

4.2.2 上级反馈响应

HTTP/1.1 200 OK

Content-Type: application/json

{"ResponseStatus":{"Id":"34020000001110000001","LocalTime":"20200512161231","RequestURL":"/VIID/System/Keepalive","StatusCode":0,"StatusString":"OK"}}

订阅-通知

上下级概念

订阅通知过程本质是数据转移,例如A想通过视图库获得B的机动车数据,那么A就是上级、B就是下级;假如A想通过B间接获得C的机动车数据,那么A就是B的上级,B是C的上级,这个过程为跨级订阅/通知。

 

tep1:订阅者(上级)向被订阅者(下级)发送HTTP POST请求/VIID/Subscribes。

Step2:被订阅者(下级)将订阅成功与否的响应消息返回给订阅者(上级)。

订阅成功后,被订阅者(下级)如果有订阅信息,便会进行通知任务。

Step3:被订阅者(下级)向订阅者(上级)发送HTTP POST请求/VIID/SubscribeNotifications。

Step4:订阅者(上级)返回响应消息。

Step5:被订阅者(下级)接收到Step4订阅者(上级)正确返回结果才会再重复Step3,4的操作,如此循环。

@AuthorizationInterceptor.UnAuthRequest
    @RequestMapping("/subscribes")
    public Result subscribe(
           // @RequestBody SubscribeReq subscribeReq
    ) {
        log.info("订阅接口---------->");
        // 订阅统一标识码 = 公安机关机构代码 + 子类型编码(03-订阅)+ 时间编码(YYYYMMDDhhmmss) + 流水序号(00001)

        String time = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());
        //123456789012
        String subscribeID = "360302000000" + "03" + time + "00001";

        String title = "订阅车牌识别消息";

        String subscribeDetail = "13"; // 订阅类别:视频卡口目录 7--视频卡口目录 12-人脸信息 13-车辆信息

        Integer ResourceClass=4;

        String resourceURI ="360xxxxxxx"; // 订阅资源路径 这个参数很重要 对方提供

        String applicantName = "xxxxx"; // 申请人

        String applicantOrg = "xxxxxx公司"; // 申请单位

        String beginTime ="20210326150000"; //DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());

        String endTime ="20210331230000"; //DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now().plusMinutes(5l));

        String receiveAddr = "http://36.36.1.70:1314/VIID/SubscribeNotifications";

        String ResultImageDeclare="01";

        String ResultFeatureDeclare="-1";

        Integer operateType = 0;

        SubscribeRequestObject subscribeRequestObject = new SubscribeRequestObject();
        SubscribeRequestObject.SubscribeListObject subscribeListObject = new SubscribeRequestObject.SubscribeListObject();
        subscribeRequestObject.setSubscribeListObject(subscribeListObject);
        List<SubscribeRequestObject.Subscribe> subscribeList = new ArrayList<>();

        SubscribeRequestObject.Subscribe subscribe = new SubscribeRequestObject.Subscribe();
        subscribe.setSubscribeID(subscribeID);
        subscribe.setTitle(title);
        subscribe.setSubscribeDetail(subscribeDetail);
        subscribe.setResourceURI("36030220195032160250");
        subscribe.setApplicantName(applicantName);
        subscribe.setApplicantOrg(applicantOrg);
        subscribe.setBeginTime(beginTime);
        subscribe.setEndTime(endTime);
        subscribe.setReceiveAddr(receiveAddr);
        subscribe.setOperateType(operateType);
        subscribeList.add(subscribe);
        subscribeListObject.setSubscribeObject(subscribeList);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/json;charset=utf-8"));
        headers.set("User-Identify","36030220195032160999");

        HttpEntity<String> httpEntity = new HttpEntity<>(JSONUtil.toJsonStr(subscribeRequestObject), headers);
        //   log.info("消息体:{}", JSONUtil.toJsonStr(subscribeRequestObject));
        // 请求执行
        ResponseEntity<String> responseEntity = restTemplate.exchange(subscribeUrl, HttpMethod.POST, httpEntity, String.class);
        log.info("头部消息"+responseEntity.getHeaders());
        if (org.apache.http.HttpStatus.SC_OK == responseEntity.getStatusCode().value()) {
            log.info("响应体"+responseEntity.getBody());
            log.info(Result.success()+"订阅成功");
            return Result.success();
        }
        log.info(responseEntity.getBody());
        log.info(Result.failed()+"订阅失败");
        return Result.failed("订阅失败");
    }


 


版权声明:本文为qq_39274098原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。