钉钉 jsapi-node (1)

基于express的钉钉微应用探索

建立服务

首先已经默认已经安装了node环境和npm工具

      
       1
      
      
       2
      
      
       //使用express工具创建dingtalk项目,使用ejs模板
      
      
       express dingtalk --ejs
      

安装ding_jsapi_redis库

      
       1
      
      
       cnpm install ding_jsapi_redis --save
      

在项目更目录创建config.js配置文件,文件内容包含如下

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       //钉钉的相关配置信息
      
      
       exports.ding = {
      
      
           corpId:"", //必填
      
      
           secret:"",//必填
      
      
           prefix:"" //必填,该参数是用于区分redis服务器中的多个token和ticket准备的 ,例如ding_
      
      
       };
      
      
       //ridis服务器相关配置
      
      
       exports.redis = {
      
      
           port:6379,
      
      
           host :'192.168.1.218',
      
      
           auth:{}
      
      
       };
      
      
      
       exports.domain = "http://192.168.1.6:3000"
      

创建controller

在根目录下新建文件夹controllers,
在controllers文件夹中新建IndexController.js

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       15
      
      
       16
      
      
       17
      
      
       18
      
      
       19
      
      
       20
      
      
       21
      
      
       22
      
      
       23
      
      
       24
      
      
       //首先导入config配置文件
      
      
       var config = require("../config");
      
      
       //导入ding_jsapi_redis
      
      
       var ding = require("ding_jsapi_redis");
      
      
       //将config文件中的参数传入到ding库中
      
      
       ding.conf.ding = config.ding;
      
      
       ding.conf.redis = config.redis;
      
      
      
       module.exports = {
      
      
           index:function(req,res){
      
      
               var url = config.domain+req.url;
      
      
               // {redis:config.redis,ding:config.ding}
      
      
               var params = {
      
      
                   id:"31441266"
      
      
               }
      
      
               var url = "http://192.168.1.6:3000/";
      
      
               ding.getSignature(url).then(function(data){
      
      
                   console.log(data);
      
      
                   res.render('index', { title: 'Express',dd_config:data });
      
      
               }).catch(function (err) {
      
      
                   console.log(err)
      
      
               })
      
      
           }
      
      
       }
      

编辑index.ejs

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       15
      
      
       16
      
      
       17
      
      
       18
      
      
       19
      
      
       20
      
      
       21
      
      
       <!DOCTYPE html>
      
      
       <html>
      
      
         <head>
      
      
           <title><%= title %></title>
      
      
           <link rel='stylesheet' href='/stylesheets/style.css' />
      
      
           <script type="text/javascript" src="http://g.alicdn.com/ilw/ding/0.7.3/scripts/dingtalk.js"></script>
      
      
           <script type="text/javascript">
      
      
               var corpId = '<%=dd_config.corpId%>' ;
      
      
               var timeStamp = '<%=dd_config.timeStamp%>' ;
      
      
               var nonceStr = '<%=dd_config.nonceStr%>' ;
      
      
               var signature = '<%=dd_config.signature%>' ;
      
      
           </script>
      
      
           <script type="text/javascript" src="javascripts/index.js"></script>
      
      
         </head>
      
      
         <body>
      
      
           <p>Welcome to <%= title %></p>
      
      
           <button id="scan" onclick="scan()">scan</button>
      
      
         </body>
      
      
         <script type="text/javascript">
      
      
         </script>
      
      
       </html>
      

在javascripts中创建index.js文件

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       15
      
      
       16
      
      
       17
      
      
       18
      
      
       19
      
      
       20
      
      
       21
      
      
       22
      
      
       23
      
      
       24
      
      
       25
      
      
       26
      
      
       27
      
      
       28
      
      
       29
      
      
       30
      
      
       31
      
      
       32
      
      
       33
      
      
       34
      
      
       35
      
      
       36
      
      
       37
      
      
       dd.config({
      
      
           agentId: '82143702',
      
      
           corpId:corpId,
      
      
           timeStamp:  timeStamp,
      
      
           nonceStr: nonceStr,
      
      
           signature:  signature,
      
      
           jsApiList: [
      
      
               'biz.util.scan',
      
      
               ]
      
      
       });
      
      
       dd.ready(function () {
      
      
           alert("dd ready");
      
      
      
           dd.error(function(err) {
      
      
               alert('dd error: ' + JSON.stringify(err));
      
      
           });
      
      
       })
      
      
       dd.error(function(err) {
      
      
           alert('dd error: ' + JSON.stringify(err));
      
      
       });
      
      
       function scan() {
      
      
           alert("i am scan");
      
      
           dd.biz.util.scan({
      
      
               type: "barCode",//type为qrCode或者barCode
      
      
               onSuccess: function(data) {
      
      
                   //onSuccess将在扫码成功之后回调
      
      
                   alert(data.text);
      
      
                   console.log(data);
      
      
                   /* data结构
      
      
                    { 'text': String}
      
      
                    */
      
      
               },
      
      
               onFail : function(err) {
      
      
                   alert(err);
      
      
               }
      
      
           })
      
      
       }
      

至此,一个简单的基于钉钉的express服务器就搭建好了。主要核心在于获取ticket,目前已经在ding_jsapi_reids中封装好,直接使用即可。如果有更好的方法请联系我。谢谢。

原文:大专栏  钉钉 jsapi-node (1)