钉钉对接星空原创
金蝶云社区-BobbyLIU
BobbyLIU
11人赞赏了该文章 1,818次浏览 未经作者许可,禁止转载编辑于2023年12月15日 14:25:25

最近在一个项目中要求星空对接钉钉数据,

尝试了几种对接方式:

1、用钉钉新接口对接

2、自定义接口对接

3、用钉钉旧接口对接

最后发现除了旧接口可以对接外,其他几种方式都有各自的缺点。

其一:用钉钉新接口对接我这边是直接使用了钉钉开发文档给出的sdk,这个虽然很好用,但是在调试时发现,其使用的Networkjson组件和星空使用的这个组件版本不一致,然而这个组件又不能高版本兼容低版本。如果使用了钉钉的高本版会导致星空无法登录。系统奔溃,如果使用了星空的低版本,钉钉这边的sdk组件又不能运行。

其二:在上次失败后我选中使用自定义的接口去直接调用钉钉提供的地址。发现这种方式根本就没法调通。最后发现是钉钉接口做了安全控制。不允许外部接口随意调用。于是这种方式就废弃了。

其三:使用钉钉旧的接口,这个接口的话挺方便,不过钉钉官方申明,不再对旧接口进行维护,保持原样。

调用这个接口时可以直接取到数据包,

调用本接口前,请注意以下限制:

如果只传了start_time参数,这个时间距离当前时间不能超过120天,end_time不传则默认取当前时间。

如果传了start_time和end_time,时间范围不能超过120天,同时start_time时间距当前时间不能超过365天。

批量获取的实例ID个数(循环获取),最多不能超过10000个。

Open API调用量50万次/月

另外提供部分C#源码供参考


IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");

                OapiGettokenRequest request = new OapiGettokenRequest();

                request.Appkey = AppKey;

                request.Appsecret = AppSecret;

                request.SetHttpMethod("GET");

                OapiGettokenResponse response = client.Execute(request);

                string responsemsg = response.Errmsg;

                if (!responsemsg.Equals("ok"))

                {

                    //输出异常日志

                    string err = "获取钉钉token失败!";

                    var jsonData = "";

                    updatelog(ctx, "无", err, jsonData);

                    return;

                }

IDingTalkClient ProcessInstanceIdclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/listids");

            OapiProcessinstanceListidsRequest reqPro = new OapiProcessinstanceListidsRequest();

            reqPro.ProcessCode = ProcessCode;

            reqPro.StartTime = staticks;

            reqPro.EndTime = endticks;

            reqPro.Size = 20L;

            reqPro.Cursor = cursor;

            //reqPro.UseridList="manager1,manager2";

            OapiProcessinstanceListidsResponse rspPros = ProcessInstanceIdclient.Execute(reqPro, response.AccessToken);

            string rspProsmsg = rspPros.Errmsg;

            if (!rspProsmsg.Equals("ok"))

            {

                //输出异常日志

                string err = "未获钉钉流程id失败!";

                var jsonData = "";

                updatelog(ctx, "无", err, jsonData);

            }

            if (rspPros.Result.NextCursor==0)

            {

                next_cursor = 999999;

            }

            else

            {

                next_cursor = rspPros.Result.NextCursor;

                //next_cursor = 999999;//--------------------------------上线需要删除---------------------------------------------------------

            }



 IDingTalkClient SPClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/get");

                OapiProcessinstanceGetRequest req = new OapiProcessinstanceGetRequest();

                req.ProcessInstanceId = procid;

                OapiProcessinstanceGetResponse rsps = SPClient.Execute(req, response.AccessToken);

                string rsp = rsps.Body;

                JObject respj = JObject.Parse(rsp);

                string respjmsg = (string)respj["errmsg"];

                if (!respjmsg.Equals("ok"))

                {

                    //输出异常日志

                    string err = "未获取到钉钉对应的流程!";

                    var jsonData = "";

                    updatelog(ctx, "无", err, jsonData);

                    continue;

                }

                //流程状态已经完成

                string status = Convert.ToString((string)respj["process_instance"]["status"]);

                if (!status.Equals("COMPLETED"))

                {

                    continue;

                }





图标赞 11
11人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!