钉钉事件订阅(一般处理程序)


1、设置基本信息

            string AesKey = ConfigurationManager.AppSettings["AesKey"];//43位随机,由事件订阅页面自动生成
            string Token = ConfigurationManager.AppSettings["Token"];//加解密需要用到的token,由事件订阅页面自动生成
            string appKey = ConfigurationManager.AppSettings["appKey"];// 应用凭证中的appKey
            var dingTalkEncryptor = new DingTalkEncryptor(Token, AesKey, appKey);

2、接收钉钉推送的信息

            string msg_signature = context.Request["msg_signature"];//解密用
            string timestamp = context.Request["timestamp"];//解密用
            string nonce = context.Request["nonce"];//解密用

            Stream stream = context.Request.InputStream;
            if (stream.Length!=0)
            {
                StreamReader streamReader = new StreamReader(stream);
                string json = streamReader.ReadToEnd();//获取到的消息体
                JObject jo = (JObject)JsonConvert.DeserializeObject(json);
                string encrypt = jo["encrypt"].ToString();//消息体内的加密信息

                //对消息进行解密
                string EventType = dingTalkEncryptor.getDecryptMsg(msg_signature, timestamp, nonce, encrypt);

                DingDingAction dingDingAction = new DingDingAction();

                Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(EventType, typeof(Hashtable));
                string eventType = tb["EventType"].ToString();//事件类型
                switch (eventType)
                {
                    case "bpms_task_change"://审批任务开始、结束、转交
                        //解析tb,数据处理
                        break;
                    case "bpms_instance_change"://审批实例开始、结束
                         //解析tb,数据处理
                        break;
                    default:
                         //解析tb,数据处理
                        break;
                }
            }

3、返回信息

            #region 加密返回数据,必须要有,无需修改
            Dictionary<String, String> resultMap = dingTalkEncryptor.getEncryptedMap("success");//加密success,返回信息中必须要有,否则钉钉默认调取失败

            DingDingBack back = new DingDingBack();
            back.msg_signature = resultMap["msg_signature"];
            back.encrypt = resultMap["encrypt"];
            back.timeStamp = resultMap["timeStamp"];
            back.nonce = resultMap["nonce"];
            string backmsg = JsonConvert.SerializeObject(back);
            context.Response.Write(backmsg);
            #endregion

4、返回信息类

        public class DingDingBack {
            public string msg_signature { get; set; }
            public string encrypt { get; set; }
            public string timeStamp { get; set; }
            public string nonce { get; set; }
        }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM