如何对接海康威视系统

1,160 阅读4分钟

1、需求描述:

今天需要对接海康,客户是数据全在海康平台上,所以需要通过海康平台上提供的接口,请求后取到数据存入我们自己系统的数据库中去。

2、解决方案:

1)、首先这种对接第三方系统的功能,一般都是先去对方官网寻找对接文档,通过对方的接口文档去接入自己的系统,这里海康的官方文档地址

open.hikvision.com/docs/docId?…

有需要的可以点进去看看,这里因为我已经对接过了,所以就直接开始下一步的流程。



2)、根据官方文档的话,首先我们需要部署海康威视综合安防管理平台 iSecure CenterV1.5.100或更高版本的产品,

环境准备.png



然后根据文档中的开发前准备拿到合作方Key和合作方Secret,就差不多可以开始开发了, 微信截图_20221224144334.png 这里第二步一般都是客户已经准备好了,会直接告诉你合作方Key和合作方Secret还有服务器地址。



3)、以上都准备好了,就正式开始开发了,先到Cloud开放平台网站(open.hikvision.com/download/)上… 再根据提供的demo开始对接自己的系统了 微信截图_20221224145046.png



4)、先把配置类写好,把之前客户提供的参数写进去

/**
 * @description
 * @param
 * @return
 * @author huang
 * @date 2022/12/24 15:10
 */
public class HaikangConfig {

   public static String host = "客户提供的IP";// 服务器ip端口
   public static String appKey = "appkey";// 秘钥appkey
   public static String appSecret = "appSecret";// 秘钥appSecret
   public static String artemisUrl = "/artemis";//能力开放平台的网站路径

    //需要对接的接口请求地址
   public static String personListMethod = "/api/resource/v2/person/personList";//获取人员列表V2

   public static String personPictureMethod = "/api/resource/v1/person/picture";//提取人员图片

   public static String personFaceMethod = "/api/resource/v1/person/face/get";//全量获取人脸照片

   public static String rootOrgMethod = "/api/resource/v1/org/rootOrg";//获取根组织

   public static String rootOrgListMethod = "/api/resource/v1/org/orgList";//获取根组织列表

   public static String subOrgMethod = "/api/resource/v1/org/parentOrgIndexCode/subOrgList";//根据父组织编号获取下级组织列表

   public static String cardListMethod = "/api/resource/v1/card/cardList";//获取卡片列表

}


5)、根据自己系统所需要对接的接口开始对接,这里我选择对接海康的人员信息接口为例,下面是接口文档和编码

qwe.png

    controller层
   /**
    * Title 获取人员列表v2
    * @param request
    * @param response
    * @param
    */
   @RequestMapping(value="/personList",method=RequestMethod.POST)
   public void personList(HttpServletRequest request,HttpServletResponse response){
      try{
         JSONObject resultJson = haikangService.personList();
         responseOutWithJson(response, resultJson);
      }catch (Exception e) {
         // TODO: handle exception
         logger.error("获取人员列表v2(/haikang/personList)出现异常:",e);
      }
   }

    serviceImpl层
    /**
     * @param
     * @return
     * @description 全量同步海康人员列表信息
     * @author huang
     * @date 2022/12/7 10:50
     */
    @SuppressWarnings("serial")
    public JSONObject personList() {
        JSONObject resultJson = new JSONObject();
        ArtemisConfig.host = HaikangConfig.host; //平台(nginx)IP 和端口
        ArtemisConfig.appKey = HaikangConfig.appKey; //合作方 key
        ArtemisConfig.appSecret = HaikangConfig.appSecret;//合作方 Secret
        final String personListApi = HaikangConfig.artemisUrl + HaikangConfig.personListMethod;
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("https://", personListApi);//根据现场环境部署确认是http还是https
            }
        };
        JSONObject jsonBody = new JSONObject();
        int pageNo = 1;
        int pageSize = 200;//可以根据数量多少自己设置
        int total = 0;
        int page = 0;
        do {
            jsonBody.put("pageNo", pageNo);
            jsonBody.put("pageSize", pageSize);
            String body = jsonBody.toJSONString();
            String result = null;
            try {
                result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);
                resultJson = JSONObject.parseObject(result);
                if (resultJson != null) {
                    JSONArray jsonArray = resultJson.getJSONObject("data").getJSONArray("list");
                    total = Integer.valueOf(resultJson.getJSONObject("data").getString("total"));
                    for (Object arr : jsonArray) {
                        JSONObject map = (JSONObject) arr;

                        String createTime = String.valueOf(map.get("createTime"));
                        String updateTime = String.valueOf(map.get("updateTime"));
                        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
                        DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                        map.get("personId")//海康人员id

                        //对接自己系统的数据库,存入数据库
                        if (数据库中是否已有对应数据) {
                            //更新表数据
                        } else {
                            //新建表中数据
                        }

                    }
                } else {
                    resultJson.put("result", false);
                    resultJson.put("msg", "请求海康接口异常");
                    return resultJson;
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("全量获取人员列表信息v2出错:", e);
            }
            pageNo++;
            if (total % pageSize == 0) {
                page = total / pageSize;
            } else {
                page = total / pageSize + 1;
            }
        } while (pageNo <= page);
        resultJson.put("result", true);
        resultJson.put("msg", "同步成功");
        return resultJson;
    }



选择do{

}while();循环执行对接方法


3、最后:

这类对接第三方系统,尤其是海康、支付宝、微信这些比较出名的平台,根本不用怕的,第一,正因为是大平台,他们肯定有一套自己完整开发流程,有的还会有技术客服在线可以问的,甚至还会有专人和你们公司对接的, 比如支付宝会有业务经理拉你们公司的人进群,当你们公司需要对接支付宝支付时,这些你都是可以问的,当你有不清楚的地方。第二,你也可以上网查,因为平台大,你需要对接,肯定有人已经对接过了,攻略应该也全, 这也是我比较推荐大家去选择的,我个人还是不喜欢总是去请教别人的,一般都是直接百度搜,不到万不得已时是不会去打扰别人的,当然如果一个问题搞了你几个小时了,还是需要虚心请教请教的, 以上就是对接海康的全部内容了,希望可以帮助到你....