釘釘事件訂閱(一般處理程序)


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