公司业务使用钉钉,集成简道云第三方应用,现实现接口开发对接业务系统实现数据的互通以及表单操作,特此研究以表敬意!!!

参考开发文档进行开发

官方开发文档

一、开发前准备 

1、登录钉钉-工作台-第三方应用(简道云)-右上角小人头-账户中心

云平台上的app的接口 云接口开发_java

 

2、 账号设置(提前设置好密码)-数据接口

发现没有开通接口,需要联系客服开通,简道云官网联系客服,到时候会有客服联系。

试用期单次开通时间最长是14天
如特殊情况可以延长1次

双向:
10万次:1万2
50万次:2万
无限制:25000

3、开通以后创建API Key

4、查看API文档,选择简道云里面创建的应用来查看API文档。

查看该应用对应的接口对应的开发信息,实现公共接口开发,修改官方demo中的对应信息即可。

云平台上的app的接口 云接口开发_java_02

 

二、公共接口

查看 公共接口 开发文档,很详细了,这里不再进行详细说明,只说重点。

demo比较难找,在表单数据接口中,

云平台上的app的接口 云接口开发_简道云_03

云平台上的app的接口 云接口开发_java_04

我这里下载的是java的,导入maven项目到 eclipse中。

云平台上的app的接口 云接口开发_云平台上的app的接口_05

修改apikey(开通接口以后创建的apikey),appid(要实现接口对接的应用id),entryId(应用中具体需要操作的那个表)

最终操作具体到某个表

云平台上的app的接口 云接口开发_java_06

运行查看console,返回结果很清晰,不再阐述。基本都是对某个应用中的某个表进行操作,无非就是增删改查。

这个不是重点,重点是下面的数据推送。

 

三、Webhook

查看公共接口:https://hc.jiandaoyun.com/open/11470

中的demo,这里重点是对接Mysql数据库_Demo,想实现应用中表的操作对应体现在自己的数据库中,实现数据的交互,开发第三方应用对接业务数据。

云平台上的app的接口 云接口开发_数据_07

 

查看帮助文档和代码示例

云平台上的app的接口 云接口开发_java_08

 

文档很详细,下载java demo,导入maven到eclipse

云平台上的app的接口 云接口开发_服务器_09

 

云平台上的app的接口 云接口开发_云平台上的app的接口_10

 

云平台上的app的接口 云接口开发_服务器_11

 

这里使用java http实现web,创建简单的Java Http服务器,参考文章学习

使用Java内置的Http Server构建Web应用

可根据文章中的代码,修改demo进行地址测试。注释部分

public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(3100), 0);
        server.createContext("/callback", new HttpHandler() {
            @Override
            public void handle(HttpExchange httpExchange) throws IOException {
                
            	String method = httpExchange.getRequestMethod();
                if (method.equalsIgnoreCase("post")) {
                    String payload = IOUtils.toString(httpExchange.getRequestBody(), "utf-8");
                    String jdy = httpExchange.getRequestHeaders().get("x-jdy-signature").get(0);
                    URI uri = httpExchange.getRequestURI();
                    Map<String, String> parameterMap = parseParameter(uri.getRawQuery());
                    String nonce = parameterMap.get("nonce");
                    String timestamp = parameterMap.get("timestamp");
                    String signature = Server.getSignature(nonce, payload, SECRET, timestamp);
                    OutputStream out = httpExchange.getResponseBody();
                    if (!signature.equals(jdy)) {
                        httpExchange.sendResponseHeaders(401, 0);
                        out.write("fail".getBytes());
                        out.close();
                        return;
                    }
                    httpExchange.sendResponseHeaders(200, 0);
                    out.write("success".getBytes());
                    out.close();
                    // 处理数据 - 入库出库等处理
                    handleData(payload);
                }
                
                
                /*
            	String response = "Hello World";
            	httpExchange.sendResponseHeaders(200, 0);
            	OutputStream out = httpExchange.getResponseBody();
            	out.write(response.getBytes());
            	out.close();
            	*/
            }
        });

        server.setExecutor(Executors.newCachedThreadPool());
        server.start();
    }

云平台上的app的接口 云接口开发_简道云_12

查看java demo中的端口是3100,需要提前防火墙开放端口,具体操作不说明。开发端口以后测试是否可行

 

 

2、数据推送:

https://hc.jiandaoyun.com/open/10732

工作台-我的应用-(右上角)进入应用管理-(左侧)选择某个表-

云平台上的app的接口 云接口开发_服务器_13

 

注意:目标服务器一定要选择自定义服务器,这样可以选择输入secret,和demo中的对应起来,不然服务器连接测试一直转圈等待,最终socket hang up

云平台上的app的接口 云接口开发_java_14

 

 

云平台上的app的接口 云接口开发_服务器_15

服务器地址必须是域名格式的,测试阶段我选择的是natapp,参考文章,说的很详细。


注册实名认证以后,下载客户端,配置 config.ini

1分钟快速新手图文教程 介绍的很详细,特别注意生成的域名是会变得,每次使用必须保持natapp.exe为打开状态。

云平台上的app的接口 云接口开发_服务器_16

 

 

3、console问题解决

服务器地址测试通过以后,发现控制台出现两个错误:

① Mon Sep 16 16:01:47 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

解决文档:https://www.javazhiyin.com/4572.html

解决方法:

修改demo:添加 useSSL=false

private static final String DB_URL = "jdbc:mysql://localhost:3306/webhook?serverTimezone=UTC&useSSL=false";

 

② Unable to load authentication plugin 'caching_sha2_password'.

解决文档:

解决方法:我下载的mysql版本是8.0的,demo中给的是6.0.6的,修改pom即可。

云平台上的app的接口 云接口开发_云平台上的app的接口_17

 

4、安装mysql数据库,创建表和字段。根据操作的应用中的表,如果修改了字段,记得对应起来。

创建 webhook数据库,it表和相应的字段。

 

云平台上的app的接口 云接口开发_java_18

云平台上的app的接口 云接口开发_java_19

 

5.修改demo中的sql语句,运行server.java,在简道云中操作应用中的表即可在数据库看到数据的变化。