釘釘事件回調c#測試完成


做釘釘事件回調,來監測單據審批狀況,釘釘給的真是一個垃圾demo,打開就報錯,提交工單上去,給的也是沒用的回復

 

折騰了好久,我終於做好了。

 

先說下操作流程:

網站向釘釘發出注冊信息(包含相關數據,及回調的Url地址)

釘釘服務器會訪問該地址,並傳遞相關數據,

本地網站解密數據,並返回加密的“success”

注冊成功,之后可以一直接收到相關的事件信息

 

先注冊:

復制代碼
protected void Button1_Click(object sender, EventArgs e)
    {
        Token _t = new Token();

        string _token = _t.GetTokens();      //獲取Token

        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/call_back/register_call_back");
        OapiCallBackRegisterCallBackRequest request = new OapiCallBackRegisterCallBackRequest();



        request.Url = "http://www.xxx.com/receive.ashx";      //回調Url

        request.AesKey = "45skhqweass5232345IUJKWEDL5251054DSFdsuhfW2";    //隨機43位字符串

        request.Token = "";                      //隨機填寫

        List<string> _arr = new List<string>();

        _arr.Add("bpms_task_change");              //填寫要監控的信息,具體填寫方法看這里 https://open-doc.dingtalk.com/microapp/serverapi2/skn8ld

        _arr.Add("bpms_instance_change");

        request.CallBackTag =_arr;

        OapiCallBackRegisterCallBackResponse response = client.Execute(request, _token);

        string _str = response.Body;

        Response.Write(_str);
    }
復制代碼

 

        [HttpPost]
        public JsonResult Receive(string signature, string timestamp, string nonce, PostBody body)
        {
            //接收encrypt參數
            string encryptStr = body.encrypt.Replace("{\"encrypt\":\"", "").Replace("\"}","");
            //注冊時填寫的token、aes_key、suitekey
            string token = ConfigurationManager.AppSettings["SuiteToken"];
            //token = "123456";//釘釘測試文檔中的token
            string aes_key = ConfigurationManager.AppSettings["Suiteaes_key"];
            //aes_key = "4g5j64qlyl3zvetqxz5jiocdr586fn2zvjpa8zls3ij";//釘釘測試文檔中的aes_key
            string suitekey = ConfigurationManager.AppSettings["DD_corpid"];
            //suitekey = "suite4xxxxxxxxxxxxxxx";//釘釘測試文檔中的suitekey
 
            #region 驗證回調的url
            DingTalkCrypt dingTalk = new DingTalkCrypt(token, aes_key, suitekey);
            string sEchoStr = "";
            int ret = dingTalk.VerifyURL(signature, timestamp, nonce, encryptStr, ref sEchoStr);
            #endregion
 
            #region 解密接受信息,進行事件處理
            string plainText = "";
            ret = dingTalk.DecryptMsg(signature, timestamp, nonce, encryptStr, ref plainText);
            
            Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(plainText, typeof(Hashtable));
            string eventType = tb["EventType"].ToString();
            string res = "success";
            switch (eventType)
            {
                case "user_modify_org"://用戶信息修改,執行代碼
                    #region 用戶信息修改,執行代碼
                    
                    #endregion
                    break;
                default: 
                    break;
            }
 
            timestamp = DateTime.Now.GetTimeStamp().ToString();
            string encrypt = "";
            string signature2 = "";
            dingTalk = new DingTalkCrypt(token, aes_key, suitekey);
            ret = dingTalk.EncryptMsg(res, timestamp, nonce, ref encrypt, ref signature2);
 
            Hashtable jsonMap = new Hashtable
                {
                    {"msg_signature", signature2},
                    {"encrypt", encrypt},
                    {"timeStamp", timestamp},
                    {"nonce", nonce}
                };
 
            return Json(jsonMap);
            #endregion
        }

 

釘釘視頻教程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM