Nothing Particularly Magnificent

    dingtalk_enterprise

    1.9.11 • Public • Published

    dingtalk enterprise

    钉钉企业号API,自带cache,并自带ISV套件操纵接口。

    安装

    npm install dingtalk_enterprise
    

    示例

    config:

    var DD_enterprise = require('dingtalk_enterprise');
     
    var config = {
      corpid : 'xxxxxxxxxxxxxxxx', //ISV套件控制的话,可不填
      secret : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //ISV套件控制的话,可不填
      getToken : function(callback){
        //从数据库中取出Token,返回的data样式为:{value: 'xxxxxxx', expires:1452735301543}
        fs.readFile(this.suiteid + 'token.txt',function(err, data){
          if(err){
              return callback(err);
          }
          data = JSON.parse(data.toString());
          callback(null, data);
        });
      },
     
      saveToken : function(data, callback){
        //存储Token到数据库中,data样式为:{value: 'xxxxxxx', expires:1452735301543//过期时间}
        fs.writeFile(this.suiteid + 'token.txt',JSON.stringify(data), callback);
      },
     
      getJsApiTicket : function(callback){
        //从数据库中取出JsApiTicket,返回的data样式为:{value: 'xxxxxxx', expires:1452735301543}
        fs.readFile(this.suiteid + 'JsApiTicket.txt',function(err, data){
          if(err){
              return callback(err);
          }
          data = JSON.parse(data.toString());
          callback(null, data);
        });
      },
     
      saveJsApiTicket : function(data, callback){
        //存储JsApiTicket到数据库中,data样式为:{value: 'xxxxxxx', expires:1452735301543//过期时间}
        fs.writeFile(this.suiteid + 'JsApiTicket.txt',JSON.stringify(data), callback);
      },
     
      token_expires_in : 1000 * 60 * 60 * 2 - 10000,  //token过期时间,可不填。 默认1小时59分50秒(钉钉规定2小时),防止网络延迟.
    };

    创建企业号API:

    var api = new DD_enterprise(config);

    用ISV套件操作企业号?OK

    只需要两个参数:

    //newSuiteApi: 一个dingtalk_suite实例。
    var suiteCtrlE = new DD_enterprise.CtrlBySuite(newSuiteApi, config);
    //只需传入corpid, 和企业号的永久授权码就能控制企业号。
    var api = suiteCtrlE.ctrl(corpid, permanent_code);

    如果你获取永久授权码的同时,获得了token_cache,可以加上第三个参数,这样可以省一次数据库查询。

    //token为Object格式 key为: value , expires
    var api = suiteCtrlE.ctrl(corpid, permanent_code, token_cache);

    如果你获取永久授权码的同时,获得了token_cache和jsapi_ticket_cache,可以加上第四个参数,这样可以省两次数据库查询。

    //token和jsapi_ticket_cache为Object格式 key为: value , expires
    var api = suiteCtrlE.ctrl(corpid, permanent_code, token_cache, jsapi_ticket_cache);

    :ISV套件主动调用api见: dingtalk_suite

    代理中间件

    api.agentMiddleware

    完全的代理模式,此方法可调用钉钉官方企业号文档的所有接口,而不用管token。

    //例:
    //如果是express,什么也不用参数。
    app.use('/agent', api.agentMiddleware());
     
     
    //不是express 怎么办?
    app.use('/agent', api.agentMiddleware(
      function(req, res){ //该方法必须是同步的。
        return {
          method: req.method, //钉钉的api方法。 必须
          url: req.url, //钉钉的api的路径。 必须
          errhandler: function(err){ }//错误处理 必须
        }}));

    客户端仿问ajax示例:

    //获取部门列表
    //钉钉文档:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.9aG2FM&treeId=172&articleId=104979&docType=1 获取部门列表
    var api = '/department/list'; //跟钉钉的一样。
    $.get('/agent' + api, function(data){
      console.log('data', data);
    });

    上传文件示例:

    <form action="/agent/media/upload" method="post" enctype="multipart/form-data">
      <input name="type" value="image">
      <input name="media" type="file">
      <input type="submit" value="提交">
    </form>

    注意

    agentMiddleware为新添加方法,是纯代理模式,它不再判断errcode了。比如说钉钉返回errcode = 1, 老方法会包含在error,而agentMiddleware则不会。

    接口方法

    主要方法

    api.getLatestToken(callback);

    获得最新token。

    //例:
    api.getLatestToken(function(err, token){
      if(err){
       return console.error(err);
      }
      //token格式为:{value: 'xxxxxxx', expires:1452735301543//过期时间}
      console.log('token',token);
    });

    api.getUrlSign(url, callback);

    生成url授权参数,用于前端jsConfig.

    //例:
    api.getUrlSign('http://www.test.com/path', function(err, result){
      if(err){
        return console.error('error', err);
      }
      /*
      result格式为:{
        signature: '23sadfasdfasdf',
        timeStamp:'24234234234234',
        nonceStr:'asfdasdfasdfasfdx'
      }
      */
      console.log('result',result);
    });

    以下方法不推荐使用,只用上面的agentMiddleware足够了。将可能在下版废弃。

    api.get(ddApiPath, opts, callback);

    代理get方法。使有此方法可调用钉钉官方企业号文档的get接口,而不用管token。

    //例:
    //获取部门列表
    //钉钉文档:http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.p5bAUd#获取部门列表
    api.get('/department/list', function(err, result){
      if(err){
        return console.error('err', err);
      }
      console.log('result', result);
    });
     
    //获取部门详情
    //钉钉文档:http://ddtalk.github.io/dingTalkDoc/?spm=a3140.7785475.0.0.p5bAUd#获取部门详情
    api.get('/department/get', {id:2}, function(err, result){
      if(err){
        return console.error('err', err);
      }
      console.log('result', result);
    });

    api.post(ddApiPath, opts, callback);

    代理post方法。使有此方法可调用钉钉官方企业号文档的post接口,而不用管token。

    用法同api.get。

    其它封装的一些方法。

    部门

    //获得部门列表
    api.getDepartments(callback);
     
    //获得部门详情
    api.getDepartmentDetail(id, callback);
     
    //创建部门
    api.createDepartment(name, opts, callback);
    //
    //名字,父id
    api.createDepartment('部门一', 1, callback);
    //名字,详细配置
    api.createDepartment('部门一', {parentid: 1, order:1}, callback);
     
    //更新部门
    api.updateDepartment(id, opts, callback);
     
    //删除部门
    api.deleteDepartment(id, callback);
     

    微应用

    api.createMicroApp(data, callback);
     

    消息

    api.sendToConversation(callback);
     
    api.send(agentid, to, msg, callback);
     

    用户

    //获取部门用户
    api.getDepartmentUsers(id,callback);
     
    //获取部门用户详细
    api.getDepartmentUsersDetail(id,callback);
     
    //获取用户信息
    api.getUser(id, callback);
     
    //通过code获取用户一些信息(App登录用)。
    api.getUserInfoByCode(code, callback);
     

    具体详情请参照阿里钉钉文档

    更多钉钉相关

    ISV套件主动调用API: dingtalk_suite
    ISV套件回调server: dingtalk_suite_callback
    ISV SSO 免登API: dingtalk_sso

    Install

    npm i dingtalk_enterprise

    DownloadsWeekly Downloads

    2

    Version

    1.9.11

    License

    none

    Last publish

    Collaborators

    • hezedu