2017/12/18 钉钉开放API调用

最近接到的任务是钉钉接口的使用和企业内部开发,在为期两周的阅读的调试之后正式开始了这一模块的编写。

首先是钉钉企业认证,在调用部门列表接口时出现了访问ip不在白名单内的情况,后来发现是因为开发者账号管理中ip白名单因为匆忙写错了地址。

钉钉开发的第一步时获取Token,2017/12/18 钉钉开放API调用_第1张图片

之后

如果你是企业内部开发者(将自己公司的HR、OA、客户管理、业务管理等系统接入钉钉),有权限调用
Https请求方式: GET

https://oapi.dingtalk.com/user/simplelist?access_token=ACCESS_TOKEN&department_id=1



在获取到员工id之后可以调用考勤记录开放接口获取

请求说明

Https请求方式: POST

https://oapi.dingtalk.com/user/create?access_token=ACCESS_TOKEN


get和post请求是有差异的

由于第一天记录,显得略微匆忙,这期间出现的问题以及源代码部分将在明天补充上。


=============================================================================

更新补充昨天留下的内容


自己尝试编写了一个测试的小demo

首先,钉钉接口的使用依赖于token作为凭证,通过账号提供的corpid和corpsecret调用接口返回token

获取token方法如下:

public  String getAccess_token(String corpid,String corpsecret) {

    String url = "https://oapi.dingtalk.com/gettoken?corpid=" + corpid+ "&corpsecret=" + corpsecret;

    String accessToken = null;

    try {

        URL urlGet = new URL(url);

        HttpURLConnection http = (HttpURLConnection) urlGet

                .openConnection();

        http.setRequestMethod("GET"); // 必须是get方式请求

        http.setRequestProperty("Content-Type",

                "application/x-www-form-urlencoded");

        http.setDoOutput(true);

        http.setDoInput(true);

        System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒

        System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒

        http.connect();

        InputStream is = http.getInputStream();

        int size = is.available();

        byte[] jsonBytes = new byte[size];

        is.read(jsonBytes);

        String message = new String(jsonBytes, "UTF-8");

        JSONObject demoJson =JSONObject.fromObject(message);

        accessToken = demoJson.getString("access_token");

        System.out.println("token======"+accessToken);

        is.close();

    } catch (Exception e) {

        e.printStackTrace();

    }

    return accessToken;

}


之后发送post请求带参数调用获取部门成员和考勤结果接口。

post请求方法如下:

public static String sendPost(String url, String param) {
    PrintWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        URLConnection conn = realUrl.openConnection();
        // 设置通用的请求属性 注意Authorization生成
        conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
        // 发送POST请求必须设置如下两行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 获取URLConnection对象对应的输出流
        out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
        // 发送请求参数
        out.print(param);
        // flush输出流的缓冲
        out.flush();
        // 定义BufferedReader输入流来读取URL的响应
        in = new BufferedReader(
                new InputStreamReader(conn.getInputStream(),"utf-8"));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
    } catch (Exception e) {
        System.out.println("发送 POST 请求出现异常!" + e);
        e.printStackTrace();
    }
    // 使用finally块来关闭输出流、输入流
    finally {
        try {
            if (out != null) {
                out.close();
            }
            if (in != null) {
                in.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return result;
}
}


你可能感兴趣的:(成长记录)