diff --git a/src/main/java/com/supwisdom/dlpay/hk/common/Constant.java b/src/main/java/com/supwisdom/dlpay/hk/common/Constant.java
new file mode 100644
index 0000000..2562a41
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/hk/common/Constant.java
@@ -0,0 +1,170 @@
+package com.supwisdom.dlpay.hk.common;
+
+/**
+ * 常量
+ */
+public interface Constant {
+
+    /**
+     * HK相关接口路径
+     */
+
+    //获取token
+    static public final String TOKEN = "https://api2.hik-cloud.com/oauth/token";
+
+    /******社区******/
+
+    //新增社区
+    static public final String ADD_COMMUNITIES = "https://api2.hik-cloud.com/api/v1/estate/system/communities";
+
+    //删除社区  ---使用时调用delete 方式  路径后加上要删除社区ID
+    static public final String DELETE_COMMUNITIES = "https://api2.hik-cloud.com/api/v1/estate/system/communities/";
+
+    //修改社区
+    static public final String UPDATE_COMMUNITIES = "https://api2.hik-cloud.com/api/v1/estate/system/communities/actions/updateCommunity";
+
+    //查询此租户下所有社区
+    static public final String COMMUNITIES_LIST = "https://api2.hik-cloud.com/api/v1/estate/system/communities/actions/list?pageNo=1&pageSize=10";
+
+
+    /******房屋******/
+
+    //新增楼栋
+    static public final String ADD_BUILDINGS = "https://api2.hik-cloud.com/api/v1/estate/system/buildings";
+
+    //新增单元
+    static public final String ADD_UNITS = "https://api2.hik-cloud.com/api/v1/estate/system/units";
+
+    //新增户室
+    static public final String ADD_ROOMS = "https://api2.hik-cloud.com/api/v1/estate/system/rooms";
+
+    //根据编号查询户室  路径后跟属性和参数
+    static public final String FIND_ROOMS_BY_NUMBER = "https://api2.hik-cloud.com/v1/estate/system/rooms/actions/info";
+
+    //根据户室ID查询户室  路径后跟属性和参数
+    static public final String FIND_ROOMS_BY_ID = "https://api2.hik-cloud.com/api/v1/estate/system/rooms/actions/infoById";
+
+    //删除楼栋  使用时调用delete方式   路径后跟楼栋ID
+    static public final String DELETE_BUILDINGS = "https://api2.hik-cloud.com/api/v1/estate/system/buildings/";
+
+    //删除单元  使用时调用delete方式   路径后跟单元ID
+    static public final String DELETE_UNITS = "https://api2.hik-cloud.com/api/v1/estate/system/units/";
+
+    //删除户室  使用时调用delete方式   路径后跟户室ID
+    static public final String DELETE_ROOMS = "https://api2.hik-cloud.com/api/v1/estate/system/rooms/";
+
+
+    /******人员******/
+
+    //新增人员
+    static public final String ADD_PERSON = "https://api2.hik-cloud.com/api/v1/estate/system/person";
+
+    //删除人员  使用时调用delete方式   路径后跟人员ID
+    static public final String DELETE_PERSON = "https://api2.hik-cloud.com/api/v1/estate/system/person/";
+
+    //修改人员
+    static public final String UPDATE_PERSON = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/updatePerson";
+
+    //设置人员所属社区
+    static public final String ADD_COMMUNITY_PERSON_RELATION = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/addCommunityRelation";
+
+    //删除人员所属社区
+    static public final String DELETE_COMMUNITY_PERSON_RELATION = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/deleteCommunityRelation";
+
+    //设置人员所属户室
+    static public final String ADD_ROOM_PERSON_RELATION = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/addRoomRelation";
+
+    //删除人员所属户室
+    static public final String DELETE_ROOM_PERSON_RELATION = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/deleteRoomRelation";
+
+    //获取人员户室信息    路径后跟属性和参数
+    static public final String FIND_PERSON_ROOMS = "https://api2.hik-cloud.com/api/v1/estate/system/person/actions/roomList";
+
+    /******物业人员管理******/
+
+    //新增物业管理人员
+    static public final String ADD_PROPERTY_MANAGER = "https://api2.hik-cloud.com/api/v1/estate/system/property";
+
+    //修改物业管理人员
+    static public final String UPDATE_PROPERTY_MANAGER = "https://api2.hik-cloud.com/api/v1/estate/system/property/actions/updateProperty";
+
+    //删除物业管理人员   使用时调用delete方式   路径后跟物业人员ID
+    static public final String DELETE_PROPERTY_MANAGER = "https://api2.hik-cloud.com/api/v1/estate/system/property/";
+
+    /******设备管理******/
+
+    //查询社区下设备通道列表  路径后跟属性参数
+    static public final String FIND_COMMUNITY_DEVICE = "https://api2.hik-cloud.com/api/v1/estate/devices/channels/actions/listByCommunityId";
+
+    /******卡片管理******/
+
+    //新增卡片(白卡)
+    static public final String ADD_CARDS = "https://api2.hik-cloud.com/api/v1/estate/system/cards";
+
+    //删除卡片(白卡)  使用时调用delete方式   路径后跟卡片ID
+    static public final String DELETE_CARDS = "https://api2.hik-cloud.com/api/v1/estate/system/cards/";
+
+    //开卡
+    static public final String OPEN_CARD = "https://api2.hik-cloud.com/api/v1/estate/system/cards/actions/openCard";
+
+    //退卡
+    static public final String REFUND_CARD = "https://api2.hik-cloud.com /api/v1/estate/system/cards/actions/refundCard";
+
+    //换卡
+    static public final String CHANGE_CARD = "https://api2.hik-cloud.com/api/v1/estate/system/cards/actions/changeCard";
+
+    //挂失卡
+    static public final String LOSS_CARD = "https://api2.hik-cloud.com/api/v1/estate/system/cards/actions/lossCard";
+
+    //解挂卡
+    static public final String CANCEL_LOSS_CARD = "https://api2.hik-cloud.com/api/v1/estate/system/cards/actions/cancelLossCard";
+
+    //补卡
+    static public final String REISSUE_CARD = "https://api2.hik-cloud.com/api/v1/estate/system/cards/actions/reissueCard";
+
+    /******门禁组件******/
+
+    //获取人员门禁设备信息  路径后跟属性参数
+    static public final String FIND_PERSON_REMOTE_DEVICE = "https://api2.hik-cloud.com/api/v1/estate/entranceGuard/remoteControl/actions/deviceList";
+
+    /******人脸信息******/
+
+    //人脸信息下发
+    static public final String ISSUED_FACE = "https://api2.hik-cloud.com/api/v1/estate/entranceGuard/permissions/actions/faceIssued";
+
+    //人脸信息删除
+    static public final String DELETE_ISSUED_FACE = "https://api2.hik-cloud.com/api/v1/estate/entranceGuard/permissions/actions/deleteFaceIssued";
+
+    /******远程控门******/
+
+    //远程开门
+    static public final String REMOTE_DOOR = "https://api2.hik-cloud.com/api/v1/estate/entranceGuard/remoteControl/actions/gateControl";
+
+    /******动态密码******/
+
+    //动态密码生成
+    static public final String DYNAMIC_CODE = "https://api2.hik-cloud.com/api/v1/estate/entranceGuard/permissions/actions/dynamicCode";
+
+    /******访客管理组件******/
+
+    //访客登记
+    static public final String ADD_VISITORS = "https://api2.hik-cloud.com/api/v1/estate/visitors";
+
+    //访客删除  使用delete请求方式 后跟访客记录ID
+    static public final String DELETET_VISITORS = "https://api2.hik-cloud.com/api/v1/estate/visitors/";
+
+    /******消息管理组件******/
+
+    //创建消费者
+    static public final String ADD_CONSUMER = "https://api2.hik-cloud.com/api/v1/mq/consumer/group1";
+
+    //消息信息
+    static public final String CONSUME_MESSAGES = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages";
+
+    //提交偏移量
+    static public final String COMMIT_OFFSETS = "https://api2.hik-cloud.com/api/v1/mq/consumer/offsets";
+
+    /******第三方云眸平台跳转******/
+    static public final String HIK_CLOUD_URL = "https://api2.hik-cloud.com";
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/hk/common/Resp.java b/src/main/java/com/supwisdom/dlpay/hk/common/Resp.java
new file mode 100644
index 0000000..dfeeb92
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/hk/common/Resp.java
@@ -0,0 +1,33 @@
+package com.supwisdom.dlpay.hk.common;
+
+import java.io.Serializable;
+
+public class Resp<T extends Serializable> {
+    private String code;
+    private String message;
+    private T data;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/util/HTTPSCertifiedClient.java b/src/main/java/com/supwisdom/dlpay/util/HTTPSCertifiedClient.java
new file mode 100644
index 0000000..32b0ebf
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/HTTPSCertifiedClient.java
@@ -0,0 +1,32 @@
+package com.supwisdom.dlpay.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.KeyStore;
+import javax.net.ssl.SSLContext;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.ssl.SSLContexts;
+public class HTTPSCertifiedClient extends HTTPSClient {
+    public HTTPSCertifiedClient() {
+
+    }
+
+    @Override
+    public void prepareCertificate() throws Exception {
+        // 获得密匙库
+        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        FileInputStream instream = new FileInputStream(
+                new File("C:/Users/xxx.keystore"));
+        // FileInputStream instream = new FileInputStream(new File("C:/Users/xxx.keystore"));
+        try {
+            // 密匙库的密码
+            trustStore.load(instream, "password".toCharArray());
+        } finally {
+            instream.close();
+        }
+        SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, TrustSelfSignedStrategy.INSTANCE)
+                .build();
+        this.connectionSocketFactory = new SSLConnectionSocketFactory(sslcontext);
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/util/HTTPSClient.java b/src/main/java/com/supwisdom/dlpay/util/HTTPSClient.java
new file mode 100644
index 0000000..0738c38
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/HTTPSClient.java
@@ -0,0 +1,52 @@
+package com.supwisdom.dlpay.util;
+
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+
+public abstract class HTTPSClient extends HttpClientBuilder {
+    private CloseableHttpClient client;
+    protected ConnectionSocketFactory connectionSocketFactory;
+
+    /**
+     * 初始化HTTPSClient
+     *
+     * @return 返回当前实例
+     * @throws Exception
+     */
+    public CloseableHttpClient init() throws Exception {
+        this.prepareCertificate();
+        this.regist();
+
+        return this.client;
+    }
+
+    /**
+     * 准备证书验证
+     *
+     * @throws Exception
+     */
+    public abstract void prepareCertificate() throws Exception;
+
+    /**
+     * 注册协议和端口, 此方法也可以被子类重写
+     */
+    protected void regist() {
+        // 设置协议http和https对应的处理socket链接工厂的对象
+        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+                .register("http", PlainConnectionSocketFactory.INSTANCE)
+                .register("https", this.connectionSocketFactory)
+                .build();
+        PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+        HttpClients.custom().setConnectionManager(connManager);
+
+        // 创建自定义的httpclient对象
+        this.client = HttpClients.custom().setConnectionManager(connManager).build();
+        // CloseableHttpClient client = HttpClients.createDefault();
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/util/HTTPSClientUtil.java b/src/main/java/com/supwisdom/dlpay/util/HTTPSClientUtil.java
new file mode 100644
index 0000000..ddc4d73
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/HTTPSClientUtil.java
@@ -0,0 +1,125 @@
+package com.supwisdom.dlpay.util;
+
+import com.google.gson.Gson;
+import com.supwisdom.dlpay.hk.common.Resp;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.util.*;
+
+public class HTTPSClientUtil {
+    private static final String DEFAULT_CHARSET = "UTF-8";
+    public static String doPost(HttpClient httpClient, String url, Map<String, String> paramHeader,
+                                Map<String, String> paramBody) throws Exception {
+        return doPost(httpClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
+    }
+
+    public static String doPost(HttpClient httpClient, String url, Map<String, String> paramHeader,
+                                Map<String, String> paramBody, String charset) throws Exception {
+
+        String result = null;
+        HttpPost httpPost = new HttpPost(url);
+        setHeader(httpPost, paramHeader);
+        setBody(httpPost, paramBody, charset);
+        HttpResponse response = httpClient.execute(httpPost);
+        if (response != null) {
+            HttpEntity resEntity = response.getEntity();
+            if (resEntity != null) {
+                result = EntityUtils.toString(resEntity, charset);
+            }
+        }
+
+        return result;
+    }
+
+    public static String doGet(HttpClient httpClient, String url, Map<String, String> paramHeader,
+                               Map<String, String> paramBody) throws Exception {
+        return doGet(httpClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
+    }
+
+    public static String doGet(HttpClient httpClient, String url, Map<String, String> paramHeader,
+                               Map<String, String> paramBody, String charset) throws Exception {
+
+        String result = null;
+        HttpGet httpGet = new HttpGet(url);
+        setHeader(httpGet, paramHeader);
+
+        HttpResponse response = httpClient.execute(httpGet);
+        if (response != null) {
+            HttpEntity resEntity = response.getEntity();
+            if (resEntity != null) {
+                result = EntityUtils.toString(resEntity, charset);
+            }
+        }
+
+        return result;
+    }
+
+
+    private static void setHeader(HttpRequestBase request, Map<String, String> paramHeader) {
+        // 设置Header
+        if (paramHeader != null) {
+            Set<String> keySet = paramHeader.keySet();
+            for (String key : keySet) {
+                request.addHeader(key, paramHeader.get(key));
+            }
+        }
+    }
+
+    private static void setBody(HttpPost httpPost, Map<String, String> paramBody, String charset) throws Exception {
+        // 设置参数
+        if (paramBody != null) {
+            List<NameValuePair> list = new ArrayList<NameValuePair>();
+            Set<String> keySet = paramBody.keySet();
+            for (String key : keySet) {
+                list.add(new BasicNameValuePair(key, paramBody.get(key)));
+            }
+
+            if (list.size() > 0) {
+                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
+                httpPost.setEntity(entity);
+            }
+        }
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        HttpClient httpClient = null;
+
+        httpClient = new HTTPSTrustClient().init();
+        //httpClient = new HTTPSCertifiedClient().init();
+
+        //String url = "https://api2.hik-cloud.com/oauth/token";
+        String url = "https://api2.hik-cloud.com/api/v1/estate/system/communities/actions/list?pageNo=1&pageSize=10";
+
+        Map<String, String> paramHeader = new HashMap<>();
+        paramHeader.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+        paramHeader.put("Authorization", "bearer 913d06ca-7f08-4103-9d43-b906c168b19e");
+
+        Map<String, String> paramBody = new HashMap<>();
+        //paramBody.put("client_id", "f2a70c45594f44e7a7468a5fcd9d5b62");
+        //paramBody.put("client_secret", "7f99dc28bcaa46aeb4596fe607ae95e1");
+        //paramBody.put("grant_type", "client_credentials");
+        //paramBody.put("scope", "app");
+        //String result = doPost(httpClient, url, paramHeader, paramBody);
+
+        String result = HTTPSClientUtil.doGet(httpClient, url, paramHeader, paramBody);
+
+        System.out.println(result);
+
+        Gson gson = new Gson();
+
+        Resp resp = gson.fromJson(result, Resp.class);
+
+        System.out.println(resp.getMessage());
+
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/util/HTTPSTrustClient.java b/src/main/java/com/supwisdom/dlpay/util/HTTPSTrustClient.java
new file mode 100644
index 0000000..cd66751
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/HTTPSTrustClient.java
@@ -0,0 +1,39 @@
+package com.supwisdom.dlpay.util;
+
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+public class HTTPSTrustClient extends HTTPSClient {
+    public HTTPSTrustClient() {
+    }
+
+    @Override
+    public void prepareCertificate() throws Exception {
+        // 跳过证书验证
+        SSLContext ctx = SSLContext.getInstance("TLS");
+        X509TrustManager tm = new X509TrustManager() {
+            @Override
+            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+            }
+
+            @Override
+            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+            }
+
+            @Override
+            public X509Certificate[] getAcceptedIssuers() {
+                return null;
+            }
+        };
+        // 设置成已信任的证书
+        ctx.init(null, new TrustManager[] { tm }, null);
+        this.connectionSocketFactory = new SSLConnectionSocketFactory(ctx);
+    }
+
+
+}
