精华内容
下载资源
问答
  • 钉钉开发

    2019-10-24 23:34:23
    散户 —— 从钉钉客户端进入 管理员(有特权,超级散户) —— 从钉钉客户端左下角三个点“更多”进入,工作台,审批 开发者 —— 接口文档 表单设计和流程设计 表单设计,即造单据,设计字段,设计应该填写什么 ...

    用户分类

    1. 散户 —— 从钉钉客户端进入
    2. 管理员(有特权,超级散户) —— 从钉钉客户端左下角三个点“更多”进入,工作台,审批
    3. 开发者 —— 接口文档

    表单设计和流程设计

    • 表单设计,即造单据,设计字段,设计应该填写什么
    • 流程设计,即单据提交后的流向,该让哪些大佬看到,签字,知晓

    其他

    展开全文
  • 阿里钉钉开发jar包

    2020-04-29 17:19:51
    阿里钉钉开发jar包钉钉开发所需要的的jar包,钉钉打卡记录获取等,钉钉接口调用阿里钉钉开发jar包
  • 钉钉开发详解

    万次阅读 2018-11-09 22:03:14
    钉钉开发分为:移动客户端、PC端、服务端三个平台的开发。 1、移动客户端:面对钉钉手机用户和企业用户。 2、PC端:主要面向PC端的用户和企业。 3、服务端,用于用户和企业内部管理的平台方向,例如OA网站。 ...

    开发范围

    钉钉开发分为:移动客户端、PC端、服务端三个平台的开发。

    1、移动客户端:面对钉钉手机用户和企业用户。

    2、PC端:主要面向PC端的用户和企业。

    3、服务端,用于用户和企业内部管理的平台方向,例如OA网站。

    开发流程

    一、免登流程图   点击查看步骤

    二、详细步骤

    步骤1:获取CorpID、CorpSecret(在企业钉钉微应用设置中获取)

    步骤2:获取AccessToken

    开发者在调用开放平台接口前需要通过CorpID和CorpSecret获取AccessToken。获取AccessToken的方法是向 

    https://oapi.dingtalk.com/gettoken?corpid=id&corpsecret=secrect GET请求。

    步骤3:获取jsapi_ticket(服务器中调用,用以生成可用的ticket)点击查看官方文档 

    获取jsapi_ticket

    企业在使用微应用中的JS API时,需要先从钉钉开放平台接口获取jsapi_ticket生成签名数据,并将最终签名用的部分字段及签名结果返回到H5中,JS API底层将通过这些数据判断H5是否有权限使用JS API。

    请求说明

    Https请求方式:GET

    https://oapi.dingtalk.com/get_jsapi_ticket?access_token=ACCESS_TOKEN

    步骤4:签名生成算法

    开发者在web页面使用钉钉容器提供的jsapi时,需要验证调用权限,并以参数signature标识合法性

    签名生成的规则:

    List keyArray = sort(noncestr,timestamp,jsapi_ticket,url);

    String str = assemble(keyArray);

    signature = sha1(str);

    参与签名的字段包括在上文中获取的jsapi_ticket,noncestr(随机字符串,自己随便填写即可),timestamp(当前时间戳,具体值为当前时间到1970年1月1号的秒数),url(当前网页的URL,不包含#及其后面部分,需要对url中query部分做一次urldecode)。例如:

    noncestr=Zn4zmLFKD0wzilzM

    jsapi_ticket=mS5k98fdkdgDKxkXGEs8LORVREiweeWETE40P37wkidkfksDSKDJFD5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcKIDU8l

    timestamp=1414588745

    url=//open.dingtalk.com

    注意:若页面url为http://abc.com?url=http%3A%2F%2Fabc.com%2somewhere,则用于生成签名的url应对query部分做一次urldecode,正确结果应为http://abc.com?url=http://abc.com/somewhere

    步骤1. sort()含义为对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)

    步骤2. assemble()含义为根据步骤1中获的参数字段的顺序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串

    步骤2. sha1()的含义为对在步骤2拼接好的字符串进行sha1加密。

    步骤5:获取免登用户信息 击查看官方文档

    通过CODE换取用户身份

    企业应用的服务器在拿到CODE后,需要将CODE发送到钉钉开放平台接口,如果验证通过,则返回CODE对应的用户信息。**此接口只用于免登服务中用来换取用户信息**

    请求说明

    Https请求方式: GET

    https://oapi.dingtalk.com/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

    展开全文
  • 需要在电脑上调试钉钉开发的页面,钉钉开发版支持pc端调试,包含dingtaik-dev-3.5.3.apk和
  • 1、好多人开始搞钉钉开发不知道怎么做?各种报错也不知道怎么看?这里我告诉你们?第一步,先下载附件,导入开发环境,然后修改环境中的Env 类,配置成你在钉钉开放平台的信息,然后 运行demo 类 看到签名成功就...
  • 开发者手机测试钉钉 ,自建应用测试版
  • 钉钉开发之业务事件回调

    千次阅读 2019-11-26 00:35:04
    钉钉开发 一、钉钉开发之业务事件回调 1.注册业务事件回调接口 ①、微应用服务器调用 注册事件回调接口(post请求) https://oapi.dingtalk.com/call_back/register_call_back?access_token=ACCESS_TOKEN 请求参数...

    钉钉开发

    一、钉钉开发之业务事件回调

    简单的来说:业务事件回调就是 通过向钉钉服务器注册监听 一些指定的事件,当用户在钉钉上操作我们已经监听的事件,那么钉钉服务器就会想 我们的服务器 发送通知,我们可以得到监听事件的详细信息。
    比如:我最近开发遇到的需求,需要获取用户审批实例里面的表单数据,这里我就用了钉钉的业务事件回调,我想钉钉服务器注册我需要监听的事件(这里我监听了,审批实例回调和审批任务回调)。当我向钉钉服务器注册回调接口后,一旦有用户在 钉钉上发起流程,钉钉服务器就会推动给我,而我这边也可以获取用户发起流程的详情。

    1.注册业务事件回调接口

    ①、微应用服务器调用 注册事件回调接口(post请求)

    https://oapi.dingtalk.com/call_back/register_call_back?access_token=ACCESS_TOKEN
    

    请求参数示例:

    {
        "call_back_tag": ["user_add_org", "user_modify_org", "user_leave_org"],
        "token": "123456",
        "aes_key": "xxxxxxxxlvdhntotr3x9qhlbytb18zyz5zxxxxxxxxx",
        "url":"http://test001.vaiwan.com/eventreceive"
    }
    
    参数参数类型必须说明
    access_tokenString调用接口凭证
    call_back_tagArray[String]需要监听的事件类型
    tokenString加解密需要用到的token,ISV(服务提供商)推荐使用注册套件时填写的token,普通企业可以随机填写
    aes_keyString数据加密密钥。用于回调数据的加密,长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,您可以随机生成,ISV(服务提供商)推荐使用注册套件时填写的EncodingAESKey
    urlString接收事件回调的url,必须是公网可以访问的url地址

    返回结果:

    {
        "errcode": 0,
        "errmsg": "ok"
    }
    

    更多 查询事件回调接口、更新事件回调接口、删除事件回调接口、获取回调失败的结果等接口参考 https://ding-doc.dingtalk.com/doc#/serverapi2/pwz3r5

    ②.钉钉服务器会向第①步中请求参数 url 的地址推送消息

    ③.第 ② 和 第③ 都在下面的方法中执行了

    例如:下面callback方法为回调地址,钉钉服务器会返回 signature timestamp nonce 加密后的 json 数据

    package com.controller;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    import com.config.Constant;
    import com.config.URLConstant;
    import com.dingtalk.api.DefaultDingTalkClient;
    import com.dingtalk.api.DingTalkClient;
    import com.dingtalk.api.request.OapiCallBackDeleteCallBackRequest;
    import com.dingtalk.api.request.OapiCallBackGetCallBackRequest;
    import com.dingtalk.api.request.OapiCallBackRegisterCallBackRequest;
    import com.dingtalk.api.response.OapiCallBackDeleteCallBackResponse;
    import com.dingtalk.api.response.OapiCallBackRegisterCallBackResponse;
    import com.dingtalk.oapi.lib.aes.DingTalkEncryptor;
    import com.dingtalk.oapi.lib.aes.Utils;
    import com.util.AccessTokenUtil;
    import com.util.MessageUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Arrays;
    import java.util.Map;
    
    /**
     * E应用回调信息处理
     */
    @RestController
    public class CallbackController {
    
        private static final Logger bizLogger = LoggerFactory.getLogger("BIZ_CALLBACKCONTROLLER");
        private static final Logger mainLogger = LoggerFactory.getLogger(CallbackController.class);
    
        /**
         * 创建套件后,验证回调URL创建有效事件(第一次保存回调URL之前)
         */
        private static final String CHECK_URL = "check_url";
    
        /**
         * 审批任务回调,更多回调类型 参考 https://ding-doc.dingtalk.com/doc#/serverapi2/skn8ld
         */
        private static final String BPMS_TASK_CHANGE = "bpms_task_change";
    
        /**
         * 审批实例回调
         */
        private static final String BPMS_INSTANCE_CHANGE = "bpms_instance_change";
    
        /**
         * 相应钉钉回调时的值
         */
        private static final String CALLBACK_RESPONSE_SUCCESS = "success";
        
        /**
         * 审批模板唯一标识,可以在审批管理后台的 URL 中找到
         */
        public static final String PROCESS_CODE = "***";
    
    
        @RequestMapping(value = "/callback", method = RequestMethod.POST)
        @ResponseBody
        public Map<String, String> callback(@RequestParam(value = "signature", required = false) String signature,
                                            @RequestParam(value = "timestamp", required = false) String timestamp,
                                            @RequestParam(value = "nonce", required = false) String nonce,
                                            @RequestBody(required = false) JSONObject json) {
            String params = " signature:"+signature + " timestamp:"+timestamp +" nonce:"+nonce+" json:"+json;
            try {
                DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(Constant.TOKEN, Constant.ENCODING_AES_KEY,
                    Constant.CORP_ID);
    
                //从post请求的body中获取回调信息的加密数据进行解密处理
                String encryptMsg = json.getString("encrypt");
                String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp, nonce, encryptMsg);
                JSONObject obj = JSON.parseObject(plainText);
    
                //根据回调数据类型做不同的业务处理
                String eventType = obj.getString("EventType");
                if (BPMS_TASK_CHANGE.equals(eventType)) {
                    bizLogger.info("收到审批任务进度更新: " + plainText);
                    // 可以根据 PROCESS_CODE 来判断这是属于哪个模板发起的流程
                    // 参考 https://ding-doc.dingtalk.com/doc#/serverapi2/skn8ld 得到返回的数据做业务
                    //todo: 实现审批的业务逻辑,如发消息
                } else if (BPMS_INSTANCE_CHANGE.equals(eventType)) {
                    bizLogger.info("收到审批实例状态更新: " + plainText);
                    //todo: 实现审批的业务逻辑,如发消息
                    String processInstanceId = obj.getString("processInstanceId");
                    if (obj.containsKey("result") && obj.getString("result").equals("agree")) {
                        MessageUtil.sendMessageToOriginator(processInstanceId);
                    }
                } else {
                    // 其他类型事件处理
                }
    
                // 返回success的加密信息表示回调处理成功【这是第 三 步,返回加密后的 “success” 给钉钉服务器,让钉钉服务器知道此次回调成功了。否则钉钉会持续推动消息的回调接口。】
                return dingTalkEncryptor.getEncryptedMap(CALLBACK_RESPONSE_SUCCESS, System.currentTimeMillis(), Utils.getRandomStr(8));
            } catch (Exception e) {
                //失败的情况,应用的开发者应该通过告警感知,并干预修复
                mainLogger.error("process callback failed!"+params,e);
                return null;
            }
    
        }
    
        public static void main(String[] args) throws Exception{
            // 先删除企业已有的回调
            DingTalkClient client = new DefaultDingTalkClient(URLConstant.DELETE_CALLBACK);
            OapiCallBackDeleteCallBackRequest request = new OapiCallBackDeleteCallBackRequest();
            request.setHttpMethod("GET");
            client.execute(request, AccessTokenUtil.getToken());
    
            // 重新为企业注册回调
            client = new DefaultDingTalkClient(URLConstant.REGISTER_CALLBACK);
            OapiCallBackRegisterCallBackRequest registerRequest = new OapiCallBackRegisterCallBackRequest();
            registerRequest.setUrl(Constant.CALLBACK_URL_HOST + "/callback");
            registerRequest.setAesKey(Constant.ENCODING_AES_KEY);
            registerRequest.setToken(Constant.TOKEN);
            registerRequest.setCallBackTag(Arrays.asList("bpms_instance_change", "bpms_task_change"));
            OapiCallBackRegisterCallBackResponse registerResponse = client.execute(registerRequest,AccessTokenUtil.getToken());
            if (registerResponse.isSuccess()) {
                System.out.println("回调注册成功了!!!");
            }
        }
    }
    
    
    
    展开全文
  • 手机钉钉开发版/手机钉钉安装包/模拟器可以调试手机钉钉开发版/手机钉钉安装包/模拟器可以调试/10002068@Rimet-dingtalk-dev-4.3.0.3226493.apk
  • 钉钉开发(一)——Java给钉钉群推送消息 钉钉开发(二)——Java推送钉钉工作通知

    之前三篇博文中,讲解了如何推送钉钉群消息、工作通知和待办任务,感兴趣的可以点击查看。

    钉钉开发(一)——Java给钉钉群推送消息

    钉钉开发(二)——Java推送钉钉工作通知

    钉钉开发(三)——Java推送钉钉待办任务

    其实钉钉可供开发者使用的功能很多。

    钉钉开放平台中,有很详细的开发文档和示例代码,比照开发并不困难。

     比如之前的发送工作通知中,我们代码中示例的是OA类型,然而实际中,钉钉提供了多达8种通知类型,包括文字、语音、图片等。每种类型如何设置通知体,都有具体说明。

    前文中的发送工作通知,但实际上钉钉发送工作通知是异步的,所以该接口返回结果仅表示发送工作通知的任务是否创建成功。如果想知道通知发送进度、是否发送成功、用户是否已查看等,还需要调用其他接口来获取。

    同样的,对于待办任务而言,用户可以跳转到自定义的超链接中处理相关任务。但是处理的进度如何,任务是否完成了、该用户共有哪些待办任务需要处理,这些也是需要通过其他接口来设置的。

    展开全文
  • 钉钉开发DEMO

    2018-01-07 18:49:08
    此程序为钉钉应用,亲测可以用,非喜勿喷,有任何疑问可以私信,互相交流
  • 之前一篇博文中,讲解了如何推送钉钉群消息,感兴趣的可以点击查看。 钉钉开发(一)——Java给钉钉群推送消息
  • 钉钉开发系列篇之开发第一个Django Web应用 第一部分:在Windows上安装Django 在使用Django开发应用之前,你需要安装它。在这里,采取简单的最小化的安装就可以完成基本的建站任务需求。 Django安装向导: 第一步,...
  • C#如何在钉钉开发平台

    千次阅读 2019-03-11 14:52:19
    C#如何在钉钉开发平台中创建部门 回到目录 C#如何在钉钉开发平台中创建部门  钉钉是阿里巴巴专为中小企业和团队打造的沟通、协同的多端平台,钉钉开放平台旨在为企业提供更为丰富的办公协同解决方案。通过钉钉...
  • TopSdk-钉钉开发

    2018-10-30 11:23:23
    此TopSdk不是最新版本。可以用于开发钉钉相关内容,详情请看TopSdk文档。
  • 钉钉开发之动态获取access_token

    千次阅读 2019-11-26 22:58:08
    一、在有效期内,动态的获取钉钉access_token 在钉钉开放平台下载最新的 sdk ...--钉钉开发jar 包--> <dependency> <groupId>com.taobao.top</groupId> <artifactId...
  • 钉钉开发 01

    2019-11-15 08:58:10
    钉钉token和回调事件的解读钉钉获取token流程总结钉钉回调事回调的流程 钉钉获取token 流程总结 请求钉钉的获取token的url 获取token的api的请求对象 request 设置请求的信息(appkey,appsecret,httpMethod) 执行...
  • 钉钉开发

    2017-07-11 16:01:20
    将文件后缀改为zip即可使用
  • 记一些钉钉开发大坑,官网关于钉钉开发发起审批部分更新了!!! 总体说是API更加全面了,也有其他语言版本的DEMO提供出来 不过我没看过,也不记得链接了,你们可以当我吹B 这部是补充一些开发关于:发起审批部分的...
  • 钉钉开发服务器端API注册业务事件回调接口,基于thinkphp5的小demo,php版本不得高于7.0
  • 前段时间有个政府客户说想开发个程序挂在钉钉上去,说要找钉钉公司来做。我有点奇怪,按理说钉钉公司不就阿里吗,他们什么时候开始接开发的活了。 回来百度查了一下,原来钉钉有自己的开发平台的,大家申请一下都...
  • 钉钉开发系列(三)API的调用

    万次阅读 热门讨论 2016-11-25 10:04:07
    钉钉开发系列(二)结构封装》对相应的结构进行了封装,这样在后续的调用中就会相当方便。这里举GET和POST各一个例子,其他的API可以参照钉钉的开发文档。 比如以GET方式获取部门列表 #region FetchDepartList ...
  • 钉钉开发平台服务端练习:1.在钉钉开发者平台创建一个微应用(前提是注册);2.将编写好的项目放在钉钉微应用中,建立两者的连接。把开发的项目的首页地址,和后台地址,给我们的微应用。地址必须是http://打头的...
  • 钉钉开发初探...

    2019-09-28 02:30:39
    1. - 钉钉开发需要哪些资质,需要申请哪些账号、走哪些流程(像微信小程序的话,一大堆申请、一大堆企业认证)——这些需要提前准备了解清楚 怎么开发? 有哪些功能? 目前市场上有哪些别人的...
  • 钉钉开发系列(十一)钉钉网页扫码登录

    万次阅读 热门讨论 2016-11-04 14:38:09
    在《钉钉开发系列(八)二维码扫描登录的实现》介绍了一种扫码登录的方式,该方式是自己产生二维码,二维码中的URL指到自身的服务器页面,在该页面中以JSSDK的方式来获取钉钉用户的信息。钉钉官方提供了另外两种扫码...
  • 进行钉钉开发后,打开应用时右上角会有三个小点点"...",打开之后会显示一些分享功能或者查看链接的功能,这样对于应用的安全是存在隐患的,那么如何来屏蔽这些按钮功能呢。 经过查找官方api及网络搜索,研究后...
  • 钉钉开发中获取当前用户信息的问题 最近第一次接触钉钉应用开发,遇到了需要传当前用户信息的问题,我查看官方文档[link](https://developers.dingtalk.com/document/app/get-user-userid-through-login-free-code/)...
  • 钉钉开发笔记(1)

    千次阅读 2017-02-19 12:44:46
    钉钉开发分为:1、移动客户端。2、PC端。3、服务端。三个平台的开发。 1、移动端:面对钉钉手机用户和企业用户。 2、同上主要面向PC端的用户和企业。 3、服务端,用于用户和企业内部管理的平台方向,例如OA...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,317
精华内容 6,526
关键字:

钉钉开发